Hi,

On Sat, Mar 14, 2020 at 04:54:55PM -0700, Greg Steuck wrote:
> 
> > #0  build_goto_dest (document=<optimized out>, action=<optimized out>, 
> > link=0x0) at \
> > /home/ports/pobj/p2/poppler-0.86.1/poppler-0.86.1/glib/poppler-action.cc:348
> >  348      \
> > if (! link->isOk ()) { [Current thread is 1 (process 435846)]
> > (gdb) print link
> > $1 = (const LinkGoTo *) 0x0
> > (gdb) up
> > #1  _poppler_action_new (document=0x280b77b5c00, link=0x2812b023d40, 
> > title=<optimized \
> > out>) at 
> > /home/ports/pobj/p2/poppler-0.86.1/poppler-0.86.1/glib/poppler-action.cc:630
> >  \
> > 630                     build_goto_dest (document, action, dynamic_cast 
> > <const \
> > LinkGoTo *> (link)); (gdb) print link
> > $2 = (const LinkAction *) 0x2812b023d40
> > (gdb)
> 
> > I'm not a C++ magician, especially if it comes to things like that
> > dynamic_cast, but it really looks odd to me that this pointer is
> > NULL in the callee while it's not NULL in the caller.
> 
> I hope I'm not belaboring the obvious here. This condition seems a
> fairly direct result of an unchecked dynamic_cast.  Per C++
> dynamic_cast description:
> 
> "If the cast fails and new-type is a pointer type, it returns a null
> pointer of that type."
> https://en.cppreference.com/w/cpp/language/dynamic_cast
> 
> This just means that the downcast was a mistake, LinkAction* is NOT a
> LinkGoTo*, but some other subclass of LinkAction of which there is a
> bunch:
[...]

There's a commit upstream that just changes all those dynamic_casts to
static_casts (see complete new diff below). Allthough this looks even
more wrong, it doesn't cause a segmentation fault any longer (but maybe
some completely garbaged object?).

[...]

> Out of curiosity, is MALLOC_OPTIONS any help? If repro is easy, maybe
> rebuild on an OS with ASan support and see what you get from that?

No, MALLOC_OPTIONS=S didn't change anyting for me.

So, new diff with that dynamic_cast -> static_cast commit
(68b6dd2ecd868c1a757cb8b9273e2e26687e5229) included, but I'm unsure
what to do. It probably will be in the next release of poppler.

Ciao,
        Kili


Index: Makefile
===================================================================
RCS file: /cvs/ports/print/poppler/Makefile,v
retrieving revision 1.154
diff -u -p -r1.154 Makefile
--- Makefile    22 Feb 2020 18:55:24 -0000      1.154
+++ Makefile    20 Mar 2020 13:08:24 -0000
@@ -4,7 +4,7 @@ COMMENT-main=   PDF rendering library
 COMMENT-qt5=   Qt5 interface to PDF rendering library
 COMMENT-utils= PDF conversion tools and utilities
 
-V=             0.85.0
+V=             0.86.1
 DISTNAME=      poppler-$V
 CATEGORIES=    print
 PKGNAME-main=  poppler-$V
@@ -16,10 +16,10 @@ REVISION-qt5=       0
 
 EXTRACT_SUFX=  .tar.xz
 
-SHARED_LIBS += poppler              60.0     # 95.0
+SHARED_LIBS += poppler              61.0     # 97.0
 SHARED_LIBS += poppler-glib         19.4     # 8.15
-SHARED_LIBS += poppler-qt5          8.1      # 1.22
-SHARED_LIBS += poppler-cpp          15.0     # 0.7
+SHARED_LIBS += poppler-qt5          8.2      # 1.22
+SHARED_LIBS += poppler-cpp          16.0     # 0.7
 
 HOMEPAGE=      https://poppler.freedesktop.org/
 
Index: distinfo
===================================================================
RCS file: /cvs/ports/print/poppler/distinfo,v
retrieving revision 1.80
diff -u -p -r1.80 distinfo
--- distinfo    17 Feb 2020 20:33:00 -0000      1.80
+++ distinfo    20 Mar 2020 13:08:24 -0000
@@ -1,2 +1,2 @@
-SHA256 (poppler-0.85.0.tar.xz) = K8h16zIwAq5rKH4JmARzUY4rLta1t9LhCJ42ps0A2Us=
-SIZE (poppler-0.85.0.tar.xz) = 1588616
+SHA256 (poppler-0.86.1.tar.xz) = r2MKJ3yOGUwxM5xURiQYNK7W7T1LTccIAxHlHGYlf2w=
+SIZE (poppler-0.86.1.tar.xz) = 1593856
Index: patches/patch-glib_poppler-action_cc
===================================================================
RCS file: patches/patch-glib_poppler-action_cc
diff -N patches/patch-glib_poppler-action_cc
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-glib_poppler-action_cc        20 Mar 2020 13:08:24 -0000
@@ -0,0 +1,58 @@
+$OpenBSD$
+
+Upstream commit 68b6dd2ecd868c1a757cb8b9273e2e26687e5229:
+Replace dynamic_cast by static_cast where we already perform the
+type checks explicitly before downcasting.
+
+Index: glib/poppler-action.cc
+--- glib/poppler-action.cc.orig
++++ glib/poppler-action.cc
+@@ -627,39 +627,39 @@ _poppler_action_new (PopplerDocument *document,
+       switch (link->getKind ()) {
+       case actionGoTo:
+               action->type = POPPLER_ACTION_GOTO_DEST;
+-              build_goto_dest (document, action, dynamic_cast <const LinkGoTo 
*> (link));
++              build_goto_dest (document, action, static_cast <const LinkGoTo 
*> (link));
+               break;
+       case actionGoToR:
+               action->type = POPPLER_ACTION_GOTO_REMOTE;
+-              build_goto_remote (action, dynamic_cast <const LinkGoToR *> 
(link));
++              build_goto_remote (action, static_cast <const LinkGoToR *> 
(link));
+               break;
+       case actionLaunch:
+               action->type = POPPLER_ACTION_LAUNCH;
+-              build_launch (action, dynamic_cast <const LinkLaunch *> (link));
++              build_launch (action, static_cast <const LinkLaunch *> (link));
+               break;
+       case actionURI:
+               action->type = POPPLER_ACTION_URI;
+-              build_uri (action, dynamic_cast <const LinkURI *> (link));
++              build_uri (action, static_cast <const LinkURI *> (link));
+               break;
+       case actionNamed:
+               action->type = POPPLER_ACTION_NAMED;
+-              build_named (action, dynamic_cast <const LinkNamed *> (link));
++              build_named (action, static_cast <const LinkNamed *> (link));
+               break;
+       case actionMovie:
+               action->type = POPPLER_ACTION_MOVIE;
+-              build_movie (document, action, dynamic_cast<const LinkMovie*> 
(link));
++              build_movie (document, action, static_cast<const LinkMovie*> 
(link));
+               break;
+       case actionRendition:
+               action->type = POPPLER_ACTION_RENDITION;
+-              build_rendition (action, dynamic_cast<const LinkRendition*> 
(link));
++              build_rendition (action, static_cast<const LinkRendition*> 
(link));
+               break;
+       case actionOCGState:
+               action->type = POPPLER_ACTION_OCG_STATE;
+-              build_ocg_state (document, action, dynamic_cast<const 
LinkOCGState*> (link));
++              build_ocg_state (document, action, static_cast<const 
LinkOCGState*> (link));
+               break;
+       case actionJavaScript:
+               action->type = POPPLER_ACTION_JAVASCRIPT;
+-              build_javascript (action, dynamic_cast<const LinkJavaScript*> 
(link));
++              build_javascript (action, static_cast<const LinkJavaScript*> 
(link));
+               break;
+       case actionUnknown:
+       default:
Index: patches/patch-poppler_XRef_cc
===================================================================
RCS file: /cvs/ports/print/poppler/patches/patch-poppler_XRef_cc,v
retrieving revision 1.22
diff -u -p -r1.22 patch-poppler_XRef_cc
--- patches/patch-poppler_XRef_cc       19 Jun 2019 19:39:14 -0000      1.22
+++ patches/patch-poppler_XRef_cc       20 Mar 2020 13:08:24 -0000
@@ -2,7 +2,7 @@ $OpenBSD: patch-poppler_XRef_cc,v 1.22 2
 Index: poppler/XRef.cc
 --- poppler/XRef.cc.orig
 +++ poppler/XRef.cc
-@@ -1013,49 +1013,38 @@ void XRef::getEncryptionParameters(unsigned char **fil
+@@ -1042,49 +1042,38 @@ bool XRef::isRefEncrypted(Ref r)
  }
  
  bool XRef::okToPrint(bool ignoreOwnerPW) const {
Index: patches/patch-utils_HtmlOutputDev_cc
===================================================================
RCS file: patches/patch-utils_HtmlOutputDev_cc
diff -N patches/patch-utils_HtmlOutputDev_cc
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-utils_HtmlOutputDev_cc        20 Mar 2020 13:08:24 -0000
@@ -0,0 +1,18 @@
+$OpenBSD$
+
+Upstream commit 68b6dd2ecd868c1a757cb8b9273e2e26687e5229:
+Replace dynamic_cast by static_cast where we already perform the
+type checks explicitly before downcasting.
+
+Index: utils/HtmlOutputDev.cc
+--- utils/HtmlOutputDev.cc.orig
++++ utils/HtmlOutputDev.cc
+@@ -1838,7 +1838,7 @@ int HtmlOutputDev::getOutlinePageNum(OutlineItem *item
+     if (!action || action->getKind() != actionGoTo)
+         return pagenum;
+ 
+-    link = dynamic_cast<const LinkGoTo*>(action);
++    link = static_cast<const LinkGoTo*>(action);
+ 
+     if (!link || !link->isOk())
+         return pagenum;

Reply via email to