diff options
author | Adam Reichold <adam.reichold@t-online.de> | 2020-03-18 11:39:50 +0100 |
---|---|---|
committer | Adam Reichold <adam.reichold@t-online.de> | 2020-03-18 11:39:50 +0100 |
commit | 81a86064c14a7fc25047b6040d65464e732cf501 (patch) | |
tree | 9a11390b4122c55156c73bfc768cf87fe909feeb | |
parent | 80fa729be74bfcfbf9cf2208a55ad95bf113217b (diff) |
Fix vague linkage of Link* class vtables
Due to falling back to the implicitly inline destructors,
some of the Link* classes had all their overridden methods
defined inline with made the linkage of their vtables vague.
This change moves their destructors into a defined translation
unit thereby anchoring their vtables in the libpoppler DSO which
fixes issues using dynamic_cast when builing Poppler using Clang.
-rw-r--r-- | poppler/Link.cc | 20 | ||||
-rw-r--r-- | poppler/Link.h | 20 |
2 files changed, 39 insertions, 1 deletions
diff --git a/poppler/Link.cc b/poppler/Link.cc index 790c41ab..cc3ebf2a 100644 --- a/poppler/Link.cc +++ b/poppler/Link.cc @@ -444,6 +444,8 @@ LinkGoTo::LinkGoTo(const Object *destObj) { } } +LinkGoTo::~LinkGoTo() = default; + //------------------------------------------------------------------------ // LinkGoToR //------------------------------------------------------------------------ @@ -474,6 +476,8 @@ LinkGoToR::LinkGoToR(Object *fileSpecObj, Object *destObj) { } } +LinkGoToR::~LinkGoToR() = default; + //------------------------------------------------------------------------ // LinkLaunch //------------------------------------------------------------------------ @@ -552,6 +556,8 @@ LinkURI::LinkURI(const Object *uriObj, const GooString *baseURI) { } } +LinkURI::~LinkURI() = default; + //------------------------------------------------------------------------ // LinkNamed //------------------------------------------------------------------------ @@ -564,6 +570,8 @@ LinkNamed::LinkNamed(const Object *nameObj) { } } +LinkNamed::~LinkNamed() = default; + //------------------------------------------------------------------------ // LinkMovie //------------------------------------------------------------------------ @@ -607,6 +615,8 @@ LinkMovie::LinkMovie(const Object *obj) { } } +LinkMovie::~LinkMovie() = default; + //------------------------------------------------------------------------ // LinkSound //------------------------------------------------------------------------ @@ -645,6 +655,8 @@ LinkSound::LinkSound(const Object *soundObj) { } } +LinkSound::~LinkSound() = default; + //------------------------------------------------------------------------ // LinkRendition //------------------------------------------------------------------------ @@ -738,6 +750,8 @@ LinkJavaScript::LinkJavaScript(Object *jsObj) { } } +LinkJavaScript::~LinkJavaScript() = default; + Object LinkJavaScript::createObject(XRef *xref, const GooString &js) { Dict *linkDict = new Dict(xref); @@ -793,6 +807,8 @@ LinkOCGState::LinkOCGState(const Object *obj) preserveRB = obj->dictLookup("PreserveRB").getBoolWithDefaultValue(true); } +LinkOCGState::~LinkOCGState() = default; + //------------------------------------------------------------------------ // LinkHide //------------------------------------------------------------------------ @@ -814,6 +830,8 @@ LinkHide::LinkHide(const Object *hideObj) { } } +LinkHide::~LinkHide() = default; + //------------------------------------------------------------------------ // LinkUnknown //------------------------------------------------------------------------ @@ -822,6 +840,8 @@ LinkUnknown::LinkUnknown(const char *actionA) { action = std::string(actionA ? actionA : ""); } +LinkUnknown::~LinkUnknown() = default; + //------------------------------------------------------------------------ // Links //------------------------------------------------------------------------ diff --git a/poppler/Link.h b/poppler/Link.h index 3aa5e0a8..57c169ea 100644 --- a/poppler/Link.h +++ b/poppler/Link.h @@ -164,6 +164,8 @@ public: // Build a LinkGoTo from a destination (dictionary, name, or string). LinkGoTo(const Object *destObj); + ~LinkGoTo() override; + // Was the LinkGoTo created successfully? bool isOk() const override { return dest || namedDest; } @@ -191,6 +193,8 @@ public: // (dictionary, name, or string). LinkGoToR(Object *fileSpecObj, Object *destObj); + ~LinkGoToR() override; + // Was the LinkGoToR created successfully? bool isOk() const override { return fileName && (dest || namedDest); } @@ -243,6 +247,8 @@ public: // Build a LinkURI given the URI (string) and base URI. LinkURI(const Object *uriObj, const GooString *baseURI); + ~LinkURI() override; + // Was the LinkURI created successfully? bool isOk() const override { return hasURIFlag; } @@ -266,6 +272,8 @@ public: // Build a LinkNamed given the action name. LinkNamed(const Object *nameObj); + ~LinkNamed() override; + bool isOk() const override { return hasNameFlag; } LinkActionKind getKind() const override { return actionNamed; } @@ -294,6 +302,8 @@ public: LinkMovie(const Object *obj); + ~LinkMovie() override; + bool isOk() const override { return hasAnnotRef() || hasAnnotTitleFlag; } LinkActionKind getKind() const override { return actionMovie; } @@ -374,6 +384,8 @@ public: LinkSound(const Object *soundObj); + ~LinkSound() override; + bool isOk() const override { return sound != nullptr; } LinkActionKind getKind() const override { return actionSound; } @@ -403,6 +415,8 @@ public: // Build a LinkJavaScript given the action name. LinkJavaScript(Object *jsObj); + ~LinkJavaScript() override; + bool isOk() const override { return isValid; } LinkActionKind getKind() const override { return actionJavaScript; } @@ -423,7 +437,7 @@ class LinkOCGState: public LinkAction { public: LinkOCGState(const Object *obj); - ~LinkOCGState() override = default; + ~LinkOCGState() override; bool isOk() const override { return isValid; } @@ -454,6 +468,8 @@ class LinkHide: public LinkAction { public: LinkHide(const Object *hideObj); + ~LinkHide() override; + bool isOk() const override { return hasTargetNameFlag; } LinkActionKind getKind() const override { return actionHide; } @@ -489,6 +505,8 @@ public: // Build a LinkUnknown with the specified action type. LinkUnknown(const char *actionA); + ~LinkUnknown() override; + // Was the LinkUnknown create successfully? // Yes: nothing can go wrong when creating LinkUnknown objects bool isOk() const override { return true; } |