Summary: | [patch] graphics/okular: fix crash when opening files | ||||||
---|---|---|---|---|---|---|---|
Product: | Ports & Packages | Reporter: | Tijl Coosemans <tijl> | ||||
Component: | Individual Port(s) | Assignee: | freebsd-kde (group) <kde> | ||||
Status: | Closed FIXED | ||||||
Severity: | Affects Only Me | CC: | tcberner | ||||
Priority: | --- | Flags: | tcberner:
maintainer-feedback+
|
||||
Version: | Latest | ||||||
Hardware: | Any | ||||||
OS: | Any | ||||||
Attachments: |
|
Hm, interesting, at a time we already had that patch in the port... must have gone AWOL sometime ago. Please feel free to commit it. mfg Tobias I'll copy it from okular-kde4/files. A commit references this bug: Author: tijl Date: Sat May 12 16:35:56 UTC 2018 New revision: 469738 URL: https://svnweb.freebsd.org/changeset/ports/469738 Log: Add a patch from okular-kde4 that is still needed to fix crashes. PR: 228199 Approved by: kde (tcberner) Changes: head/graphics/okular/Makefile head/graphics/okular/files/ head/graphics/okular/files/patch-shell_shell.cpp |
Created attachment 193330 [details] patch Okular crashes when opening a PDF attachment in Kmail. It also crashes when starting Okular, opening a first file and then opening a second file. The crashes happen because some dynamic_cast calls return NULL. The attached patch replaces these with qobject_cast. I'm not familiar enough with C++ to understand why dynamic_cast fails. The object is actually of type Okular::Part and the casts are side casts from one parent class to another, not up or down casts. I thought dynamic_cast could handle this though. Another way to fix the crash was to down cast to Okular::Part, but then the linker complained that the typeinfo wasn't available and okular had to be linked to okularpart.so to fix that. So, the problem may be that the side cast needs the typeinfo of Okular::Part at runtime and that it isn't available? Using qobject_cast fixes it because it doesn't rely on typeinfo. Can someone reproduce this, because maybe this is some toolchain problem?