texlive[48730] Build/source/libs: poppler 0.69.0

commits+kakuto at tug.org commits+kakuto at tug.org
Sat Sep 22 09:01:59 CEST 2018


Revision: 48730
          http://tug.org/svn/texlive?view=revision&revision=48730
Author:   kakuto
Date:     2018-09-22 09:01:59 +0200 (Sat, 22 Sep 2018)
Log Message:
-----------
poppler 0.69.0

Modified Paths:
--------------
    trunk/Build/source/libs/README
    trunk/Build/source/libs/poppler/ChangeLog
    trunk/Build/source/libs/poppler/Makefile.am
    trunk/Build/source/libs/poppler/Makefile.in
    trunk/Build/source/libs/poppler/TLpatches/ChangeLog
    trunk/Build/source/libs/poppler/TLpatches/TL-Changes
    trunk/Build/source/libs/poppler/TLpatches/patch-03-time
    trunk/Build/source/libs/poppler/configure
    trunk/Build/source/libs/poppler/poppler-src/CMakeLists.txt
    trunk/Build/source/libs/poppler/poppler-src/ChangeLog
    trunk/Build/source/libs/poppler/poppler-src/NEWS
    trunk/Build/source/libs/poppler/poppler-src/fofi/FoFiType1C.cc
    trunk/Build/source/libs/poppler/poppler-src/goo/JpegWriter.cc
    trunk/Build/source/libs/poppler/poppler-src/goo/gfile.cc
    trunk/Build/source/libs/poppler/poppler-src/goo/gfile.h
    trunk/Build/source/libs/poppler/poppler-src/goo/gmem.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/Annot.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/Annot.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/Array.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/CairoRescaleBox.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/Catalog.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/Catalog.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/Dict.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/Dict.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/Form.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/Function.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/Gfx.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/GfxFont.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/GfxState.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/GlobalParams.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/JBIG2Stream.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/Link.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/Object.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/Object.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/OptionalContent.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/OptionalContent.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/OutputDev.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/PDFDoc.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/PDFDoc.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/PSOutputDev.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/PSOutputDev.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/Parser.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/SignatureInfo.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/SignatureInfo.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/SplashOutputDev.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/SplashOutputDev.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/StructTreeRoot.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/StructTreeRoot.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/TextOutputDev.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/TextOutputDev.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/XRef.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/poppler-config.h.cmake
    trunk/Build/source/libs/poppler/version.ac

Added Paths:
-----------
    trunk/Build/source/libs/poppler/poppler-src/goo/GooCheckedOps.h
    trunk/Build/source/libs/poppler/poppler-src/goo/gdir.h

Removed Paths:
-------------
    trunk/Build/source/libs/poppler/poppler-src/goo/gmem.cc
    trunk/Build/source/libs/poppler/poppler-src/goo/gmempp.cc

Modified: trunk/Build/source/libs/README
===================================================================
--- trunk/Build/source/libs/README	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/README	2018-09-22 07:01:59 UTC (rev 48730)
@@ -49,8 +49,8 @@
 pixman 0.34.0 - checked 04feb16
   http://cairographics.org/releases/
 
-poppler 0.68.0 - checked 20aug18
-  http://poppler.freedesktop.org/ - used by luatex and xetex
+poppler 0.69.0 - checked 22sep18
+  http://poppler.freedesktop.org/ - used by xetex
   (requires C++11)
 
 teckit 2.5.8 - checked 24jul18

Modified: trunk/Build/source/libs/poppler/ChangeLog
===================================================================
--- trunk/Build/source/libs/poppler/ChangeLog	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/ChangeLog	2018-09-22 07:01:59 UTC (rev 48730)
@@ -1,3 +1,8 @@
+2018-09-22  Akira Kakuto  <kakuto at fuk.kindai.ac.jp>
+
+	Import poppler-0.69.0.
+	* Makefile.am, version.ac: Adjust.
+
 2018-08-20  Akira Kakuto  <kakuto at fuk.kindai.ac.jp>
 
 	Import poppler-0.68.0.

Modified: trunk/Build/source/libs/poppler/Makefile.am
===================================================================
--- trunk/Build/source/libs/poppler/Makefile.am	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/Makefile.am	2018-09-22 07:01:59 UTC (rev 48730)
@@ -43,8 +43,6 @@
 goo_libGoo_a_sources = \
 	@POPPLER_TREE@/goo/gfile.cc \
 	@POPPLER_TREE@/goo/glibc.cc \
-	@POPPLER_TREE@/goo/gmem.cc \
-	@POPPLER_TREE@/goo/gmempp.cc \
 	@POPPLER_TREE@/goo/grandom.cc \
 	@POPPLER_TREE@/goo/gstrtod.cc \
 	@POPPLER_TREE@/goo/FixedPoint.cc \

Modified: trunk/Build/source/libs/poppler/Makefile.in
===================================================================
--- trunk/Build/source/libs/poppler/Makefile.in	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/Makefile.in	2018-09-22 07:01:59 UTC (rev 48730)
@@ -117,8 +117,6 @@
 am__dirstamp = $(am__leading_dot)dirstamp
 am__objects_1 = @POPPLER_TREE@/goo/gfile.$(OBJEXT) \
 	@POPPLER_TREE@/goo/glibc.$(OBJEXT) \
-	@POPPLER_TREE@/goo/gmem.$(OBJEXT) \
-	@POPPLER_TREE@/goo/gmempp.$(OBJEXT) \
 	@POPPLER_TREE@/goo/grandom.$(OBJEXT) \
 	@POPPLER_TREE@/goo/gstrtod.$(OBJEXT) \
 	@POPPLER_TREE@/goo/FixedPoint.$(OBJEXT) \
@@ -224,8 +222,6 @@
 	@POPPLER_TREE@/goo/$(DEPDIR)/GooTimer.Po \
 	@POPPLER_TREE@/goo/$(DEPDIR)/gfile.Po \
 	@POPPLER_TREE@/goo/$(DEPDIR)/glibc.Po \
-	@POPPLER_TREE@/goo/$(DEPDIR)/gmem.Po \
-	@POPPLER_TREE@/goo/$(DEPDIR)/gmempp.Po \
 	@POPPLER_TREE@/goo/$(DEPDIR)/grandom.Po \
 	@POPPLER_TREE@/goo/$(DEPDIR)/gstrtod.Po \
 	@POPPLER_TREE@/poppler/$(DEPDIR)/Annot.Po \
@@ -533,8 +529,6 @@
 goo_libGoo_a_sources = \
 	@POPPLER_TREE@/goo/gfile.cc \
 	@POPPLER_TREE@/goo/glibc.cc \
-	@POPPLER_TREE@/goo/gmem.cc \
-	@POPPLER_TREE@/goo/gmempp.cc \
 	@POPPLER_TREE@/goo/grandom.cc \
 	@POPPLER_TREE@/goo/gstrtod.cc \
 	@POPPLER_TREE@/goo/FixedPoint.cc \
@@ -701,11 +695,6 @@
 @POPPLER_TREE@/goo/glibc.$(OBJEXT):  \
 	@POPPLER_TREE@/goo/$(am__dirstamp) \
 	@POPPLER_TREE@/goo/$(DEPDIR)/$(am__dirstamp)
- at POPPLER_TREE@/goo/gmem.$(OBJEXT): @POPPLER_TREE@/goo/$(am__dirstamp) \
-	@POPPLER_TREE@/goo/$(DEPDIR)/$(am__dirstamp)
- at POPPLER_TREE@/goo/gmempp.$(OBJEXT):  \
-	@POPPLER_TREE@/goo/$(am__dirstamp) \
-	@POPPLER_TREE@/goo/$(DEPDIR)/$(am__dirstamp)
 @POPPLER_TREE@/goo/grandom.$(OBJEXT):  \
 	@POPPLER_TREE@/goo/$(am__dirstamp) \
 	@POPPLER_TREE@/goo/$(DEPDIR)/$(am__dirstamp)
@@ -970,8 +959,6 @@
 @AMDEP_TRUE@@am__include@ @am__quote@@POPPLER_TREE@/goo/$(DEPDIR)/GooTimer.Po at am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@@POPPLER_TREE@/goo/$(DEPDIR)/gfile.Po at am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@@POPPLER_TREE@/goo/$(DEPDIR)/glibc.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote@@POPPLER_TREE@/goo/$(DEPDIR)/gmem.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote@@POPPLER_TREE@/goo/$(DEPDIR)/gmempp.Po at am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@@POPPLER_TREE@/goo/$(DEPDIR)/grandom.Po at am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@@POPPLER_TREE@/goo/$(DEPDIR)/gstrtod.Po at am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@@POPPLER_TREE@/poppler/$(DEPDIR)/Annot.Po at am__quote@ # am--include-marker
@@ -1421,8 +1408,6 @@
 	-rm -f @POPPLER_TREE@/goo/$(DEPDIR)/GooTimer.Po
 	-rm -f @POPPLER_TREE@/goo/$(DEPDIR)/gfile.Po
 	-rm -f @POPPLER_TREE@/goo/$(DEPDIR)/glibc.Po
-	-rm -f @POPPLER_TREE@/goo/$(DEPDIR)/gmem.Po
-	-rm -f @POPPLER_TREE@/goo/$(DEPDIR)/gmempp.Po
 	-rm -f @POPPLER_TREE@/goo/$(DEPDIR)/grandom.Po
 	-rm -f @POPPLER_TREE@/goo/$(DEPDIR)/gstrtod.Po
 	-rm -f @POPPLER_TREE@/poppler/$(DEPDIR)/Annot.Po
@@ -1547,8 +1532,6 @@
 	-rm -f @POPPLER_TREE@/goo/$(DEPDIR)/GooTimer.Po
 	-rm -f @POPPLER_TREE@/goo/$(DEPDIR)/gfile.Po
 	-rm -f @POPPLER_TREE@/goo/$(DEPDIR)/glibc.Po
-	-rm -f @POPPLER_TREE@/goo/$(DEPDIR)/gmem.Po
-	-rm -f @POPPLER_TREE@/goo/$(DEPDIR)/gmempp.Po
 	-rm -f @POPPLER_TREE@/goo/$(DEPDIR)/grandom.Po
 	-rm -f @POPPLER_TREE@/goo/$(DEPDIR)/gstrtod.Po
 	-rm -f @POPPLER_TREE@/poppler/$(DEPDIR)/Annot.Po

Modified: trunk/Build/source/libs/poppler/TLpatches/ChangeLog
===================================================================
--- trunk/Build/source/libs/poppler/TLpatches/ChangeLog	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/TLpatches/ChangeLog	2018-09-22 07:01:59 UTC (rev 48730)
@@ -1,3 +1,7 @@
+2018-09-22  Akira Kakuto  <kakuto at fuk.kindai.ac.jp>
+
+	* patch-03-time: Adapted.
+
 2018-08-20  Akira Kakuto  <kakuto at fuk.kindai.ac.jp>
 
 	* patch-03-time: Adapted.

Modified: trunk/Build/source/libs/poppler/TLpatches/TL-Changes
===================================================================
--- trunk/Build/source/libs/poppler/TLpatches/TL-Changes	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/TLpatches/TL-Changes	2018-09-22 07:01:59 UTC (rev 48730)
@@ -1,9 +1,12 @@
-Changes applied to the poppler-0.68.0 tree as obtained from:
+Changes applied to the poppler-0.69.0 tree as obtained from:
 	http://poppler.freedesktop.org/
 
 Removed unused dirs:
 	cmake cpp glib qt5 test utils
 
+Removed unused file:
+	.gitlab-ci.yml
+
 Removed unused files in splash:
 	only SplashTypes.h is used
 

Modified: trunk/Build/source/libs/poppler/TLpatches/patch-03-time
===================================================================
--- trunk/Build/source/libs/poppler/TLpatches/patch-03-time	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/TLpatches/patch-03-time	2018-09-22 07:01:59 UTC (rev 48730)
@@ -1,6 +1,6 @@
-diff -ur poppler-0.68.0/goo/gfile.h poppler-src/goo/gfile.h
---- poppler-0.68.0/goo/gfile.h	Mon Aug 20 06:37:51 2018
-+++ poppler-src/goo/gfile.h	Mon Aug 20 11:17:15 2018
+diff -ur poppler-0.69.0/goo/gfile.h poppler-src/goo/gfile.h
+--- poppler-0.69.0/goo/gfile.h	Sat Sep 22 06:41:09 2018
++++ poppler-src/goo/gfile.h	Sat Sep 22 15:30:17 2018
 @@ -51,8 +51,6 @@
  #    include <windows.h>
  #  endif
@@ -10,9 +10,9 @@
  #else
  #  include <unistd.h>
  #  include <sys/types.h>
-diff -ur poppler-0.68.0/poppler/Form.h poppler-src/poppler/Form.h
---- poppler-0.68.0/poppler/Form.h	Mon Aug 20 06:37:51 2018
-+++ poppler-src/poppler/Form.h	Mon Aug 20 11:18:08 2018
+diff -ur poppler-0.69.0/poppler/Form.h poppler-src/poppler/Form.h
+--- poppler-0.69.0/poppler/Form.h	Sat Sep 22 06:41:09 2018
++++ poppler-src/poppler/Form.h	Sat Sep 22 15:30:57 2018
 @@ -36,6 +36,7 @@
  
  #include <set>

Modified: trunk/Build/source/libs/poppler/configure
===================================================================
--- trunk/Build/source/libs/poppler/configure	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/configure	2018-09-22 07:01:59 UTC (rev 48730)
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for poppler (TeX Live) 0.68.0.
+# Generated by GNU Autoconf 2.69 for poppler (TeX Live) 0.69.0.
 #
 # Report bugs to <tex-k at tug.org>.
 #
@@ -580,8 +580,8 @@
 # Identity of this package.
 PACKAGE_NAME='poppler (TeX Live)'
 PACKAGE_TARNAME='poppler--tex-live-'
-PACKAGE_VERSION='0.68.0'
-PACKAGE_STRING='poppler (TeX Live) 0.68.0'
+PACKAGE_VERSION='0.69.0'
+PACKAGE_STRING='poppler (TeX Live) 0.69.0'
 PACKAGE_BUGREPORT='tex-k at tug.org'
 PACKAGE_URL=''
 
@@ -1307,7 +1307,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures poppler (TeX Live) 0.68.0 to adapt to many kinds of systems.
+\`configure' configures poppler (TeX Live) 0.69.0 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1374,7 +1374,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of poppler (TeX Live) 0.68.0:";;
+     short | recursive ) echo "Configuration of poppler (TeX Live) 0.69.0:";;
    esac
   cat <<\_ACEOF
 
@@ -1487,7 +1487,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-poppler (TeX Live) configure 0.68.0
+poppler (TeX Live) configure 0.69.0
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2134,7 +2134,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by poppler (TeX Live) $as_me 0.68.0, which was
+It was created by poppler (TeX Live) $as_me 0.69.0, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -4057,7 +4057,7 @@
 
 # Define the identity of the package.
  PACKAGE='poppler--tex-live-'
- VERSION='0.68.0'
+ VERSION='0.69.0'
 
 
 # Some tools Automake needs.
@@ -7647,7 +7647,7 @@
 
 
 cat >>confdefs.h <<_ACEOF
-#define POPPLER_VERSION "0.68.0"
+#define POPPLER_VERSION "0.69.0"
 _ACEOF
 
 
@@ -8341,7 +8341,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by poppler (TeX Live) $as_me 0.68.0, which was
+This file was extended by poppler (TeX Live) $as_me 0.69.0, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -8407,7 +8407,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-poppler (TeX Live) config.status 0.68.0
+poppler (TeX Live) config.status 0.69.0
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 

Modified: trunk/Build/source/libs/poppler/poppler-src/CMakeLists.txt
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/CMakeLists.txt	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/CMakeLists.txt	2018-09-22 07:01:59 UTC (rev 48730)
@@ -30,11 +30,11 @@
 endif()
 
 set(POPPLER_MAJOR_VERSION "0")
-set(POPPLER_MINOR_VERSION "68")
+set(POPPLER_MINOR_VERSION "69")
 set(POPPLER_MICRO_VERSION "0")
 set(POPPLER_VERSION "${POPPLER_MAJOR_VERSION}.${POPPLER_MINOR_VERSION}.${POPPLER_MICRO_VERSION}")
 
-set (CMAKE_CXX_STANDARD 11)
+set (CMAKE_CXX_STANDARD 14)
 set (CMAKE_CXX_EXTENSIONS OFF)
 
 # command line switches
@@ -315,11 +315,9 @@
 
 set(poppler_SRCS
   goo/gfile.cc
-  goo/gmempp.cc
   goo/GooList.cc
   goo/GooTimer.cc
   goo/GooString.cc
-  goo/gmem.cc
   goo/FixedPoint.cc
   goo/NetPBMWriter.cc
   goo/PNGWriter.cc
@@ -489,7 +487,7 @@
 else()
 add_library(poppler ${poppler_SRCS})
 endif()
-set_target_properties(poppler PROPERTIES VERSION 79.0.0 SOVERSION 79)
+set_target_properties(poppler PROPERTIES VERSION 80.0.0 SOVERSION 80)
 if(MINGW)
     get_target_property(POPPLER_SOVERSION poppler SOVERSION)
     set_target_properties(poppler PROPERTIES SUFFIX "-${POPPLER_SOVERSION}${CMAKE_SHARED_LIBRARY_SUFFIX}")
@@ -584,9 +582,11 @@
     goo/GooString.h
     goo/gtypes.h
     goo/gmem.h
+    goo/gdir.h
     goo/gfile.h
     goo/FixedPoint.h
     goo/ImgWriter.h
+    goo/GooCheckedOps.h
     goo/GooLikely.h
     goo/gstrtod.h
     goo/grandom.h

Modified: trunk/Build/source/libs/poppler/poppler-src/ChangeLog
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/ChangeLog	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/ChangeLog	2018-09-22 07:01:59 UTC (rev 48730)
@@ -1,3 +1,1081 @@
+commit 2052dc60f5b7403418384237d4bad2c7faf0acee
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Fri Sep 21 23:41:09 2018 +0200
+
+    Poppler 0.69
+
+ CMakeLists.txt         |  4 ++--
+ NEWS                   | 31 +++++++++++++++++++++++++++++++
+ cpp/Doxyfile           |  2 +-
+ qt5/src/CMakeLists.txt |  2 +-
+ qt5/src/Doxyfile       |  2 +-
+ 5 files changed, 36 insertions(+), 5 deletions(-)
+
+commit 554e87a1ea76ce73b4cfe6fca5b9c1bb47502dad
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Fri Sep 21 18:00:24 2018 +0200
+
+    offset from beginning of file can't be < 0
+
+ poppler/XRef.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 06c344ccb8ccfafa9c506f40226ea2cce0e5f75c
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Fri Sep 21 09:43:40 2018 +0200
+
+    Use deferred sorting with Dict again to avoid performance regression
+
+    This tries to move sorting a Dict into the first find call again,
+    but tries
+    harder to make the double-checked locking work correctly so that
+    at least
+    concurrent calls to find are correct (but concurrent calls to find and
+    add, set or remove are still not allowed).
+
+ poppler/Dict.cc | 24 ++++++++++++++----------
+ poppler/Dict.h  |  2 +-
+ 2 files changed, 15 insertions(+), 11 deletions(-)
+
+commit 22ea442de8776e7e6fa78062cb8bb224b98e736f
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Thu Sep 20 23:23:56 2018 +0200
+
+    SplashOutputDev::drawImage: gmallocn -> checkoverflow
+
+    oss-fuzz/10194
+
+    And also add a likely for the previous change in the file
+
+ poppler/SplashOutputDev.cc | 20 +++++++++++---------
+ 1 file changed, 11 insertions(+), 9 deletions(-)
+
+commit 8ff1bddc6a97a5f8b43ff95405f0642fb03f962b
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Thu Sep 20 23:21:02 2018 +0200
+
+    Splash::scaleImageYdXd: gmallocn -> gmallocn_checkoverflow
+
+    oss-fuzz/10205
+
+ splash/Splash.cc | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+commit cf25cd0c4893b62a9993034079a6c89c6ca370ee
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Thu Sep 20 23:17:06 2018 +0200
+
+    SplashOutputDev::drawSoftMaskedImage: gmallocn ->
+    gmallocn_checkoverflow
+
+    oss-fuzz/10298
+
+ poppler/SplashOutputDev.cc | 18 ++++++++++--------
+ 1 file changed, 10 insertions(+), 8 deletions(-)
+
+commit b5db021a71e38d56079cbcfcaf3345765e9ed782
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Thu Sep 20 23:10:55 2018 +0200
+
+    GfxUnivariateShading::setupCache: gmallocn -> gmallocn_checkoverflow
+
+    oss-fuzz/10508
+
+ poppler/GfxState.cc | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+commit ab1b051a9f65b7f8e4dc9f8f9c28a0aff0c86596
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Thu Sep 20 23:05:55 2018 +0200
+
+    Remove unused variable
+
+ poppler/Gfx.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit d1a4c5a9faf95618fc302c358021a745afc0527c
+Author: Denis Onishchenko <denis.onischenko at gmail.com>
+Date:   Thu Sep 20 22:57:03 2018 +0200
+
+    Fix 2 errors in computation of type3 glyphs transformation matrix
+
+ poppler/Gfx.cc | 28 +++++++++++++---------------
+ 1 file changed, 13 insertions(+), 15 deletions(-)
+
+commit 5dadcc93c4d4d44d0ec3bdc6bb54851f6ffaee98
+Author: Tobias Deiminger <haxtibal at posteo.de>
+Date:   Sun Sep 9 09:28:22 2018 +0200
+
+    Compile Qt5 frontend with -DQT_STRICT_ITERATORS
+
+    QT_STRICT_ITERATORS prevents conversion from non-const iterator to
+    const iterator.
+
+    It helps detecting situations where we waste resources due to
+    needless detach from implicitely shared container data (i.e. deep
+    copy).
+
+    If anyone should run into problems, they can disable strict iterators
+    using a global cache variable:
+
+    $ cmake DENABLE_QT_STRICT_ITERATORS=OFF [...]
+
+ qt5/CMakeLists.txt | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+commit 3105b61e0912df397dd712632d8ea16269ff4d94
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Wed Sep 19 23:17:07 2018 +0200
+
+    Update (C)
+
+ poppler/OptionalContent.h     | 1 +
+ poppler/StructTreeRoot.cc     | 1 +
+ poppler/StructTreeRoot.h      | 1 +
+ qt5/src/poppler-link.cc       | 1 +
+ qt5/src/poppler-optcontent.cc | 1 +
+ 5 files changed, 5 insertions(+)
+
+commit 5bbb2fc4b159b003a22a9d3327ba290a7bba15f0
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Tue Sep 18 21:36:13 2018 +0200
+
+    Add a separate build job using Ubuntu 14.04 and GCC 4.9 to
+    compatibility with older systems.
+
+ .gitlab-ci.yml | 35 +++++++++++++++++++++++++++--------
+ 1 file changed, 27 insertions(+), 8 deletions(-)
+
+commit 560b34a6e2d3fd58edfb5f0af751f1aa7d3dc3d8
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Tue Sep 18 11:35:55 2018 +0200
+
+    Prevent leaking OptionalContentGroup by using unique_ptr as early
+    as possible. oss-fuzz/10418
+
+ poppler/OptionalContent.cc | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+commit 7ac84c1d633b49d69b1ec80606fdca8ee14d80e0
+Author: Oliver Sander <oliver.sander at tu-dresden.de>
+Date:   Tue Sep 18 11:18:33 2018 +0200
+
+    Document the new 'ArthurFontID' type
+
+ qt5/src/ArthurOutputDev.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 5048bec585be382f9d37110c6b2e16d26d29d5b2
+Author: Oliver Sander <oliver.sander at tu-dresden.de>
+Date:   Tue Sep 18 11:02:58 2018 +0200
+
+    Bugfix: Do not disregard Ref::gen when using Ref as a cache key
+
+    According to Leonard Rosenthol's book, the 'gen' field of a
+    reference is almost always zero.  However, this doesn't mean that
+    it can be ignored when comparing two Refs.
+
+    Incidentally, this patch also makes use of the recently introduced
+    Ref::operator<, which allows to replace the small custom class
+    ArthurFontID by a std::pair.
+
+ qt5/src/ArthurOutputDev.h | 14 +-------------
+ 1 file changed, 1 insertion(+), 13 deletions(-)
+
+commit 7e9b6f1dba716e7adba1ed2ecd765b207def9747
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Sat Sep 15 09:54:01 2018 +0200
+
+    Fix TODO in OCGs by creating a look-up table from Ref to
+    OptionalContentGroup (and make Ref a regular type to do so).
+
+ glib/poppler-document.cc      | 12 ++++--------
+ poppler/Object.h              | 31 +++++++++++++++++++++++++------
+ poppler/OptionalContent.cc    | 42
+ ++++++++++--------------------------------
+ poppler/OptionalContent.h     |  9 +++++----
+ poppler/StructTreeRoot.cc     |  2 +-
+ poppler/StructTreeRoot.h      |  2 +-
+ qt5/src/poppler-link.cc       |  5 -----
+ qt5/src/poppler-optcontent.cc |  9 ++++-----
+ utils/pdfinfo.cc              |  2 +-
+ 9 files changed, 51 insertions(+), 63 deletions(-)
+
+commit 94527d5a61eb3402b49436b978bad69f71884051
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Sat Sep 15 09:31:37 2018 +0200
+
+    Check for Ref type before unwrapping Object as such
+
+    oss-fuzz/10359
+
+ poppler/OptionalContent.cc | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+commit 3af4c151cf09e1e98d311e8308060eb832bdd7d2
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Sun Sep 2 13:48:17 2018 +0200
+
+    Make Object::takeString leave a dead object instead of a null string
+    and hence assert non-null strings during object creation.
+
+ poppler/Object.h | 8 +++-----
+ 1 file changed, 3 insertions(+), 5 deletions(-)
+
+commit a238d170dd89e27efd44ea09126b84272c0ac47b
+Author: Tobias Deiminger <haxtibal at posteo.de>
+Date:   Fri Sep 7 16:30:48 2018 +0200
+
+    Add missing newline after Tf in setTextFont
+
+    Until now AnnotAppearanceBuilder::setTextFont was only used to write
+    last operation in apperance string for /DA. There you don't notice
+    the missing delimiter. Delimiter will however be required in general,
+    e.g. when writing appearance string for /AP.
+
+ poppler/Annot.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 1acbe6af40e598b3afae18709eb32ec44d7b1afc
+Author: Tobias Deiminger <haxtibal at posteo.de>
+Date:   Sat Sep 8 12:39:25 2018 +0200
+
+    Fix compilation with QT_STRICT_ITERATORS
+
+ qt5/tests/check_annotations.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 574840c5a61a9a20c930dd6fec63e6cf11bacfa5
+Author: Christian Persch <chpe at src.gnome.org>
+Date:   Wed Sep 5 21:19:04 2018 +0200
+
+    goo: Split GDir and GDirEntry out of gfile.h
+
+    This allows including gfile.h together with glib.h which has
+    a conflicting GDir type.
+
+    https://gitlab.freedesktop.org/poppler/poppler/issues/370
+
+ CMakeLists.txt          |  1 +
+ goo/gdir.h              | 91
+ +++++++++++++++++++++++++++++++++++++++++++++++++
+ goo/gfile.cc            |  1 +
+ goo/gfile.h             | 49 --------------------------
+ poppler/GlobalParams.cc |  1 +
+ 5 files changed, 94 insertions(+), 49 deletions(-)
+
+commit f2223e12e401648a24d559ba766759b8afac2d5e
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Sun Sep 2 10:43:18 2018 +0200
+
+    Assert validity of Object contents where at least constructor or
+    destructor seem to assume it to catch errors as early as possible
+    when using debug builds.
+
+ poppler/Object.cc | 8 ++------
+ poppler/Object.h  | 9 +++++----
+ 2 files changed, 7 insertions(+), 10 deletions(-)
+
+commit 7c6c1fef6a7eab712ad335d63c5fe7ff05e6e59f
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Sun Sep 2 13:32:01 2018 +0200
+
+    pdftotext: Fix memory leak in printLine
+
+ utils/pdftotext.cc | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+commit e8e95d2ca4f1c108cc69cab72c7c5ab31f80a597
+Author: Sanchit Anand <sanxchit at gmail.com>
+Date:   Tue Aug 28 02:58:39 2018 -0400
+
+    pdftotext: Fix only outputs first page content with -bbox-layout
+    option
+
+    Issue #88
+
+ poppler/TextOutputDev.cc | 5 +++++
+ poppler/TextOutputDev.h  | 5 +++++
+ utils/pdftotext.cc       | 6 ++----
+ 3 files changed, 12 insertions(+), 4 deletions(-)
+
+commit 09cc5fd1b4ef758b1f496b33bc5c5cb9e63b08eb
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Sun Sep 2 13:10:45 2018 +0200
+
+    qt5: test: Compile with old qt
+
+ qt5/tests/check_annotations.cpp | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+commit 042d2483c04652036ab921983b4967851f3bb8cf
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Sun Sep 2 12:39:09 2018 +0200
+
+    Add missing (C)
+
+    And minor style change by Albert
+
+ poppler/Annot.cc                    | 6 ++++--
+ poppler/Annot.h                     | 6 ++++--
+ qt5/src/poppler-annotation-helper.h | 1 +
+ qt5/src/poppler-annotation.cc       | 2 ++
+ qt5/src/poppler-annotation.h        | 1 +
+ 5 files changed, 12 insertions(+), 4 deletions(-)
+
+commit d4b4be23c8b55a118f7b9194a93a8e9da38793c1
+Author: Tobias Deiminger <haxtibal at posteo.de>
+Date:   Sat Aug 25 23:08:39 2018 +0200
+
+    More review fixes
+
+    Text color is indicated by nonstroking color in graphics state
+            Assumption: Text rendering mode is 'fill'.
+
+    Increase color precision for lossless roundtrip of 16 bit integers
+            Our API takes QColor from user. We want to support a lossless
+            roundtrip
+            of QColor (16 bit per channel internally) through document
+            save and
+            load, and empirically found .5f is best match.
+
+    Check only .5f case of color channel roundtrip. Include 65535.
+            We check if precision == 5 is sufficient, and fail if not. We
+            know that
+            precision < 5 will never work, because target set contains
+            less numbers
+            than uint16 range.
+
+    Use smart pointer in textFont and textColor
+
+    Add test for CMYK QColor roundtrip
+
+    Support QColor::Cmyk to AnnotColor::colorCMYK conversion
+
+    Add simple test for font size. Fix actual/expected args.
+
+    Model font name as class Object, type objName
+            Take into account that ISO 32000 says Tf operand is always
+            an object of
+            PDF type "name". Further benefit: class Object introduces
+            ownership
+            semantcis.
+
+    Use more std::unique_ptr and fix some coding syle
+            Some places assumed ownership implicitely. Make it more
+            explicit.
+
+    Move parse/constructAppearanceString into DefaultAppearance
+            We gain cohesion and automatic memory management.
+
+    Fix minor styling issues
+
+    Use std::make_unique from C++14
+
+ poppler/Annot.cc                | 163
+ ++++++++++++++++++++--------------------
+ poppler/Annot.h                 |  29 ++++---
+ qt5/src/poppler-annotation.cc   |  85 +++++++++++++--------
+ qt5/tests/check_annotations.cpp |  66 +++++++++++-----
+ 4 files changed, 199 insertions(+), 144 deletions(-)
+
+commit b67e7ab708a0606298fd3707347bed935390d062
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Fri Aug 24 20:14:14 2018 +0200
+
+    Add a roundtrip consistency test for the text color properties
+    of annotations.
+
+ qt5/tests/CMakeLists.txt        |  1 +
+ qt5/tests/check_annotations.cpp | 75
+ +++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 76 insertions(+)
+
+commit db0451ab16060509d13415162a95db269ca0d4f3
+Author: Tobias Deiminger <haxtibal at posteo.de>
+Date:   Sat Aug 25 19:57:13 2018 +0200
+
+    Fix open review comments from #50
+
+    Make fontTag optional for AnnotFreeText::parseAppearanceString.
+    Handle fontColor == nullptr in
+    AnnotFreeText::constructAppearanceString.
+    Use AnnotAppearanceBuilder in
+    AnnotFreeText::constructAppearanceString.
+    Delete copy assignment operator for DefaultAppearance.
+    Rename setAppearanceString to setDefaultAppearance.
+
+ poppler/Annot.cc              | 45
+ +++++++++++++++++--------------------------
+ poppler/Annot.h               |  8 +++++---
+ qt5/src/poppler-annotation.cc |  2 +-
+ 3 files changed, 24 insertions(+), 31 deletions(-)
+
+commit 64531344de3dc663a4429e94381d68cc198d0425
+Author: Dileep Sankhla <sankhla.dileep96 at gmail.com>
+Date:   Thu Aug 23 17:48:39 2018 +0200
+
+    Add annotation font color
+
+ poppler/Annot.cc                    |  73 +++++++++++++++++++++-----
+ poppler/Annot.h                     |  29 +++++++++--
+ qt5/src/poppler-annotation-helper.h |   2 +-
+ qt5/src/poppler-annotation.cc       | 101
+ ++++++++++++++++++++++--------------
+ qt5/src/poppler-annotation.h        |   4 ++
+ 5 files changed, 152 insertions(+), 57 deletions(-)
+
+commit f506b8bc52efd0781a933a44bb58d02fb000c78d
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Sat Sep 1 23:54:26 2018 +0200
+
+    Fix handling of Signature Info Location and Reason
+
+    We can't call GooString->getCString and just store that char *
+    as it belonged to us since it may very well be the inner array
+    of the GooString and be invalid once the GooString goes away
+
+ poppler/Form.cc          | 6 +++---
+ poppler/SignatureInfo.cc | 8 ++++----
+ poppler/SignatureInfo.h  | 4 ++--
+ 3 files changed, 9 insertions(+), 9 deletions(-)
+
+commit 7418616dbfc9c4e5b05b7a57f4fabed3bf9fdcb0
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Sat Sep 1 23:51:48 2018 +0200
+
+    Link: Fix memory leak regarding next actions
+
+ poppler/Link.cc | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 45f0f6d21d51c0408fe1d876f18ef05489e69bc0
+Author: Evangelos Rigas <erigas at rnd2.org>
+Date:   Mon Aug 6 10:57:47 2018 +0100
+
+    [utils] Add PDF subtype to pdfinfo
+
+    If the document is compliant with PDF A, E, VT, UA or X standard
+    print PDF subtype version, title, subtitle and explain the part
+    and conformance levels.
+
+ utils/pdfinfo.cc | 238
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 238 insertions(+)
+
+commit 98d1b3dcc2c0530c12fb4422067c529ab375c680
+Author: Evangelos Rigas <erigas at rnd2.org>
+Date:   Wed Aug 22 10:51:12 2018 +0300
+
+    [core] Add support for PDF subtype property
+
+    Parse /GTS_PDF(A,E,UA,VT,X)Version from the PDF Information
+    Dictionary into three enums: PDFSubtype, PDFSubtypePart, and
+    PDFSubtypeConformance.
+
+ poppler/PDFDoc.cc | 132
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ poppler/PDFDoc.h  |  46 +++++++++++++++++++
+ 2 files changed, 178 insertions(+)
+
+commit 4f039c57fee4413a500a9e36bf8350eae1130442
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Sat Sep 1 01:05:02 2018 +0200
+
+    Update (C) from last commits
+
+ cpp/poppler-image.cpp      | 1 +
+ poppler/GfxState.cc        | 1 +
+ poppler/JBIG2Stream.cc     | 1 +
+ qt5/src/ArthurOutputDev.cc | 1 +
+ splash/SplashPath.cc       | 1 +
+ 5 files changed, 5 insertions(+)
+
+commit 9df44cf1e0e300b751cd1c562f2b48335db72ac7
+Author: Jakub Wilk <jwilk at jwilk.net>
+Date:   Fri Aug 31 12:05:56 2018 +0200
+
+    Install goo/GooCheckedOps.h
+
+    goo/gmem.h includes goo/GooCheckedOps.h, so they should be installed
+    together.
+
+ CMakeLists.txt | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 55e2b746e6bd3e495c30fe7e5154ec2c956d3faa
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Fri Aug 31 19:17:59 2018 +0200
+
+    Check for allocation failure during processing of JBIG2
+    streams. oss-fuzz/10146
+
+ poppler/JBIG2Stream.cc | 21 +++++++++++++++------
+ 1 file changed, 15 insertions(+), 6 deletions(-)
+
+commit bb078cbd88252e421d14747b98c5c71062cf7571
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Fri Aug 31 20:18:23 2018 +0200
+
+    Always check for allocation failure after calling SplashPath::grow
+    and also set curSubpath to zero so that noCurrentPoint applies after
+    allocation failure. oss-fuzz/10148
+
+ splash/SplashPath.cc | 11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
+
+commit f200264ddb0a16f54ae2711f399867e659957b1d
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Fri Aug 31 20:03:36 2018 +0200
+
+    FoFiType1C::getDeltaIntArray: Fix undefined inf to int conversion
+
+ fofi/FoFiType1C.cc | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit 9bfc10eecb57354270806aa1d9278eebb1db2287
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Fri Aug 31 18:47:52 2018 +0200
+
+    Bump required C++ standard version to C++14 and convert a few
+    hopefully obvious call sites where types are repeated to using
+    std::make_unique.
+
+ CMakeLists.txt             |  2 +-
+ cpp/poppler-image.cpp      |  2 +-
+ cpp/poppler-page.cpp       | 14 +++++++-------
+ poppler/GfxState.cc        |  2 +-
+ qt5/src/ArthurOutputDev.cc | 46
+ +++++++++++++++++++++++++++-------------------
+ 5 files changed, 37 insertions(+), 29 deletions(-)
+
+commit d2fa4a727fc994256219a4c4f777a1c38dcc26c5
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Fri Aug 31 19:53:05 2018 +0200
+
+    (C) of previous commits
+
+ fofi/FoFiType1C.cc        | 1 +
+ poppler/SplashOutputDev.h | 1 +
+ 2 files changed, 2 insertions(+)
+
+commit 51f1c813970627db0b8804f6a729eed79ac9dfb4
+Author: Stefan Brüns <stefan.bruens at rwth-aachen.de>
+Date:   Fri Aug 31 00:27:13 2018 +0200
+
+    SplashPath: Allocate temporary pathes on the stack
+
+    The majority of SplashPath'es are created using
+    convertPath(GfxState *, GfxPath *), and are only temporary,
+    i.e. with function scope.
+
+    Returning a SplashPath instead of a pointer from convertPath()
+    - which is cheap due to the move constructor - saves recurrent
+    new/delete's for each stroke/fill/... operation.
+
+ poppler/SplashOutputDev.cc | 69
+ ++++++++++++++++------------------------------
+ poppler/SplashOutputDev.h  |  2 +-
+ 2 files changed, 25 insertions(+), 46 deletions(-)
+
+commit a31a9e1b9a1eefcea4c8e08f2d84deb0ac6cc4ae
+Author: Stefan Brüns <stefan.bruens at rwth-aachen.de>
+Date:   Fri Aug 31 00:23:32 2018 +0200
+
+    SplashPath: Add move constructor
+
+    After moving, the new SplashPath is in the same state as it
+    has been copy constructed, the moved from is in the same
+    state as default constructed, i.e. empty.
+
+ splash/SplashPath.cc | 17 +++++++++++++++++
+ splash/SplashPath.h  |  1 +
+ 2 files changed, 18 insertions(+)
+
+commit 2190b9997ac786189368fc03e46e540c308f11b5
+Author: Stefan Brüns <stefan.bruens at rwth-aachen.de>
+Date:   Wed Aug 29 00:21:57 2018 +0200
+
+    Allocate temporary SplashXPath on the stack
+
+    SplashXPath is only used inside the each fill function, but newer
+    passed to the outside. As it is small, there is no reason not to
+    allocate it on the stack.
+
+ splash/Splash.cc | 36 +++++++++++++-----------------------
+ 1 file changed, 13 insertions(+), 23 deletions(-)
+
+commit 38caf0adac8811e663b51656638177397f1400f6
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Fri Aug 31 10:00:15 2018 +0200
+
+    Add clang + libc++ testing pipeline
+
+    Would have catched the missing array include in PSOutputDev
+
+ .gitlab-ci.yml | 14 +++++++++++++-
+ 1 file changed, 13 insertions(+), 1 deletion(-)
+
+commit 4244a048e55d7cce0caddc68b6bb21983e670bc4
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Fri Aug 31 07:33:31 2018 +0200
+
+    Replace #pragma once by standard-supported include guards and add
+    missing copyright preamble for new header.
+
+ goo/GooCheckedOps.h | 15 ++++++++++++++-
+ goo/gmem.h          |  5 ++++-
+ 2 files changed, 18 insertions(+), 2 deletions(-)
+
+commit 5671d3acc6a723ac3cb63866e2f429e0f0075c68
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Thu Aug 30 21:27:13 2018 +0200
+
+    Extend checked operations header with support for Clang in addition
+    to checking for GCC version 5 or later.
+
+ goo/GooCheckedOps.h | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+commit ed28a5612fc0bf8580ccd360ae086fc715d19b35
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Thu Aug 30 20:56:33 2018 +0200
+
+    Fix delta decoding for Type1C fonts to avoid signed integer
+    overflow. oss-fuzz/8424
+
+ fofi/FoFiType1C.cc | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+commit de20e92a70e73d828984f41f52212051fba51700
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Thu Aug 30 20:54:17 2018 +0200
+
+    Factor out overflow-checked multiplication into a separate header
+    for extension and reuse.
+
+ goo/GooCheckedOps.h | 32 ++++++++++++++++++++++++++++++++
+ goo/gmem.h          | 16 ++--------------
+ 2 files changed, 34 insertions(+), 14 deletions(-)
+
+commit 3407c5c8003e67deba2b477741ac471927d40f14
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Fri Aug 31 07:38:34 2018 +0200
+
+    Reintroduce the assertion in Array::remove since there it is not
+    possible to check any return value.
+
+ poppler/Array.cc | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 2c25d197c921e292f49aa2b25f4006acd57c1440
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Thu Aug 30 20:26:55 2018 +0200
+
+    Remove index out of range assertions from Array getters
+
+    A lot of code seems to have been incompatible with the recently
+    removed DEBUG_MEM
+    flag, i.e. it relied on the Array getters returning a null object
+    when the index
+    was out of range and rather checked the returned object type (since
+    they had to do
+    that in any case) than the index.
+
+    Due to this, debug builds became much harder to test, especially
+    using fuzzing. This
+    commit thereby removes the assertions to restore the situation when
+    DEBUG_MEM was
+    present but disabeld by default and should thereby fix oss-fuzz/10121.
+
+ poppler/Array.cc | 3 ---
+ 1 file changed, 3 deletions(-)
+
+commit 987bbb684e688651e3d06502e2ff9b6f08130538
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Thu Aug 30 22:49:19 2018 +0200
+
+    PSOutputDev: Hopefully fix compilation under MSVC
+
+ poppler/PSOutputDev.cc | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit df818b383cf4fa402b89f7b2dd0f958a749a4790
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Thu Aug 30 20:46:20 2018 +0200
+
+    SplashPath: Fix overflow check
+
+    What signals overflow is size being 0 not length being 0
+
+ splash/SplashPath.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 23d570a6f47bc9bc7bf0bcb5dd561885c9a2c55a
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Thu Aug 30 18:54:55 2018 +0200
+
+    SplashPath: Check for overflow
+
+    fixes oss-fuzz/10120
+
+ splash/SplashPath.cc | 11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
+
+commit ad107bbb8e4d8eb1a23e530d040d5b11bb8ff859
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Thu Aug 30 18:28:50 2018 +0200
+
+    JBIG2Bitmap: Fix overflow check
+
+    Fixes oss-fuzz/10113
+
+ poppler/JBIG2Stream.cc | 16 +++++++++-------
+ 1 file changed, 9 insertions(+), 7 deletions(-)
+
+commit e3a3e3fa996f318c36f9926fa8cc5dfc9edfac20
+Author: Philipp Knechtges <philipp-dev at knechtges.com>
+Date:   Sun Aug 26 19:37:29 2018 +0200
+
+    PSOutputDev: add native support for type 7 shadings when using level 3
+
+    Type 7 shadings are identical for PS and PDF, so we can just emit
+    the corresponding
+    information rather than tiling the whole domain.
+
+ poppler/PSOutputDev.cc | 55
+ ++++++++++++++++++++++++++++++++++++++++++++++++++
+ poppler/PSOutputDev.h  |  4 +++-
+ 2 files changed, 58 insertions(+), 1 deletion(-)
+
+commit de34900993bff73c8da651319027b2fa8c490172
+Author: Ed Porras <ed at motologic.com>
+Date:   Sun Aug 26 20:24:23 2018 +0200
+
+    fix macOS compilation due to boolean define in jpeglib
+
+    typedef enum { FALSE = 0, TRUE = 1 } boolean;
+
+ goo/JpegWriter.cc | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit be05f7640ca13a6eb327dfac0073acc5dae1e3b4
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Wed Aug 29 19:02:34 2018 +0200
+
+    Add (c) of the last few commits
+
+ goo/gmem.h                     | 1 +
+ poppler/Array.cc               | 1 +
+ poppler/CairoRescaleBox.cc     | 1 +
+ poppler/GfxFont.cc             | 1 +
+ poppler/Object.cc              | 1 +
+ poppler/poppler-config.h.cmake | 1 +
+ utils/pdfdetach.cc             | 1 +
+ utils/pdffonts.cc              | 1 +
+ utils/pdfimages.cc             | 1 +
+ utils/pdfinfo.cc               | 1 +
+ utils/pdftocairo.cc            | 1 +
+ utils/pdftohtml.cc             | 1 +
+ utils/pdftoppm.cc              | 2 +-
+ utils/pdftops.cc               | 1 +
+ utils/pdftotext.cc             | 1 +
+ 15 files changed, 15 insertions(+), 1 deletion(-)
+
+commit 7d523aeae16daf2d504c058031fff90a1a17bf64
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Mon Aug 27 20:03:17 2018 +0200
+
+    Use GCC instrinsics to perform overflow checking in the gmem
+    allocation functions.
+
+ goo/gmem.h | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 2b4371b434b27874b64742dcd885e4f303082810
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Mon Aug 27 19:55:44 2018 +0200
+
+    Turn gmem into a header-only wrapper to allow unnecessary branches
+    to be optimized away and function call overhead to be aovided.
+
+ CMakeLists.txt             |   1 -
+ goo/gmem.cc                | 171
+ -----------------------------------------
+ goo/gmem.h                 | 185
+ +++++++++++++++++++++++++++++++++++----------
+ poppler/CairoRescaleBox.cc |   6 +-
+ poppler/GfxFont.cc         |   2 +-
+ 5 files changed, 147 insertions(+), 218 deletions(-)
+
+commit c362ab1b97f20c5b73b3bad8d52015f679178748
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Mon Aug 27 19:42:29 2018 +0200
+
+    Remove DEBUG_MEM from Object since this uses RAII now and hence
+    cannot leak. (The existing tracking also is not thread-safe and
+    hence unreliable.)
+
+ poppler/Object.cc              | 31 -------------------------------
+ poppler/Object.h               | 17 -----------------
+ poppler/poppler-config.h.cmake |  3 +--
+ utils/pdfdetach.cc             |  3 ---
+ utils/pdffonts.cc              |  3 ---
+ utils/pdfimages.cc             |  3 ---
+ utils/pdfinfo.cc               |  3 ---
+ utils/pdftocairo.cc            |  3 ---
+ utils/pdftohtml.cc             |  3 ---
+ utils/pdftoppm.cc              |  3 ---
+ utils/pdftops.cc               |  3 ---
+ utils/pdftotext.cc             |  3 ---
+ 12 files changed, 1 insertion(+), 77 deletions(-)
+
+commit 122b3ca5838f9648646d7a2940badaae86756f03
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Mon Aug 27 19:39:20 2018 +0200
+
+    Replace specific DEBUG_MEM in Array implementation by debug
+    assertions.
+
+ poppler/Array.cc | 16 ++++------------
+ 1 file changed, 4 insertions(+), 12 deletions(-)
+
+commit f89446f6917a869b0f1a80fcc8ce81a7213dade4
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Mon Aug 27 19:37:25 2018 +0200
+
+    Remove generic heap debugging from gmem since external tools and
+    compiler instrumentation achieve the same effect.
+
+ goo/gmem.cc         | 151
+ ----------------------------------------------------
+ goo/gmem.h          |   9 ----
+ utils/pdfdetach.cc  |   1 -
+ utils/pdffonts.cc   |   1 -
+ utils/pdfimages.cc  |   1 -
+ utils/pdfinfo.cc    |   1 -
+ utils/pdftocairo.cc |   1 -
+ utils/pdftohtml.cc  |   1 -
+ utils/pdftoppm.cc   |   1 -
+ utils/pdftops.cc    |   1 -
+ utils/pdftotext.cc  |   1 -
+ 11 files changed, 169 deletions(-)
+
+commit 38b67245941a8672372953142b06c80cd0a142c0
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Mon Aug 27 19:27:41 2018 +0200
+
+    Remove gmempp implementing C++ memory allocation operators using
+    gmalloc for heap debugging.
+
+ CMakeLists.txt |  1 -
+ goo/gmempp.cc  | 32 --------------------------------
+ 2 files changed, 33 deletions(-)
+
+commit d62d65c21f01c7b0a7c28adebcab43d667bcaed9
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Sat Aug 25 20:06:13 2018 +0200
+
+    Use --output-on-failure ctest flag to make failed CI runs more
+    informative.
+
+ .gitlab-ci.yml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 93b214986aa89bc085c7937f63e5eafe795d985c
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Fri Aug 24 07:42:52 2018 +0200
+
+    Reconstruct iterator via index arithmetic instead of relying on a
+    non-standard constructor to fix builds on MSVC.
+
+ poppler/Dict.cc | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit dcd8ad25023db542ade5edc23fc5f943d8ee6376
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Thu Aug 23 23:07:41 2018 +0200
+
+    Also delete Object::dictAdd that takes a char *
+
+    Makes sure noone gets a char * -> const char * promotion via Object
+
+ poppler/Object.h | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit d63564b2bca955c7ef6ec694e3c64f9e4ee46d57
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Thu Aug 23 23:10:57 2018 +0200
+
+    Add Adam's copyright for the last patchset
+
+ poppler/Annot.cc   | 1 +
+ poppler/Catalog.cc | 1 +
+ poppler/Catalog.h  | 1 +
+ poppler/Dict.cc    | 1 +
+ poppler/Dict.h     | 1 +
+ poppler/Form.cc    | 1 +
+ poppler/Object.h   | 1 +
+ poppler/PDFDoc.cc  | 2 +-
+ poppler/Parser.cc  | 1 +
+ utils/pdfunite.cc  | 1 +
+ 10 files changed, 10 insertions(+), 1 deletion(-)
+
+commit ff2b670062d1315435b418f7ce47b28adb4b789b
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Thu Aug 23 20:29:08 2018 +0200
+
+    Delete the previously ownership taking overload of Dict::add to
+    avoid unexpected memory leaks due to the initial API change.
+
+ poppler/Dict.h | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+commit 8cb364059d3a8d502811565acd166116dbcd0785
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Tue May 8 18:54:32 2018 +0200
+
+    Adjust all users of Dict::add to avoid leaking memory due to by now
+    unnecessary calls to copyString.
+
+ poppler/Annot.cc  | 28 ++++++++++++++--------------
+ poppler/Gfx.cc    |  9 +++------
+ poppler/Object.h  |  4 ++--
+ poppler/PDFDoc.cc |  8 ++++----
+ poppler/Parser.cc |  8 +++-----
+ utils/pdfunite.cc |  4 ++--
+ 6 files changed, 28 insertions(+), 33 deletions(-)
+
+commit d479e37d34435c6afedf1343a7f60334f351220c
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Tue May 8 18:19:03 2018 +0200
+
+    Fix linking errors in release builds due to non exported weak symbols.
+
+ poppler/Dict.cc | 4 ++++
+ poppler/Dict.h  | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+commit d4230e3b72d22a24ffe747891a15635ebf0df628
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Tue May 8 08:32:03 2018 +0200
+
+    But do use swap-and-pop if the Dict is still small enough to be
+    unsorted.
+
+ poppler/Dict.cc | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+commit ca202af16ac9bd177d7417f3e74b8987e9256bc6
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Mon May 7 22:58:43 2018 +0200
+
+    Try to simplify Dict by implementing it in terms of std::vector
+    and std::string.
+
+ poppler/Catalog.cc |   2 +-
+ poppler/Catalog.h  |   2 +-
+ poppler/Dict.cc    | 240
+ ++++++++++++++++-------------------------------------
+ poppler/Dict.h     |  46 +++++-----
+ poppler/Form.cc    |   2 +-
+ poppler/Object.h   |   4 +-
+ 6 files changed, 99 insertions(+), 197 deletions(-)
+
+commit 670171ba7507bc8ea39c3a33316c86b68fed5e0d
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Thu Aug 23 18:11:45 2018 +0200
+
+    Don't abort if the SampleFunction has too many samples
+
+    Fixes issue #634
+
+ poppler/Function.cc | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+commit 5fbce88ec9f6d360c5b6436837dfa760c8fa8d95
+Author: Volker Krause <vkrause at kde.org>
+Date:   Thu Aug 23 00:56:27 2018 +0200
+
+    Fix memory issues in GfxImageColorMap copy ctor
+
+    - byte_lookup and lookup2 could contain uninitialized memory
+    - lookup2 was not copied at all
+    - lookup could be copied with the wrong size
+
+    Issue #145
+
+ poppler/GfxState.cc | 19 +++++++++++++------
+ 1 file changed, 13 insertions(+), 6 deletions(-)
+
+commit 2b5f35e59d234aed0805f0ea8ac5086e35837153
+Author: Oliver Sander <oliver.sander at tu-dresden.de>
+Date:   Tue Nov 28 16:40:40 2017 +0100
+
+    Document the OutputDev::clip and OutputDev::oeClip methods
+
+ poppler/OutputDev.h | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+commit 2a67883de1c896c5a8956226db7871e97724ed2b
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Wed Aug 22 06:10:29 2018 +0200
+
+    Also install Curl development files since it is a default enabled
+    dependency.
+
+ .gitlab-ci.yml | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit c220ef254f326866016930ac9c1c2b430fcb11ea
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Wed Aug 22 00:57:33 2018 +0200
+
+    Fix uninitialized memory read
+
+    Fixes oss-fuzz/10009
+
+ poppler/Gfx.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit b8082c67943ea7ef7c115b86cffb0785da32d227
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Tue Aug 21 20:21:36 2018 +0200
+
+    Since the CI directory is cached, we need to make sure we create it
+    if necessary instead of failing.
+
+ .gitlab-ci.yml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit f1b8626e021a11d2b649be69c563a2a9af210c84
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Tue Aug 21 08:35:31 2018 +0200
+
+    Use a proper UTF-8 locale for non-ASCII file names in the tests and
+    rebase onto Debian unstable
+
+ .gitlab-ci.yml | 17 ++++++++++++-----
+ 1 file changed, 12 insertions(+), 5 deletions(-)
+
+commit 534aca90732c199e96057111272afbc22796ea60
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Tue Aug 21 08:13:10 2018 +0200
+
+    Also download test-data to be able to run unit tests
+
+ .gitlab-ci.yml | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+commit 78f8a6abed64a1b9ad320587b614ee87bc7791ab
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Tue Aug 21 08:00:41 2018 +0200
+
+    Add initial GitLab CI manifest
+
+ .gitlab-ci.yml | 18 ++++++++++++++++++
+ 1 file changed, 18 insertions(+)
+
 commit c666833e4163a93451eab27c675af9ca82d11593
 Author: Albert Astals Cid <aacid at kde.org>
 Date:   Sun Aug 19 23:37:51 2018 +0200

Modified: trunk/Build/source/libs/poppler/poppler-src/NEWS
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/NEWS	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/NEWS	2018-09-22 07:01:59 UTC (rev 48730)
@@ -1,3 +1,34 @@
+Release 0.69.0
+        core:
+         * Add annotation font color
+         * Splash: Some speed improvements
+         * PSOutputDev: add native support for type 7 shadings when using level 3
+         * Add support for PDF subtype property
+         * Link: Fix memory leak regarding next actions
+         * Fix handling of Signature Info Location and Reason
+         * Fix errors in computation of type3 glyphs transformation matrix
+         * Reimplement Dict class in a more modern way
+         * Fix security issues found by oss-fuzz
+         * Fix memory issues in GfxImageColorMap copy ctor
+         * Don't abort if the SampleFunction has too many samples. Issue #634
+         * Document the OutputDev::clip and OutputDev::oeClip methods
+         * fix macOS compilation due to boolean define in jpeglib
+         * Split GDir and GDirEntry out of gfile.h. Issue #370
+
+        qt5:
+         * Add annotation font color
+
+        cpp:
+
+        utils:
+         * pdfinfo: Show PDF subtype
+         * pdftotext: Fix only outputs first page content with -bbox-layout option. Issue #88
+         * pdftotext: Fix memory leak in printLine
+
+
+        build system:
+         * Require C++14
+
 Release 0.68.0
         core:
          * Add Reason and Location to SignatureInfo. Bug #107299

Modified: trunk/Build/source/libs/poppler/poppler-src/fofi/FoFiType1C.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/fofi/FoFiType1C.cc	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/fofi/FoFiType1C.cc	2018-09-22 07:01:59 UTC (rev 48730)
@@ -15,6 +15,7 @@
 //
 // Copyright (C) 2009, 2010, 2017, 2018 Albert Astals Cid <aacid at kde.org>
 // Copyright (C) 2012 Thomas Freitag <Thomas.Freitag at alfa.de>
+// Copyright (C) 2018 Adam Reichold <adam.reichold at t-online.de>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -2663,7 +2664,14 @@
   }
   x = 0;
   for (i = 0; i < n; ++i) {
-    x += (int)ops[i].num;
+    int y;
+    if (unlikely(isinf(ops[i].num))) {
+      return i;
+    }
+    if (checkedAdd(x, (int)ops[i].num, &y)) {
+      return i;
+    }
+    x = y;
     arr[i] = x;
   }
   return n;

Added: trunk/Build/source/libs/poppler/poppler-src/goo/GooCheckedOps.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/goo/GooCheckedOps.h	                        (rev 0)
+++ trunk/Build/source/libs/poppler/poppler-src/goo/GooCheckedOps.h	2018-09-22 07:01:59 UTC (rev 48730)
@@ -0,0 +1,49 @@
+//========================================================================
+//
+// GooCheckedOps.h
+//
+// This file is licensed under the GPLv2 or later
+//
+// Copyright (C) 2018 Adam Reichold <adam.reichold at t-online.de>
+//
+//========================================================================
+
+#ifndef GOO_CHECKED_OPS_H
+#define GOO_CHECKED_OPS_H
+
+#include <climits>
+
+inline bool checkedAssign(long long lz, int *z) {
+  static_assert(LLONG_MAX > INT_MAX, "Need type larger than int to perform overflow checks.");
+
+  if (lz > INT_MAX || lz < INT_MIN) {
+    return true;
+  }
+
+  *z = static_cast<int>(lz);
+  return false;
+}
+
+#ifndef __has_builtin
+  #define __has_builtin(x) 0
+#endif
+
+inline bool checkedAdd(int x, int y, int *z) {
+#if __GNUC__ >= 5 || __has_builtin(__builtin_sadd_overflow)
+  return __builtin_sadd_overflow(x, y, z);
+#else
+  const auto lz = static_cast<long long>(x) + static_cast<long long>(y);
+  return checkedAssign(lz, z);
+#endif
+}
+
+inline bool checkedMultiply(int x, int y, int *z) {
+#if __GNUC__ >= 5 || __has_builtin(__builtin_smul_overflow)
+  return __builtin_smul_overflow(x, y, z);
+#else
+  const auto lz = static_cast<long long>(x) * static_cast<long long>(y);
+  return checkedAssign(lz, z);
+#endif
+}
+
+#endif // GOO_CHECKED_OPS_H


Property changes on: trunk/Build/source/libs/poppler/poppler-src/goo/GooCheckedOps.h
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Modified: trunk/Build/source/libs/poppler/poppler-src/goo/JpegWriter.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/goo/JpegWriter.cc	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/goo/JpegWriter.cc	2018-09-22 07:01:59 UTC (rev 48730)
@@ -11,6 +11,7 @@
 // Copyright (C) 2013 Peter Breitenlohner <peb at mppmu.mpg.de>
 // Copyright (C) 2017, 2018 Albert Astals Cid <aacid at kde.org>
 // Copyright (C) 2018 Martin Packman <gzlist at googlemail.com>
+// Copyright (C) 2018 Ed Porras <ed at motologic.com>
 //
 //========================================================================
 
@@ -143,7 +144,7 @@
   }
 
   // Set whether to compute optimal Huffman coding tables
-  priv->cinfo.optimize_coding = priv->optimize;
+  priv->cinfo.optimize_coding = static_cast<boolean>(priv->optimize);
 
   // Get ready for data
   jpeg_start_compress(&priv->cinfo, TRUE);

Added: trunk/Build/source/libs/poppler/poppler-src/goo/gdir.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/goo/gdir.h	                        (rev 0)
+++ trunk/Build/source/libs/poppler/poppler-src/goo/gdir.h	2018-09-22 07:01:59 UTC (rev 48730)
@@ -0,0 +1,91 @@
+//========================================================================
+//
+// gfile.h
+//
+// Miscellaneous file and directory name manipulation.
+//
+// Copyright 1996-2003 Glyph & Cog, LLC
+//
+//========================================================================
+
+//========================================================================
+//
+// Modified under the Poppler project - http://poppler.freedesktop.org
+//
+// All changes made under the Poppler project to this file are licensed
+// under GPL version 2 or later
+//
+// Copyright (C) 2006 Kristian Høgsberg <krh at redhat.com>
+// Copyright (C) 2009, 2011, 2012, 2017, 2018 Albert Astals Cid <aacid at kde.org>
+// Copyright (C) 2009 Kovid Goyal <kovid at kovidgoyal.net>
+// Copyright (C) 2013 Adam Reichold <adamreichold at myopera.com>
+// Copyright (C) 2013, 2017 Adrian Johnson <ajohnson at redneon.com>
+// Copyright (C) 2014 Bogdan Cristea <cristeab at gmail.com>
+// Copyright (C) 2014 Peter Breitenlohner <peb at mppmu.mpg.de>
+// Copyright (C) 2017 Christoph Cullmann <cullmann at kde.org>
+// Copyright (C) 2017 Thomas Freitag <Thomas.Freitag at alfa.de>
+// Copyright (C) 2018 Mojca Miklavec <mojca at macports.org>
+//
+// To see a description of the changes please see the Changelog file that
+// came with your tarball or type make ChangeLog if you are building from git
+//
+//========================================================================
+
+#ifndef GDIR_H
+#define GDIR_H
+
+#include "poppler-config.h"
+#include "gtypes.h"
+
+class GooString;
+
+//------------------------------------------------------------------------
+// GDir and GDirEntry
+//------------------------------------------------------------------------
+
+class GDirEntry {
+public:
+
+  GDirEntry(char *dirPath, char *nameA, GBool doStat);
+  ~GDirEntry();
+  GooString *getName() { return name; }
+  GooString *getFullPath() { return fullPath; }
+  GBool isDir() { return dir; }
+
+private:
+  GDirEntry(const GDirEntry &other);
+  GDirEntry& operator=(const GDirEntry &other);
+
+  GooString *name;		// dir/file name
+  GooString *fullPath;
+  GBool dir;			// is it a directory?
+};
+
+class GDir {
+public:
+
+  GDir(char *name, GBool doStatA = gTrue);
+  ~GDir();
+  GDirEntry *getNextEntry();
+  void rewind();
+
+private:
+  GDir(const GDir &other);
+  GDir& operator=(const GDir &other);
+
+  GooString *path;		// directory path
+  GBool doStat;			// call stat() for each entry?
+#if defined(_WIN32)
+  WIN32_FIND_DATAA ffd;
+  HANDLE hnd;
+#elif defined(ACORN)
+#elif defined(MACOS)
+#else
+  DIR *dir;			// the DIR structure from opendir()
+#ifdef VMS
+  GBool needParent;		// need to return an entry for [-]
+#endif
+#endif
+};
+
+#endif


Property changes on: trunk/Build/source/libs/poppler/poppler-src/goo/gdir.h
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Modified: trunk/Build/source/libs/poppler/poppler-src/goo/gfile.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/goo/gfile.cc	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/goo/gfile.cc	2018-09-22 07:01:59 UTC (rev 48730)
@@ -56,6 +56,7 @@
 #include <limits>
 #include "GooString.h"
 #include "gfile.h"
+#include "gdir.h"
 
 // Some systems don't define this, so just make it something reasonably
 // large.

Modified: trunk/Build/source/libs/poppler/poppler-src/goo/gfile.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/goo/gfile.h	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/goo/gfile.h	2018-09-22 07:01:59 UTC (rev 48730)
@@ -169,53 +169,4 @@
 #endif // _WIN32
 };
 
-//------------------------------------------------------------------------
-// GDir and GDirEntry
-//------------------------------------------------------------------------
-
-class GDirEntry {
-public:
-
-  GDirEntry(char *dirPath, char *nameA, GBool doStat);
-  ~GDirEntry();
-  GooString *getName() { return name; }
-  GooString *getFullPath() { return fullPath; }
-  GBool isDir() { return dir; }
-
-private:
-  GDirEntry(const GDirEntry &other);
-  GDirEntry& operator=(const GDirEntry &other);
-
-  GooString *name;		// dir/file name
-  GooString *fullPath;
-  GBool dir;			// is it a directory?
-};
-
-class GDir {
-public:
-
-  GDir(char *name, GBool doStatA = gTrue);
-  ~GDir();
-  GDirEntry *getNextEntry();
-  void rewind();
-
-private:
-  GDir(const GDir &other);
-  GDir& operator=(const GDir &other);
-
-  GooString *path;		// directory path
-  GBool doStat;			// call stat() for each entry?
-#if defined(_WIN32)
-  WIN32_FIND_DATAA ffd;
-  HANDLE hnd;
-#elif defined(ACORN)
-#elif defined(MACOS)
-#else
-  DIR *dir;			// the DIR structure from opendir()
-#ifdef VMS
-  GBool needParent;		// need to return an entry for [-]
 #endif
-#endif
-};
-
-#endif

Deleted: trunk/Build/source/libs/poppler/poppler-src/goo/gmem.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/goo/gmem.cc	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/goo/gmem.cc	2018-09-22 07:01:59 UTC (rev 48730)
@@ -1,322 +0,0 @@
-/*
- * gmem.c
- *
- * Memory routines with out-of-memory checking.
- *
- * Copyright 1996-2003 Glyph & Cog, LLC
- */
-
-//========================================================================
-//
-// Modified under the Poppler project - http://poppler.freedesktop.org
-//
-// All changes made under the Poppler project to this file are licensed
-// under GPL version 2 or later
-//
-// Copyright (C) 2005 Takashi Iwai <tiwai at suse.de>
-// Copyright (C) 2007-2010, 2012 Albert Astals Cid <aacid at kde.org>
-// Copyright (C) 2008 Jonathan Kew <jonathan_kew at sil.org>
-//
-// To see a description of the changes please see the Changelog file that
-// came with your tarball or type make ChangeLog if you are building from git
-//
-//========================================================================
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stddef.h>
-#include <string.h>
-#include <limits.h>
-#include "gmem.h"
-
-#ifdef DEBUG_MEM
-
-typedef struct _GMemHdr {
-  unsigned int magic;
-  int size;
-  int index;
-  struct _GMemHdr *next, *prev;
-} GMemHdr;
-
-#define gMemHdrSize ((sizeof(GMemHdr) + 7) & ~7)
-#define gMemTrlSize (sizeof(long))
-
-#define gMemMagic 0xabcd9999
-
-#if gmemTrlSize==8
-#define gMemDeadVal 0xdeadbeefdeadbeefUL
-#else
-#define gMemDeadVal 0xdeadbeefUL
-#endif
-
-/* round data size so trailer will be aligned */
-#define gMemDataSize(size) \
-  ((((size) + gMemTrlSize - 1) / gMemTrlSize) * gMemTrlSize)
-
-static GMemHdr *gMemHead = NULL;
-static GMemHdr *gMemTail = NULL;
-
-static int gMemIndex = 0;
-static int gMemAlloc = 0;
-static int gMemInUse = 0;
-
-#endif /* DEBUG_MEM */
-
-inline static void *gmalloc(size_t size, bool checkoverflow) {
-#ifdef DEBUG_MEM
-  int size1;
-  char *mem;
-  GMemHdr *hdr;
-  void *data;
-  unsigned long *trl, *p;
-
-  if (size == 0) {
-    return NULL;
-  }
-  size1 = gMemDataSize(size);
-  if (!(mem = (char *)malloc(size1 + gMemHdrSize + gMemTrlSize))) {
-    fprintf(stderr, "Out of memory\n");
-    if (checkoverflow) return NULL;
-    else exit(1);
-  }
-  hdr = (GMemHdr *)mem;
-  data = (void *)(mem + gMemHdrSize);
-  trl = (unsigned long *)(mem + gMemHdrSize + size1);
-  hdr->magic = gMemMagic;
-  hdr->size = size;
-  hdr->index = gMemIndex++;
-  if (gMemTail) {
-    gMemTail->next = hdr;
-    hdr->prev = gMemTail;
-    gMemTail = hdr;
-  } else {
-    hdr->prev = NULL;
-    gMemHead = gMemTail = hdr;
-  }
-  hdr->next = NULL;
-  ++gMemAlloc;
-  gMemInUse += size;
-  for (p = (unsigned long *)data; p <= trl; ++p) {
-    *p = gMemDeadVal;
-  }
-  return data;
-#else
-  void *p;
-
-  if (size == 0) {
-    return nullptr;
-  }
-  if (!(p = malloc(size))) {
-    fprintf(stderr, "Out of memory\n");
-    if (checkoverflow) return nullptr;
-    else exit(1);
-  }
-  return p;
-#endif
-}
-
-void *gmalloc(size_t size) {
-  return gmalloc(size, false);
-}
-
-void *gmalloc_checkoverflow(size_t size) {
-  return gmalloc(size, true);
-}
-
-inline static void *grealloc(void *p, size_t size, bool checkoverflow) {
-#ifdef DEBUG_MEM
-  GMemHdr *hdr;
-  void *q;
-  int oldSize;
-
-  if (size == 0) {
-    if (p) {
-      gfree(p);
-    }
-    return NULL;
-  }
-  if (p) {
-    hdr = (GMemHdr *)((char *)p - gMemHdrSize);
-    oldSize = hdr->size;
-    q = gmalloc(size, checkoverflow);
-    memcpy(q, p, size < oldSize ? size : oldSize);
-    gfree(p);
-  } else {
-    q = gmalloc(size, checkoverflow);
-  }
-  return q;
-#else
-  void *q;
-
-  if (size == 0) {
-    if (p) {
-      free(p);
-    }
-    return nullptr;
-  }
-  if (p) {
-    q = realloc(p, size);
-  } else {
-    q = malloc(size);
-  }
-  if (!q) {
-    fprintf(stderr, "Out of memory\n");
-    if (checkoverflow) return nullptr;
-    else exit(1);
-  }
-  return q;
-#endif
-}
-
-void *grealloc(void *p, size_t size) {
-  return grealloc(p, size, false);
-}
-
-void *grealloc_checkoverflow(void *p, size_t size) {
-  return grealloc(p, size, true);
-}
-
-inline static void *gmallocn(int nObjs, int objSize, bool checkoverflow) {
-  if (nObjs == 0) {
-    return nullptr;
-  }
-  if (objSize <= 0 || nObjs < 0 || nObjs >= INT_MAX / objSize) {
-    fprintf(stderr, "Bogus memory allocation size\n");
-    if (checkoverflow) return nullptr;
-    else exit(1);
-  }
-  const int n = nObjs * objSize;
-  return gmalloc(n, checkoverflow);
-}
-
-void *gmallocn(int nObjs, int objSize) {
-  return gmallocn(nObjs, objSize, false);
-}
-
-void *gmallocn_checkoverflow(int nObjs, int objSize) {
-  return gmallocn(nObjs, objSize, true);
-}
-
-inline static void *gmallocn3(int a, int b, int c, bool checkoverflow) {
-  int n = a * b;
-  if (b <= 0 || a < 0 || a >= INT_MAX / b) {
-    fprintf(stderr, "Bogus memory allocation size\n");
-    if (checkoverflow) return nullptr;
-    else exit(1);
-  }
-  return gmallocn(n, c, checkoverflow);
-}
-
-void *gmallocn3(int a, int b, int c) {
-  return gmallocn3(a, b, c, false);
-}
-
-void *gmallocn3_checkoverflow(int a, int b, int c) {
-  return gmallocn3(a, b, c, true);
-}
-
-inline static void *greallocn(void *p, int nObjs, int objSize, bool checkoverflow) {
-  if (nObjs == 0) {
-    if (p) {
-      gfree(p);
-    }
-    return nullptr;
-  }
-  if (objSize <= 0 || nObjs < 0 || nObjs >= INT_MAX / objSize) {
-    fprintf(stderr, "Bogus memory allocation size\n");
-    if (checkoverflow) {
-      gfree(p);
-      return nullptr;
-    } else {
-      exit(1);
-    }
-  }
-  const int n = nObjs * objSize;
-  return grealloc(p, n, checkoverflow);
-}
-
-void *greallocn(void *p, int nObjs, int objSize) {
-  return greallocn(p, nObjs, objSize, false);
-}
-
-void *greallocn_checkoverflow(void *p, int nObjs, int objSize) {
-  return greallocn(p, nObjs, objSize, true);
-}
-
-void gfree(void *p) {
-#ifdef DEBUG_MEM
-  int size;
-  GMemHdr *hdr;
-  unsigned long *trl, *clr;
-
-  if (p) {
-    hdr = (GMemHdr *)((char *)p - gMemHdrSize);
-    if (hdr->magic == gMemMagic &&
-	((hdr->prev == NULL) == (hdr == gMemHead)) &&
-	((hdr->next == NULL) == (hdr == gMemTail))) {
-      if (hdr->prev) {
-	hdr->prev->next = hdr->next;
-      } else {
-	gMemHead = hdr->next;
-      }
-      if (hdr->next) {
-	hdr->next->prev = hdr->prev;
-      } else {
-	gMemTail = hdr->prev;
-      }
-      --gMemAlloc;
-      gMemInUse -= hdr->size;
-      size = gMemDataSize(hdr->size);
-      trl = (unsigned long *)((char *)hdr + gMemHdrSize + size);
-      if (*trl != gMemDeadVal) {
-	fprintf(stderr, "Overwrite past end of block %d at address %p\n",
-		hdr->index, p);
-      }
-      for (clr = (unsigned long *)hdr; clr <= trl; ++clr) {
-	*clr = gMemDeadVal;
-      }
-      free(hdr);
-    } else {
-      fprintf(stderr, "Attempted to free bad address %p\n", p);
-    }
-  }
-#else
-  if (p) {
-    free(p);
-  }
-#endif
-}
-
-#ifdef DEBUG_MEM
-void gMemReport(FILE *f) {
-  GMemHdr *p;
-
-  fprintf(f, "%d memory allocations in all\n", gMemIndex);
-  if (gMemAlloc > 0) {
-    fprintf(f, "%d memory blocks left allocated:\n", gMemAlloc);
-    fprintf(f, " index     size\n");
-    fprintf(f, "-------- --------\n");
-    for (p = gMemHead; p; p = p->next) {
-      fprintf(f, "%8d %8d\n", p->index, p->size);
-    }
-  } else {
-    fprintf(f, "No memory blocks left allocated\n");
-  }
-}
-#endif
-
-char *copyString(const char *s) {
-  char *s1;
-
-  s1 = (char *)gmalloc(strlen(s) + 1);
-  strcpy(s1, s);
-  return s1;
-}
-
-char *gstrndup(const char *s, size_t n) {
-  char *s1 = (char*)gmalloc(n + 1); /* cannot return NULL for size > 0 */
-  s1[n] = '\0';
-  memcpy(s1, s, n);
-  return s1;
-}

Modified: trunk/Build/source/libs/poppler/poppler-src/goo/gmem.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/goo/gmem.h	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/goo/gmem.h	2018-09-22 07:01:59 UTC (rev 48730)
@@ -16,6 +16,7 @@
 // Copyright (C) 2005 Takashi Iwai <tiwai at suse.de>
 // Copyright (C) 2007-2010, 2017 Albert Astals Cid <aacid at kde.org>
 // Copyright (C) 2008 Jonathan Kew <jonathan_kew at sil.org>
+// Copyright (C) 2018 Adam Reichold <adam.reichold at t-online.de>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -25,68 +26,155 @@
 #ifndef GMEM_H
 #define GMEM_H
 
-#include <stdio.h>
-#include "poppler-config.h"
+#include <cstring>
+#include <cstdlib>
+#include <cstdio>
 
-#ifdef __cplusplus
-extern "C" {
-#endif
+#include "GooCheckedOps.h"
 
-/*
- * Same as malloc, but prints error message and exits if malloc()
- * returns NULL.
- */
-extern void *gmalloc(size_t size);
-extern void *gmalloc_checkoverflow(size_t size);
+/// Same as malloc, but prints error message and exits if malloc() returns NULL.
+inline void *gmalloc(size_t size, bool checkoverflow = false) {
+  if (size == 0) {
+    return nullptr;
+  }
 
-/*
- * Same as realloc, but prints error message and exits if realloc()
- * returns NULL.  If <p> is NULL, calls malloc instead of realloc().
- */
-extern void *grealloc(void *p, size_t size);
-extern void *grealloc_checkoverflow(void *p, size_t size);
+  if (void *p = std::malloc(size)) {
+    return p;
+  }
 
+  std::fputs("Out of memory\n", stderr);
+
+  if (checkoverflow) {
+    return nullptr;
+  }
+
+  std::abort();
+}
+
+inline void *gmalloc_checkoverflow(size_t size) {
+  return gmalloc(size, true);
+}
+
+/// Same as free, but checks for and ignores NULL pointers.
+inline void gfree(void *p) {
+  if (p) {
+    std::free(p);
+  }
+}
+
+/// Same as realloc, but prints error message and exits if realloc() returns NULL.
+/// If <p> is NULL, calls malloc() instead of realloc().
+inline void *grealloc(void *p, size_t size, bool checkoverflow = false) {
+  if (size == 0) {
+    gfree(p);
+    return nullptr;
+  }
+
+  if (void *q = p ? std::realloc(p, size) : std::malloc(size)) {
+    return q;
+  }
+
+  std::fputs("Out of memory\n", stderr);
+
+  if (checkoverflow) {
+    return nullptr;
+  }
+
+  std::abort();
+}
+
+inline void *grealloc_checkoverflow(void *p, size_t size) {
+  return grealloc(p, size, true);
+}
+
 /*
  * These are similar to gmalloc and grealloc, but take an object count
- * and size.  The result is similar to allocating nObjs * objSize
+ * and size. The result is similar to allocating <count> * <size>
  * bytes, but there is an additional error check that the total size
  * doesn't overflow an int.
  * The gmallocn_checkoverflow variant returns NULL instead of exiting
- * the application if a overflow is detected
+ * the application if a overflow is detected.
  */
-extern void *gmallocn(int nObjs, int objSize);
-extern void *gmallocn_checkoverflow(int nObjs, int objSize);
-extern void *gmallocn3(int a, int b, int c);
-extern void *gmallocn3_checkoverflow(int a, int b, int c);
-extern void *greallocn(void *p, int nObjs, int objSize);
-extern void *greallocn_checkoverflow(void *p, int nObjs, int objSize);
 
-/*
- * Same as free, but checks for and ignores NULL pointers.
- */
-extern void gfree(void *p);
+inline void *gmallocn(int count, int size, bool checkoverflow = false) {
+  if (count == 0) {
+    return nullptr;
+  }
 
-#ifdef DEBUG_MEM
-/*
- * Report on unfreed memory.
- */
-extern void gMemReport(FILE *f);
-#else
-#define gMemReport(f)
-#endif
+  int bytes;
+  if (count < 0 || size <= 0 || checkedMultiply(count, size, &bytes)) {
+    std::fputs("Bogus memory allocation size\n", stderr);
 
-/*
- * Allocate memory and copy a string into it.
- */
-extern char *copyString(const char *s);
+    if (checkoverflow) {
+      return nullptr;
+    }
 
-/*
- * Allocate memory and copy a limited-length string to it.
- */
-extern char *gstrndup(const char *s, size_t n);
+    std::abort();
+  }
 
-#ifdef __cplusplus
+  return gmalloc(bytes, checkoverflow);
 }
-#endif
 
-#endif
+inline void *gmallocn_checkoverflow(int count, int size) {
+  return gmallocn(count, size, true);
+}
+
+inline void *gmallocn3(int width, int height, int size, bool checkoverflow = false) {
+  if (width == 0 || height == 0) {
+    return nullptr;
+  }
+
+  int count;
+  int bytes;
+  if (width < 0 || height < 0 || size <= 0 || checkedMultiply(width, height, &count) || checkedMultiply(count, size, &bytes)) {
+    std::fputs("Bogus memory allocation size\n", stderr);
+
+    if (checkoverflow) {
+      return nullptr;
+    }
+
+    std::abort();
+  }
+
+  return gmalloc(bytes, checkoverflow);
+}
+
+inline void *greallocn(void *p, int count, int size, bool checkoverflow = false) {
+  if (count == 0) {
+    gfree(p);
+    return nullptr;
+  }
+
+  int bytes;
+  if (count < 0 || size <= 0 || checkedMultiply(count, size, &bytes)) {
+    std::fputs("Bogus memory allocation size\n", stderr);
+
+    if (checkoverflow) {
+      gfree(p);
+      return nullptr;
+    }
+
+    std::abort();
+  }
+
+  return grealloc(p, bytes, checkoverflow);
+}
+
+inline void *greallocn_checkoverflow(void *p, int count, int size) {
+  return greallocn(p, count, size, true);
+}
+
+/// Allocate memory and copy a string into it.
+inline char *copyString(const char *s) {
+  char *r = static_cast<char *>(gmalloc(std::strlen(s) + 1, false));
+  return std::strcpy(r, s);
+}
+
+/// Allocate memory and copy a limited-length string to it.
+inline char *copyString(const char *s, size_t n) {
+  char *r = static_cast<char *>(gmalloc(n + 1, false));
+  r[n] = '\0';
+  return std::strncpy(r, s, n);
+}
+
+#endif // GMEM_H

Deleted: trunk/Build/source/libs/poppler/poppler-src/goo/gmempp.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/goo/gmempp.cc	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/goo/gmempp.cc	2018-09-22 07:01:59 UTC (rev 48730)
@@ -1,32 +0,0 @@
-//========================================================================
-//
-// gmempp.cc
-//
-// Use gmalloc/gfree for C++ new/delete operators.
-//
-// Copyright 1996-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <config.h>
-#include "gmem.h"
-
-#ifdef DEBUG_MEM
-
-void *operator new(size_t size) {
-  return gmalloc((int)size);
-}
-
-void *operator new[](size_t size) {
-  return gmalloc((int)size);
-}
-
-void operator delete(void *p) {
-  gfree(p);
-}
-
-void operator delete[](void *p) {
-  gfree(p);
-}
-
-#endif

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Annot.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Annot.cc	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Annot.cc	2018-09-22 07:01:59 UTC (rev 48730)
@@ -38,6 +38,9 @@
 // Copyright (C) 2017 Hans-Ulrich Jüttner <huj at froreich-bioscientia.de>
 // Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. Work sponsored by the LiMux project of the city of Munich
 // Copyright 2018 Andre Heinecke <aheinecke at intevation.de>
+// Copyright (C) 2018 Adam Reichold <adam.reichold at t-online.de>
+// Copyright (C) 2018 Dileep Sankhla <sankhla.dileep96 at gmail.com>
+// Copyright (C) 2018 Tobias Deiminger <haxtibal at posteo.de>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -792,6 +795,73 @@
 }
 
 //------------------------------------------------------------------------
+// DefaultAppearance
+//------------------------------------------------------------------------
+
+DefaultAppearance::DefaultAppearance(Object &&fontNameA, double fontPtSizeA, std::unique_ptr<AnnotColor> fontColorA) :
+    fontName(std::move(fontNameA)), fontPtSize(fontPtSizeA), fontColor(std::move(fontColorA)) {
+}
+
+DefaultAppearance::DefaultAppearance(GooString *da) {
+  fontPtSize = -1;
+
+  if (da) {
+    GooList * daToks = new GooList();
+    int i = FormFieldText::tokenizeDA(da, daToks, "Tf");
+
+    if (i >= 1) {
+      fontPtSize = gatof(( (GooString *)daToks->get(i-1) )->getCString());
+    }
+    if (i >= 2) {
+      // We are expecting a name, therefore the first letter should be '/'.
+      if (((const char*)daToks->get(i-2)) && ((const char*)daToks->get(i-2))[0] == '/') {
+        // The +1 is here to skip the leading '/'.
+        fontName = Object(objName, ((const char*)daToks->get(i-2))+1);
+      }
+    }
+    // Scan backwards: we are looking for the last set value
+    for (i = daToks->getLength()-1; i >= 0; --i) {
+      if (!fontColor) {
+        if (!((GooString *)daToks->get(i))->cmp("g") && i >= 1) {
+          fontColor = std::make_unique<AnnotColor>(gatof(( (GooString *)daToks->get(i-1) )->getCString()));
+        } else if (!((GooString *)daToks->get(i))->cmp("rg") && i >= 3) {
+          fontColor = std::make_unique<AnnotColor>(gatof(( (GooString *)daToks->get(i-3) )->getCString()),
+                                                   gatof(( (GooString *)daToks->get(i-2) )->getCString()),
+                                                   gatof(( (GooString *)daToks->get(i-1) )->getCString()));
+        } else if (!((GooString *)daToks->get(i))->cmp("k") && i >= 4) {
+          fontColor = std::make_unique<AnnotColor>(gatof(( (GooString *)daToks->get(i-4) )->getCString()),
+                                                   gatof(( (GooString *)daToks->get(i-3) )->getCString()),
+                                                   gatof(( (GooString *)daToks->get(i-2) )->getCString()),
+                                                   gatof(( (GooString *)daToks->get(i-1) )->getCString()));
+        }
+      }
+    }
+    deleteGooList(daToks, GooString);
+  }
+}
+
+void DefaultAppearance::setFontName(Object &&fontNameA) {
+  fontName = std::move(fontNameA);
+}
+
+void DefaultAppearance::setFontPtSize(double fontPtSizeA) {
+  fontPtSize = fontPtSizeA;
+}
+
+void DefaultAppearance::setFontColor(std::unique_ptr<AnnotColor> fontColorA) {
+  fontColor = std::move(fontColorA);
+}
+
+GooString *DefaultAppearance::toAppearanceString() const {
+  AnnotAppearanceBuilder appearBuilder;
+  if (fontColor) {
+    appearBuilder.setDrawColor(fontColor.get(), gTrue);
+  }
+  appearBuilder.setTextFont(fontName, fontPtSize);
+  return appearBuilder.buffer()->copy();
+}
+
+//------------------------------------------------------------------------
 // AnnotIconFit
 //------------------------------------------------------------------------
 
@@ -1616,17 +1686,17 @@
 
   switch (drawColor->getSpace()) {
   case AnnotColor::colorCMYK:
-    appearBuf->appendf("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:c}\n",
+    appearBuf->appendf("{0:.5f} {1:.5f} {2:.5f} {3:.5f} {4:c}\n",
 		       values[0], values[1], values[2], values[3],
 		       fill ? 'k' : 'K');
     break;
   case AnnotColor::colorRGB:
-    appearBuf->appendf("{0:.2f} {1:.2f} {2:.2f} {3:s}\n",
+    appearBuf->appendf("{0:.5f} {1:.5f} {2:.5f} {3:s}\n",
 		       values[0], values[1], values[2],
 		       fill ? "rg" : "RG");
     break;
   case AnnotColor::colorGray:
-    appearBuf->appendf("{0:.2f} {1:c}\n",
+    appearBuf->appendf("{0:.5f} {1:c}\n",
 		       values[0],
 		       fill ? 'g' : 'G');
     break;
@@ -1636,6 +1706,11 @@
   }
 }
 
+void AnnotAppearanceBuilder::setTextFont(const Object &fontName, double fontSize) {
+  if (fontName.isName() && strlen(fontName.getName()) > 0)
+    appearBuf->appendf("/{0:s} {1:.2f} Tf\n", fontName.getName(), fontSize);
+}
+
 void AnnotAppearanceBuilder::setLineStyleForBorder(const AnnotBorder *border) {
   int i, dashLength;
   double *dash;
@@ -2593,12 +2668,13 @@
 //------------------------------------------------------------------------
 // AnnotFreeText
 //------------------------------------------------------------------------
-AnnotFreeText::AnnotFreeText(PDFDoc *docA, PDFRectangle *rect, GooString *da) :
+AnnotFreeText::AnnotFreeText(PDFDoc *docA, PDFRectangle *rect, const DefaultAppearance &da) :
     AnnotMarkup(docA, rect) {
   type = typeFreeText;
 
+  GooString *daStr = da.toAppearanceString();
   annotObj.dictSet ("Subtype", Object(objName, "FreeText"));
-  annotObj.dictSet("DA", Object(da->copy()));
+  annotObj.dictSet("DA", Object(daStr));
 
   initialize (docA, annotObj.getDict());
 }
@@ -2726,14 +2802,10 @@
   invalidateAppearance();
 }
 
-void AnnotFreeText::setAppearanceString(GooString *new_string) {
+void AnnotFreeText::setDefaultAppearance(const DefaultAppearance &da) {
   delete appearanceString;
 
-  if (new_string) {
-    appearanceString = new GooString(new_string);
-  } else {
-    appearanceString = new GooString();
-  }
+  appearanceString = da.toAppearanceString();
 
   update ("DA", Object(appearanceString->copy()));
   invalidateAppearance();
@@ -2805,55 +2877,27 @@
   update ("IT", Object(objName, intentName));
 }
 
-static GfxFont * createAnnotDrawFont(XRef * xref, Dict *fontResDict)
+std::unique_ptr<DefaultAppearance> AnnotFreeText::getDefaultAppearance() const {
+  return std::make_unique<DefaultAppearance>(appearanceString);
+}
+
+static GfxFont *createAnnotDrawFont(XRef * xref, Dict *fontResDict)
 {
   const Ref dummyRef = { -1, -1 };
 
   Dict *fontDict = new Dict(xref);
-  fontDict->add(copyString("BaseFont"), Object(objName, "Helvetica"));
-  fontDict->add(copyString("Subtype"), Object(objName, "Type0"));
-  fontDict->add(copyString("Encoding"), Object(objName, "WinAnsiEncoding"));
+  fontDict->add("BaseFont", Object(objName, "Helvetica"));
+  fontDict->add("Subtype", Object(objName, "Type0"));
+  fontDict->add("Encoding", Object(objName, "WinAnsiEncoding"));
 
   Dict *fontsDict = new Dict(xref);
-  fontsDict->add(copyString("AnnotDrawFont"), Object(fontDict));
+  fontsDict->add("AnnotDrawFont", Object(fontDict));
 
-  fontResDict->add(copyString("Font"), Object(fontsDict));
+  fontResDict->add("Font", Object(fontsDict));
 
   return GfxFont::makeFont(xref, "AnnotDrawFont", dummyRef, fontDict);
 }
 
-void AnnotFreeText::parseAppearanceString(GooString *da, double &fontsize, AnnotColor* &fontcolor) {
-  fontsize = -1;
-  fontcolor = nullptr;
-  if (da) {
-    GooList * daToks = new GooList();
-    int i = FormFieldText::tokenizeDA(da, daToks, "Tf");
-
-    if (i >= 1) {
-      fontsize = gatof(( (GooString *)daToks->get(i-1) )->getCString());
-      // TODO: Font name
-    }
-    // Scan backwards: we are looking for the last set value
-    for (i = daToks->getLength()-1; i >= 0; --i) {
-      if (fontcolor == nullptr) {
-        if (!((GooString *)daToks->get(i))->cmp("g") && i >= 1) {
-          fontcolor = new AnnotColor(gatof(( (GooString *)daToks->get(i-1) )->getCString()));
-        } else if (!((GooString *)daToks->get(i))->cmp("rg") && i >= 3) {
-          fontcolor = new AnnotColor(gatof(( (GooString *)daToks->get(i-3) )->getCString()),
-                                     gatof(( (GooString *)daToks->get(i-2) )->getCString()),
-                                     gatof(( (GooString *)daToks->get(i-1) )->getCString()));
-        } else if (!((GooString *)daToks->get(i))->cmp("k") && i >= 4) {
-          fontcolor = new AnnotColor(gatof(( (GooString *)daToks->get(i-4) )->getCString()),
-                                     gatof(( (GooString *)daToks->get(i-3) )->getCString()),
-                                     gatof(( (GooString *)daToks->get(i-2) )->getCString()),
-                                     gatof(( (GooString *)daToks->get(i-1) )->getCString()));
-        }
-      }
-    }
-    deleteGooList(daToks, GooString);
-  }
-}
-
 void AnnotFreeText::generateFreeTextAppearance()
 {
   double borderWidth, ca = opacity;
@@ -2870,14 +2914,13 @@
   const double height = rect->y2 - rect->y1;
 
   // Parse some properties from the appearance string
-  double fontsize;
-  AnnotColor *fontcolor;
-  parseAppearanceString(appearanceString, fontsize, fontcolor);
+  DefaultAppearance da{appearanceString};
+
   // Default values
-  if (fontsize <= 0)
-    fontsize = 10;
-  if (fontcolor == nullptr)
-    fontcolor = new AnnotColor(0, 0, 0); // Black
+  if (da.getFontPtSize() <= 0)
+    da.setFontPtSize(10);
+  if (!da.getFontColor())
+    da.setFontColor(std::make_unique<AnnotColor>(0, 0, 0));
   if (!contents)
     contents = new GooString ();
 
@@ -2886,7 +2929,7 @@
   GBool doStroke = (borderWidth != 0);
   if (doFill || doStroke) {
     if (doStroke) {
-      appearBuilder.setDrawColor(fontcolor, gFalse); // Border color: same as font color
+      appearBuilder.setDrawColor(da.getFontColor(), gFalse); // Border color: same as font color
     }
     appearBuilder.appendf ("{0:.2f} {0:.2f} {1:.2f} {2:.2f} re\n", borderWidth/2, width-borderWidth, height-borderWidth);
     if (doFill) {
@@ -2906,9 +2949,9 @@
   GfxFont *font = createAnnotDrawFont(xref, fontResDict);
 
   // Set font state
-  appearBuilder.setDrawColor(fontcolor, gTrue);
-  appearBuilder.appendf ("BT 1 0 0 1 {0:.2f} {1:.2f} Tm\n", textmargin, height - textmargin - fontsize * font->getDescent());
-  appearBuilder.appendf ("/AnnotDrawFont {0:.2f} Tf\n", fontsize);
+  appearBuilder.setDrawColor(da.getFontColor(), gTrue);
+  appearBuilder.appendf ("BT 1 0 0 1 {0:.2f} {1:.2f} Tm\n", textmargin, height - textmargin - da.getFontPtSize() * font->getDescent());
+  appearBuilder.appendf ("/AnnotDrawFont {0:.2f} Tf\n", da.getFontPtSize());
 
   int i = 0;
   double xposPrev = 0;
@@ -2915,8 +2958,8 @@
   while (i < contents->getLength()) {
     GooString out;
     double linewidth, xpos;
-    layoutText(contents, &out, &i, font, &linewidth, textwidth/fontsize, nullptr, gFalse);
-    linewidth *= fontsize;
+    layoutText(contents, &out, &i, font, &linewidth, textwidth/da.getFontPtSize(), nullptr, gFalse);
+    linewidth *= da.getFontPtSize();
     switch (quadding) {
     case quaddingCentered:
       xpos = (textwidth - linewidth) / 2;
@@ -2928,7 +2971,7 @@
       xpos = 0;
       break;
     }
-    appearBuilder.appendf("{0:.2f} {1:.2f} Td\n", xpos - xposPrev, -fontsize);
+    appearBuilder.appendf("{0:.2f} {1:.2f} Td\n", xpos - xposPrev, -da.getFontPtSize());
     appearBuilder.writeString(out);
     appearBuilder.append("Tj\n");
     xposPrev = xpos;
@@ -2935,7 +2978,6 @@
   }
 
   font->decRefCnt();
-  delete fontcolor;
   appearBuilder.append ("ET Q\n");
 
   double bbox[4];
@@ -4883,19 +4925,19 @@
   const GooString *appearBuf = appearBuilder.buffer();
   // build the appearance stream dictionary
   Dict *appearDict = new Dict(xref);
-  appearDict->add(copyString("Length"), Object(appearBuf->getLength()));
-  appearDict->add(copyString("Subtype"), Object(objName, "Form"));
+  appearDict->add("Length", Object(appearBuf->getLength()));
+  appearDict->add("Subtype", Object(objName, "Form"));
   Array *bbox = new Array(xref);
   bbox->add(Object(0));
   bbox->add(Object(0));
   bbox->add(Object(rect->x2 - rect->x1));
   bbox->add(Object(rect->y2 - rect->y1));
-  appearDict->add(copyString("BBox"), Object(bbox));
+  appearDict->add("BBox", Object(bbox));
 
   // set the resource dictionary
   Object *resDict = form->getDefaultResourcesObj();
   if (resDict->isDict()) {
-    appearDict->add(copyString("Resources"), resDict->copy());
+    appearDict->add("Resources", resDict->copy());
   }
 
   // build the appearance stream
@@ -4934,7 +4976,7 @@
 
     // Write the AP dictionary
     obj1 = Object(new Dict(xref));
-    obj1.dictAdd(copyString("N"), Object(updatedAppearanceStream.num, updatedAppearanceStream.gen));
+    obj1.dictAdd("N", Object(updatedAppearanceStream.num, updatedAppearanceStream.gen));
 
     // Update our internal pointers to the appearance dictionary
     appearStreams = new AnnotAppearance(doc, &obj1);
@@ -4967,14 +5009,14 @@
     // We are forcing ZaDb but the font does not exist
     // so create a fake one
     Dict *fontDict = new Dict(gfx->getXRef());
-    fontDict->add(copyString("BaseFont"), Object(objName, "ZapfDingbats"));
-    fontDict->add(copyString("Subtype"), Object(objName, "Type1"));
+    fontDict->add("BaseFont", Object(objName, "ZapfDingbats"));
+    fontDict->add("Subtype", Object(objName, "Type1"));
 
     Dict *fontsDict = new Dict(gfx->getXRef());
-    fontsDict->add(copyString("ZaDb"), Object(fontDict));
+    fontsDict->add("ZaDb", Object(fontDict));
 
     Dict *dict = new Dict(gfx->getXRef());
-    dict->add(copyString("Font"), Object(fontsDict));
+    dict->add("Font", Object(fontsDict));
     gfx->pushResources(dict);
     delete dict;
   }

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Annot.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Annot.h	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Annot.h	2018-09-22 07:01:59 UTC (rev 48730)
@@ -27,6 +27,8 @@
 // Copyright (C) 2013 Thomas Freitag <Thomas.Freitag at alfa.de>
 // Copyright (C) 2013, 2017 Adrian Johnson <ajohnson at redneon.com>
 // Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. Work sponsored by the LiMux project of the city of Munich
+// Copyright (C) 2018 Dileep Sankhla <sankhla.dileep96 at gmail.com>
+// Copyright (C) 2018 Tobias Deiminger <haxtibal at posteo.de>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -40,6 +42,7 @@
 #pragma interface
 #endif
 
+#include <memory>
 #include "Object.h"
 
 class XRef;
@@ -348,6 +351,33 @@
 };
 
 //------------------------------------------------------------------------
+// DefaultAppearance
+//------------------------------------------------------------------------
+
+class DefaultAppearance {
+public:
+
+  DefaultAppearance(Object &&fontNameA, double fontPtSizeA, std::unique_ptr<AnnotColor> fontColorA);
+  DefaultAppearance(GooString *da);
+  void setFontName(Object &&fontNameA);
+  const Object &getFontName() const { return fontName; }
+  void setFontPtSize(double fontPtSizeA);
+  double getFontPtSize() const { return fontPtSize; }
+  void setFontColor(std::unique_ptr<AnnotColor> fontColorA);
+  const AnnotColor *getFontColor() const { return fontColor.get(); }
+  GooString *toAppearanceString() const;
+
+  DefaultAppearance(const DefaultAppearance &) = delete;
+  DefaultAppearance& operator=(const DefaultAppearance&) = delete;
+
+private:
+
+  Object fontName;
+  double fontPtSize;
+  std::unique_ptr<AnnotColor> fontColor;
+};
+
+//------------------------------------------------------------------------
 // AnnotIconFit
 //------------------------------------------------------------------------
 
@@ -511,6 +541,7 @@
 
   void setDrawColor(const AnnotColor *color, GBool fill);
   void setLineStyleForBorder(const AnnotBorder *border);
+  void setTextFont(const Object &fontName, double fontSize);
   void drawCircle(double cx, double cy, double r, GBool fill);
   void drawCircleTopLeft(double cx, double cy, double r);
   void drawCircleBottomRight(double cx, double cy, double r);
@@ -969,7 +1000,7 @@
     intentFreeTextTypeWriter  // FreeTextTypeWriter
   };
 
-  AnnotFreeText(PDFDoc *docA, PDFRectangle *rect, GooString *da);
+  AnnotFreeText(PDFDoc *docA, PDFRectangle *rect, const DefaultAppearance &da);
   AnnotFreeText(PDFDoc *docA, Object *dictObject, Object *obj);
   ~AnnotFreeText();
 
@@ -977,7 +1008,7 @@
   Object getAppearanceResDict() override;
   void setContents(GooString *new_content) override;
 
-  void setAppearanceString(GooString *new_string);
+  void setDefaultAppearance(const DefaultAppearance &da);
   void setQuadding(AnnotFreeTextQuadding new_quadding);
   void setStyleString(GooString *new_string);
   void setCalloutLine(AnnotCalloutLine *line);
@@ -984,7 +1015,7 @@
   void setIntent(AnnotFreeTextIntent new_intent);
 
   // getters
-  const GooString *getAppearanceString() const { return appearanceString; }
+  std::unique_ptr<DefaultAppearance> getDefaultAppearance() const;
   AnnotFreeTextQuadding getQuadding() const { return quadding; }
   // return rc
   const GooString *getStyleString() const { return styleString; }
@@ -997,7 +1028,6 @@
 protected:
 
   void initialize(PDFDoc *docA, Dict *dict);
-  static void parseAppearanceString(GooString *da, double &fontsize, AnnotColor* &fontcolor);
   void generateFreeTextAppearance();
 
   // required

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Array.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Array.cc	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Array.cc	2018-09-22 07:01:59 UTC (rev 48730)
@@ -18,6 +18,7 @@
 // Copyright (C) 2013 Thomas Freitag <Thomas.Freitag at alfa.de>
 // Copyright (C) 2013, 2017 Albert Astals Cid <aacid at kde.org>
 // Copyright (C) 2017 Adrian Johnson <ajohnson at redneon.com>
+// Copyright (C) 2018 Adam Reichold <adam.reichold at t-online.de>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -32,6 +33,7 @@
 
 #include <stdlib.h>
 #include <stddef.h>
+#include <cassert>
 #include "goo/gmem.h"
 #include "Object.h"
 #include "Array.h"
@@ -105,11 +107,8 @@
 void Array::remove(int i) {
   arrayLocker();
   if (i < 0 || i >= length) {
-#ifdef DEBUG_MEM
-    abort();
-#else
+    assert(i >= 0 && i < length);
     return;
-#endif
   }
   --length;
   memmove( static_cast<void*>(elems + i), elems + i + 1, sizeof(elems[0]) * (length - i) );
@@ -117,11 +116,7 @@
 
 Object Array::get(int i, int recursion) const {
   if (i < 0 || i >= length) {
-#ifdef DEBUG_MEM
-    abort();
-#else
     return Object(objNull);
-#endif
   }
   return elems[i].fetch(xref, recursion);
 }
@@ -128,11 +123,7 @@
 
 Object Array::getNF(int i) const {
   if (i < 0 || i >= length) {
-#ifdef DEBUG_MEM
-    abort();
-#else
     return Object(objNull);
-#endif
   }
   return elems[i].copy();
 }

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/CairoRescaleBox.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/CairoRescaleBox.cc	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/CairoRescaleBox.cc	2018-09-22 07:01:59 UTC (rev 48730)
@@ -32,6 +32,7 @@
 //
 // Copyright (C) 2012 Hib Eris <hib at hiberis.nl>
 // Copyright (C) 2012, 2017 Adrian Johnson <ajohnson at redneon.com>
+// Copyright (C) 2018 Adam Reichold <adam.reichold at t-online.de>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -281,10 +282,10 @@
   dest = (unsigned int *)cairo_image_surface_get_data (dest_surface);
   dst_stride = cairo_image_surface_get_stride (dest_surface);
 
-  scanline = (uint32_t*)gmallocn3 (orig_width, 1, sizeof(int));
+  scanline = (uint32_t*)gmallocn (orig_width, sizeof(int));
 
-  x_coverage = (int *)gmallocn3 (orig_width, 1, sizeof(int));
-  y_coverage = (int *)gmallocn3 (orig_height, 1, sizeof(int));
+  x_coverage = (int *)gmallocn (orig_width, sizeof(int));
+  y_coverage = (int *)gmallocn (orig_height, sizeof(int));
 
   /* we need to allocate enough room for ceil(src_height/dest_height)+1
      Example:

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Catalog.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Catalog.cc	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Catalog.cc	2018-09-22 07:01:59 UTC (rev 48730)
@@ -34,6 +34,7 @@
 // Copyright (C) 2015 Even Rouault <even.rouault at spatialys.com>
 // Copyright (C) 2016 Masamichi Hosoda <trueroad at trueroad.jp>
 // Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. Work sponsored by the LiMux project of the city of Munich
+// Copyright (C) 2018 Adam Reichold <adam.reichold at t-online.de>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -428,7 +429,7 @@
   return obj->dictGetLength();
 }
 
-char *Catalog::getDestsName(int i)
+const char *Catalog::getDestsName(int i)
 {
   Object *obj;
 

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Catalog.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Catalog.h	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Catalog.h	2018-09-22 07:01:59 UTC (rev 48730)
@@ -27,6 +27,7 @@
 // Copyright (C) 2013 José Aliste <jaliste at src.gnome.org>
 // Copyright (C) 2016 Masamichi Hosoda <trueroad at trueroad.jp>
 // Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. Work sponsored by the LiMux project of the city of Munich
+// Copyright (C) 2018 Adam Reichold <adam.reichold at t-online.de>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -163,7 +164,7 @@
   int numDests();
 
   // Get the i'th named destination name in name-dict
-  char *getDestsName(int i);
+  const char *getDestsName(int i);
 
   // Get the i'th named destination link destination in name-dict
   LinkDest *getDestsDest(int i);

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Dict.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Dict.cc	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Dict.cc	2018-09-22 07:01:59 UTC (rev 48730)
@@ -22,6 +22,7 @@
 // Copyright (C) 2013 Thomas Freitag <Thomas.Freitag at alfa.de>
 // Copyright (C) 2014 Scott West <scott.gregory.west at gmail.com>
 // Copyright (C) 2017 Adrian Johnson <ajohnson at redneon.com>
+// Copyright (C) 2018 Adam Reichold <adam.reichold at t-online.de>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -35,10 +36,7 @@
 #endif
 
 #include <algorithm>
-#include <stddef.h>
-#include <string.h>
-#include "goo/gmem.h"
-#include "Object.h"
+
 #include "XRef.h"
 #include "Dict.h"
 
@@ -51,67 +49,52 @@
 // Dict
 //------------------------------------------------------------------------
 
-static const int SORT_LENGTH_LOWER_LIMIT = 32;
+constexpr int SORT_LENGTH_LOWER_LIMIT = 32;
 
-static inline bool cmpDictEntries(const DictEntry &e1, const DictEntry &e2)
-{
-  return strcmp(e1.key, e2.key) < 0;
-}
-
-static int binarySearch(const char *key, DictEntry *entries, int length)
-{
-  int first = 0;
-  int end = length - 1;
-  while (first <= end) {
-    const int middle = (first + end) / 2;
-    const int res = strcmp(key, entries[middle].key);
-    if (res == 0) {
-      return middle;
-    } else if (res < 0) {
-      end = middle - 1;
-    } else {
-      first = middle + 1;
-    }
+struct Dict::CmpDictEntry {
+  bool operator()(const DictEntry &lhs, const DictEntry &rhs) const {
+    return lhs.first < rhs.first;
   }
-  return -1;
-}
+  bool operator()(const DictEntry &lhs, const char *rhs) const {
+    return lhs.first < rhs;
+  }
+  bool operator()(const char *lhs, const DictEntry &rhs) const {
+    return lhs < rhs.first;
+  }
+};
 
 Dict::Dict(XRef *xrefA) {
   xref = xrefA;
-  entries = nullptr;
-  size = length = 0;
   ref = 1;
-  sorted = gFalse;
 #ifdef MULTITHREADED
   gInitMutex(&mutex);
 #endif
+
+  sorted = false;
 }
 
-Dict::Dict(Dict* dictA) {
+Dict::Dict(const Dict* dictA) {
   xref = dictA->xref;
-  size = length = dictA->length;
   ref = 1;
 #ifdef MULTITHREADED
   gInitMutex(&mutex);
 #endif
 
-  sorted = dictA->sorted;
-  entries = (DictEntry *)gmallocn(size, sizeof(DictEntry));
-  for (int i=0; i<length; i++) {
-    entries[i].key = copyString(dictA->entries[i].key);
-    entries[i].val.initNullAfterMalloc();
-    entries[i].val = dictA->entries[i].val.copy();
+  entries.reserve(dictA->entries.size());
+  for (const auto& entry : dictA->entries) {
+    entries.emplace_back(entry.first, entry.second.copy());
   }
+
+  sorted = dictA->sorted.load();
 }
 
-Dict *Dict::copy(XRef *xrefA) {
+Dict *Dict::copy(XRef *xrefA) const {
   dictLocker();
   Dict *dictA = new Dict(this);
   dictA->xref = xrefA;
-  for (int i=0; i<length; i++) {
-    if (dictA->entries[i].val.getType() == objDict) {
-       Dict *copy = dictA->entries[i].val.getDict()->copy(xrefA);
-       dictA->entries[i].val = Object(copy);
+  for (auto &entry : dictA->entries) {
+    if (entry.second.getType() == objDict) {
+      entry.second = Object(entry.second.getDict()->copy(xrefA));
     }
   }
   return dictA;
@@ -118,180 +101,112 @@
 }
 
 Dict::~Dict() {
-  int i;
-
-  for (i = 0; i < length; ++i) {
-    gfree(entries[i].key);
-    entries[i].val.free();
-  }
-  gfree(entries);
 #ifdef MULTITHREADED
   gDestroyMutex(&mutex);
 #endif
 }
 
-int Dict::incRef() {
+void Dict::add(const char *key, Object &&val) {
   dictLocker();
-  ++ref;
-  return ref;
+  entries.emplace_back(key, std::move(val));
+  sorted = false;
 }
 
-int Dict::decRef() {
-  dictLocker();
-  --ref;
-  return ref;
-}
+inline const Dict::DictEntry *Dict::find(const char *key) const {
+  if (entries.size() >= SORT_LENGTH_LOWER_LIMIT) {
+    if (!sorted) {
+      dictLocker();
+      if (!sorted) {
+	auto& entries = const_cast<std::vector<DictEntry>&>(this->entries);
+	auto& sorted = const_cast<std::atomic_bool&>(this->sorted);
 
-void Dict::add(char *key, Object &&val) {
-  dictLocker();
-  if (sorted) {
-    // We use add on very few occasions so
-    // virtually this will never be hit
-    sorted = gFalse;
-  }
-
-  if (length == size) {
-    if (length == 0) {
-      size = 8;
-    } else {
-      size *= 2;
+	std::sort(entries.begin(), entries.end(), CmpDictEntry{});
+	sorted = true;
+      }
     }
-    entries = (DictEntry *)greallocn(entries, size, sizeof(DictEntry));
   }
-  entries[length].key = key;
-  entries[length].val.initNullAfterMalloc();
-  entries[length].val = std::move(val);
-  ++length;
-}
 
-inline DictEntry *Dict::find(const char *key) const {
-  if (!sorted && length >= SORT_LENGTH_LOWER_LIMIT)
-  {
-      dictLocker();
-      sorted = gTrue;
-      std::sort(entries, entries+length, cmpDictEntries);
-  }
-
   if (sorted) {
-    const int pos = binarySearch(key, entries, length);
-    if (pos != -1) {
-      return &entries[pos];
+    const auto pos = std::lower_bound(entries.begin(), entries.end(), key, CmpDictEntry{});
+    if (pos != entries.end() && pos->first == key) {
+      return &*pos;
     }
   } else {
-    int i;
-
-    for (i = length - 1; i >=0; --i) {
-      if (!strcmp(key, entries[i].key))
-        return &entries[i];
+    const auto pos = std::find_if(entries.rbegin(), entries.rend(), [key](const DictEntry& entry) {
+      return entry.first == key;
+    });
+    if (pos != entries.rend()) {
+      return &*pos;
     }
   }
   return nullptr;
 }
 
-GBool Dict::hasKey(const char *key) const {
-  return find(key) != nullptr;
+inline Dict::DictEntry *Dict::find(const char *key) {
+  return const_cast<DictEntry *>(const_cast<const Dict *>(this)->find(key));
 }
 
 void Dict::remove(const char *key) {
   dictLocker();
-  if (sorted) {
-    const int pos = binarySearch(key, entries, length);
-    if (pos != -1) {
-      length -= 1;
-      gfree(entries[pos].key);
-      entries[pos].val.free();
-      if (pos != length) {
-        memmove(static_cast<void*>(&entries[pos]), &entries[pos + 1], (length - pos) * sizeof(DictEntry));
-      }
+  if (auto *entry = find(key)) {
+    if (sorted) {
+      const auto index = entry - &entries.front();
+      entries.erase(entries.begin() + index);
+    } else {
+      swap(*entry, entries.back());
+      entries.pop_back();
     }
-  } else {
-    int i; 
-    bool found = false;
-    if(length == 0) {
-      return;
-    }
-
-    for(i=0; i<length; i++) {
-      if (!strcmp(key, entries[i].key)) {
-        found = true;
-        break;
-      }
-    }
-    if(!found) {
-      return;
-    }
-    //replace the deleted entry with the last entry
-    gfree(entries[i].key);
-    entries[i].val.free();
-    length -= 1;
-    if (i!=length) {
-      //don't copy the last entry if it is deleted
-      entries[i].key = entries[length].key;
-      entries[i].val = std::move(entries[length].val);
-    }
   }
 }
 
 void Dict::set(const char *key, Object &&val) {
-  DictEntry *e;
   if (val.isNull()) {
     remove(key);
     return;
   }
-  e = find (key);
-  if (e) {
-    dictLocker();
-    e->val = std::move(val);
+  dictLocker();
+  if (auto *entry = find(key)) {
+    entry->second = std::move(val);
   } else {
-    add (copyString(key), std::move(val));
+    add(key, std::move(val));
   }
 }
 
 
 GBool Dict::is(const char *type) const {
-  DictEntry *e;
-
-  return (e = find("Type")) && e->val.isName(type);
+  if (const auto *entry = find("Type")) {
+    return entry->second.isName(type);
+  }
+  return gFalse;
 }
 
 Object Dict::lookup(const char *key, int recursion) const {
-  DictEntry *e;
-
-  return (e = find(key)) ? e->val.fetch(xref, recursion) : Object(objNull);
+  if (const auto *entry = find(key)) {
+    return entry->second.fetch(xref, recursion);
+  }
+  return Object(objNull);
 }
 
 Object Dict::lookupNF(const char *key) const {
-  DictEntry *e;
-
-  return (e = find(key)) ? e->val.copy() : Object(objNull);
+  if (const auto *entry = find(key)) {
+    return entry->second.copy();
+  }
+  return Object(objNull);
 }
 
 GBool Dict::lookupInt(const char *key, const char *alt_key, int *value) const
 {
-  GBool success = gFalse;
-  Object obj1 = lookup ((char *) key);
-  if (obj1.isNull () && alt_key != nullptr) {
-    obj1.free ();
-    obj1 = lookup ((char *) alt_key);
+  auto obj1 = lookup(key);
+  if (obj1.isNull() && alt_key != nullptr) {
+    obj1 = lookup(alt_key);
   }
-  if (obj1.isInt ()) {
-    *value = obj1.getInt ();
-    success = gTrue;
+  if (obj1.isInt()) {
+    *value = obj1.getInt();
+    return gTrue;
   }
-
-  obj1.free ();
-
-  return success;
+  return gFalse;
 }
 
-char *Dict::getKey(int i) const {
-  return entries[i].key;
+GBool Dict::hasKey(const char *key) const {
+  return find(key) != nullptr;
 }
-
-Object Dict::getVal(int i) const {
-  return entries[i].val.fetch(xref);
-}
-
-Object Dict::getValNF(int i) const {
-  return entries[i].val.copy();
-}

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Dict.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Dict.h	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Dict.h	2018-09-22 07:01:59 UTC (rev 48730)
@@ -20,6 +20,7 @@
 // Copyright (C) 2010 Paweł Wiejacha <pawel.wiejacha at gmail.com>
 // Copyright (C) 2013 Thomas Freitag <Thomas.Freitag at alfa.de>
 // Copyright (C) 2017 Adrian Johnson <ajohnson at redneon.com>
+// Copyright (C) 2018 Adam Reichold <adam.reichold at t-online.de>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -33,6 +34,11 @@
 #pragma interface
 #endif
 
+#include <atomic>
+#include <string>
+#include <vector>
+#include <utility>
+
 #include "poppler-config.h"
 #include "Object.h"
 #include "goo/GooMutex.h"
@@ -41,18 +47,13 @@
 // Dict
 //------------------------------------------------------------------------
 
-struct DictEntry {
-  char *key;
-  Object val;
-};
-
 class Dict {
 public:
 
   // Constructor.
   Dict(XRef *xrefA);
-  Dict(Dict* dictA);
-  Dict *copy(XRef *xrefA);
+  Dict(const Dict *dictA);
+  Dict *copy(XRef *xrefA) const;
 
   // Destructor.
   ~Dict();
@@ -61,12 +62,15 @@
   Dict& operator=(const Dict &) = delete;
 
   // Get number of entries.
-  int getLength() const { return length; }
+  int getLength() const { return static_cast<int>(entries.size()); }
 
-  // Add an entry.  NB: does not copy key.
+  // Add an entry. (Copies key into Dict.)
   // val becomes a dead object after the call
-  void add(char *key, Object &&val);
+  void add(const char *key, Object &&val);
 
+  // Add an entry. (Takes ownership of key.)
+  void add(char *key, Object &&val) = delete;
+
   // Update the value of an existing entry, otherwise create it
   // val becomes a dead object after the call
   void set(const char *key, Object &&val);
@@ -83,9 +87,9 @@
   GBool lookupInt(const char *key, const char *alt_key, int *value) const;
 
   // Iterative accessors.
-  char *getKey(int i) const;
-  Object getVal(int i) const;
-  Object getValNF(int i) const;
+  const char *getKey(int i) const { return entries[i].first.c_str(); }
+  Object getVal(int i) const { return entries[i].second.fetch(xref); }
+  Object getValNF(int i) const { return entries[i].second.copy(); }
 
   // Set the xref pointer.  This is only used in one special case: the
   // trailer dictionary, which is read before the xref table is
@@ -100,20 +104,22 @@
   friend class Object; // for incRef/decRef
 
   // Reference counting.
-  int incRef();
-  int decRef();
+  int incRef() { return ++ref; }
+  int decRef() { return --ref; }
 
-  mutable GBool sorted;
+  using DictEntry = std::pair<std::string, Object>;
+  struct CmpDictEntry;
+
+  std::atomic_bool sorted;
   XRef *xref;			// the xref table for this PDF file
-  DictEntry *entries;		// array of entries
-  int size;			// size of <entries> array
-  int length;			// number of entries in dictionary
-  int ref;			// reference count
+  std::vector<DictEntry> entries;
+  std::atomic_int ref;			// reference count
 #ifdef MULTITHREADED
   mutable GooMutex mutex;
 #endif
 
-  DictEntry *find(const char *key) const;
+  const DictEntry *find(const char *key) const;
+  DictEntry *find(const char *key);
 };
 
 #endif

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Form.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Form.cc	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Form.cc	2018-09-22 07:01:59 UTC (rev 48730)
@@ -5,7 +5,7 @@
 // This file is licensed under the GPLv2 or later
 //
 // Copyright 2006-2008 Julien Rebetez <julienr at svn.gnome.org>
-// Copyright 2007-2012, 2015-2017 Albert Astals Cid <aacid at kde.org>
+// Copyright 2007-2012, 2015-2018 Albert Astals Cid <aacid at kde.org>
 // Copyright 2007-2008, 2011 Carlos Garcia Campos <carlosgc at gnome.org>
 // Copyright 2007, 2013, 2016 Adrian Johnson <ajohnson at redneon.com>
 // Copyright 2007 Iñigo Martínez <inigomartinez at gmail.com>
@@ -22,6 +22,7 @@
 // Copyright 2018 Andre Heinecke <aheinecke at intevation.de>
 // Copyright 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. Work sponsored by the LiMux project of the city of Munich
 // Copyright 2018 Chinmoy Ranjan Pradhan <chinmoyrp65 at protonmail.com>
+// Copyright 2018 Adam Reichold <adam.reichold at t-online.de>
 //
 //========================================================================
 
@@ -193,7 +194,7 @@
     Object obj2 = obj1.dictLookup("N");
     if (obj2.isDict()) {
       for (int i = 0; i < obj2.dictGetLength(); i++) {
-        char *key = obj2.dictGetKey(i);
+        const char *key = obj2.dictGetKey(i);
         if (strcmp (key, "Off") != 0) {
           onStr = new GooString (key);
           break;
@@ -1637,12 +1638,12 @@
 
   const Object location_obj = sig_dict.dictLookup("Location");
   if (location_obj.isString()) {
-    signature_info->setLocation(location_obj.getString()->copy()->getCString());
+    signature_info->setLocation(location_obj.getString()->getCString());
   }
 
   const Object reason_obj = sig_dict.dictLookup("Reason");
   if (reason_obj.isString()) {
-    signature_info->setReason(reason_obj.getString()->copy()->getCString());
+    signature_info->setReason(reason_obj.getString()->getCString());
   }
 
   // retrieve SigningTime

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Function.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Function.cc	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Function.cc	2018-09-22 07:01:59 UTC (rev 48730)
@@ -362,7 +362,11 @@
   nSamples = n;
   for (i = 0; i < m; ++i)
     nSamples *= sampleSize[i];
-  samples = (double *)gmallocn(nSamples, sizeof(double));
+  samples = (double *)gmallocn_checkoverflow(nSamples, sizeof(double));
+  if (!samples) {
+    error(errSyntaxError, -1, "Function has invalid number of samples");
+    return;
+  }
   buf = 0;
   bits = 0;
   bitMask = (1 << sampleBits) - 1;

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Gfx.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Gfx.cc	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Gfx.cc	2018-09-22 07:01:59 UTC (rev 48730)
@@ -40,6 +40,7 @@
 // Copyright (C) 2014 Jason Crain <jason at aquaticape.us>
 // Copyright (C) 2017, 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. Work sponsored by the LiMux project of the city of Munich
 // Copyright (C) 2018 Adam Reichold <adam.reichold at t-online.de>
+// Copyright (C) 2018 Denis Onishchenko <denis.onischenko at gmail.com>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -3884,8 +3885,8 @@
   double x, y, dx, dy, dx2, dy2, curX, curY, tdx, tdy, ddx, ddy;
   double originX, originY, tOriginX, tOriginY;
   double x0, y0, x1, y1;
-  double oldCTM[6], newCTM[6];
-  double *mat;
+  double tmp[4], newCTM[6];
+  double *oldCTM, *mat;
   Dict *resDict;
   Parser *oldParser;
   GfxState *savedState;
@@ -3892,7 +3893,7 @@
   const char *p;
   int render;
   GBool patternFill;
-  int len, n, uLen, nChars, nSpaces, i;
+  int len, n, uLen, nChars, nSpaces;
 
   font = state->getFont();
   wMode = font->getWMode();
@@ -3925,26 +3926,23 @@
 
   // handle a Type 3 char
   if (font->getType() == fontType3 && out->interpretType3Chars()) {
-    mat = state->getCTM();
-    for (i = 0; i < 6; ++i) {
-      oldCTM[i] = mat[i];
-    }
+    oldCTM = state->getCTM();
     mat = state->getTextMat();
-    newCTM[0] = mat[0] * oldCTM[0] + mat[1] * oldCTM[2];
-    newCTM[1] = mat[0] * oldCTM[1] + mat[1] * oldCTM[3];
-    newCTM[2] = mat[2] * oldCTM[0] + mat[3] * oldCTM[2];
-    newCTM[3] = mat[2] * oldCTM[1] + mat[3] * oldCTM[3];
+    tmp[0] = mat[0] * oldCTM[0] + mat[1] * oldCTM[2];
+    tmp[1] = mat[0] * oldCTM[1] + mat[1] * oldCTM[3];
+    tmp[2] = mat[2] * oldCTM[0] + mat[3] * oldCTM[2];
+    tmp[3] = mat[2] * oldCTM[1] + mat[3] * oldCTM[3];
     mat = font->getFontMatrix();
-    newCTM[0] = mat[0] * newCTM[0] + mat[1] * newCTM[2];
-    newCTM[1] = mat[0] * newCTM[1] + mat[1] * newCTM[3];
-    newCTM[2] = mat[2] * newCTM[0] + mat[3] * newCTM[2];
-    newCTM[3] = mat[2] * newCTM[1] + mat[3] * newCTM[3];
+    newCTM[0] = mat[0] * tmp[0] + mat[1] * tmp[2];
+    newCTM[1] = mat[0] * tmp[1] + mat[1] * tmp[3];
+    newCTM[2] = mat[2] * tmp[0] + mat[3] * tmp[2];
+    newCTM[3] = mat[2] * tmp[1] + mat[3] * tmp[3];
     newCTM[0] *= state->getFontSize();
     newCTM[1] *= state->getFontSize();
     newCTM[2] *= state->getFontSize();
     newCTM[3] *= state->getFontSize();
     newCTM[0] *= state->getHorizScaling();
-    newCTM[2] *= state->getHorizScaling();
+    newCTM[1] *= state->getHorizScaling();
     curX = state->getCurX();
     curY = state->getCurY();
     oldParser = parser;
@@ -4214,7 +4212,7 @@
   GBool invert;
   GfxColorSpace *colorSpace, *maskColorSpace;
   GBool haveColorKeyMask, haveExplicitMask, haveSoftMask;
-  int maskColors[2*gfxColorMaxComps];
+  int maskColors[2*gfxColorMaxComps] = {};
   int maskWidth, maskHeight;
   GBool maskInvert;
   GBool maskInterpolate;
@@ -4912,7 +4910,6 @@
 }
 
 Stream *Gfx::buildImageStream() {
-  char *key;
   Stream *str;
 
   // build dictionary
@@ -4922,13 +4919,11 @@
     if (!obj.isName()) {
       error(errSyntaxError, getPos(), "Inline image dictionary key must be a name object");
     } else {
-      key = copyString(obj.getName());
-      obj = parser->getObj();
-      if (obj.isEOF() || obj.isError()) {
-	gfree(key);
+      auto val = parser->getObj();
+      if (val.isEOF() || val.isError()) {
 	break;
       }
-      dict.dictAdd(key, std::move(obj));
+      dict.dictAdd(obj.getName(), std::move(val));
     }
     obj = parser->getObj();
   }

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/GfxFont.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/GfxFont.cc	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/GfxFont.cc	2018-09-22 07:01:59 UTC (rev 48730)
@@ -33,6 +33,7 @@
 // Copyright (C) 2013-2016, 2018 Jason Crain <jason at aquaticape.us>
 // Copyright (C) 2014 Olly Betts <olly at survex.com>
 // Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. Work sponsored by the LiMux project of the city of Munich
+// Copyright (C) 2018 Adam Reichold <adam.reichold at t-online.de>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -1439,7 +1440,7 @@
       return 0;	// .notdef or similar
     } else if (var_part != nullptr) {
       // parse names of the form 7.oldstyle, P.swash, s.sc, etc.
-      char *main_part = gstrndup(charName, var_part - charName);
+      char *main_part = copyString(charName, var_part - charName);
       GBool namesRecurse = gTrue, variantsRecurse = gFalse;
       int n = parseCharName(main_part, uBuf, uLen, namesRecurse, ligatures,
 			    numeric, hex, variantsRecurse);

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/GfxState.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/GfxState.cc	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/GfxState.cc	2018-09-22 07:01:59 UTC (rev 48730)
@@ -31,6 +31,8 @@
 // Copyright (C) 2016 Marek Kasik <mkasik at redhat.com>
 // Copyright (C) 2017 Oliver Sander <oliver.sander at tu-dresden.de>
 // Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. Work sponsored by the LiMux project of the city of Munich
+// Copyright (C) 2018 Volker Krause <vkrause at kde.org>
+// Copyright (C) 2018 Adam Reichold <adam.reichold at t-online.de>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -4006,7 +4008,9 @@
     tMax = t0 + sMin * (t1 - t0);
   }
 
-  cacheBounds = (double *)gmallocn(maxSize, sizeof(double) * (nComps + 2));
+  cacheBounds = (double *)gmallocn_checkoverflow(maxSize, sizeof(double) * (nComps + 2));
+  if (unlikely(!cacheBounds))
+    return;
   cacheCoeff = cacheBounds + maxSize;
   cacheValues = cacheCoeff + maxSize;
 
@@ -5224,7 +5228,7 @@
   nPatchesA = 0;
   patchesA = nullptr;
   patchesSize = 0;
-  std::unique_ptr<GfxShadingBitBuf> bitBuf(new GfxShadingBitBuf(str));
+  auto bitBuf = std::make_unique<GfxShadingBitBuf>(str);
   while (1) {
     if (!bitBuf->getBits(flagBits, &flag)) {
       break;
@@ -5868,24 +5872,30 @@
   colorSpace2 = nullptr;
   for (k = 0; k < gfxColorMaxComps; ++k) {
     lookup[k] = nullptr;
+    lookup2[k] = nullptr;
   }
+  byte_lookup = nullptr;
   n = 1 << bits;
+  for (k = 0; k < nComps; ++k) {
+    lookup[k] = (GfxColorComp *)gmallocn(n, sizeof(GfxColorComp));
+    memcpy(lookup[k], colorMap->lookup[k], n * sizeof(GfxColorComp));
+  }
   if (colorSpace->getMode() == csIndexed) {
     colorSpace2 = ((GfxIndexedColorSpace *)colorSpace)->getBase();
     for (k = 0; k < nComps2; ++k) {
-      lookup[k] = (GfxColorComp *)gmallocn(n, sizeof(GfxColorComp));
-      memcpy(lookup[k], colorMap->lookup[k], n * sizeof(GfxColorComp));
+      lookup2[k] = (GfxColorComp *)gmallocn(n, sizeof(GfxColorComp));
+      memcpy(lookup2[k], colorMap->lookup2[k], n * sizeof(GfxColorComp));
     }
   } else if (colorSpace->getMode() == csSeparation) {
     colorSpace2 = ((GfxSeparationColorSpace *)colorSpace)->getAlt();
     for (k = 0; k < nComps2; ++k) {
-      lookup[k] = (GfxColorComp *)gmallocn(n, sizeof(GfxColorComp));
-      memcpy(lookup[k], colorMap->lookup[k], n * sizeof(GfxColorComp));
+      lookup2[k] = (GfxColorComp *)gmallocn(n, sizeof(GfxColorComp));
+      memcpy(lookup2[k], colorMap->lookup2[k], n * sizeof(GfxColorComp));
     }
   } else {
     for (k = 0; k < nComps; ++k) {
-      lookup[k] = (GfxColorComp *)gmallocn(n, sizeof(GfxColorComp));
-      memcpy(lookup[k], colorMap->lookup[k], n * sizeof(GfxColorComp));
+      lookup2[k] = (GfxColorComp *)gmallocn(n, sizeof(GfxColorComp));
+      memcpy(lookup2[k], colorMap->lookup2[k], n * sizeof(GfxColorComp));
     }
   }
   if (colorMap->byte_lookup) {

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/GlobalParams.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/GlobalParams.cc	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/GlobalParams.cc	2018-09-22 07:01:59 UTC (rev 48730)
@@ -68,6 +68,7 @@
 #include "goo/GooString.h"
 #include "goo/GooList.h"
 #include "goo/gfile.h"
+#include "goo/gdir.h"
 #include "Error.h"
 #include "NameToCharCode.h"
 #include "CharCodeToUnicode.h"

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/JBIG2Stream.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/JBIG2Stream.cc	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/JBIG2Stream.cc	2018-09-22 07:01:59 UTC (rev 48730)
@@ -23,6 +23,7 @@
 // Copyright (C) 2013 Adrian Johnson <ajohnson at redneon.com>
 // Copyright (C) 2013, 2014 Fabio D'Urso <fabiodurso at hotmail.it>
 // Copyright (C) 2015 Suzuki Toshiya <mpsuzuki at hiroshima-u.ac.jp>
+// Copyright (C) 2018 Adam Reichold <adam.reichold at t-online.de>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -2966,17 +2967,19 @@
   if (mmr) {
 
     mmrDecoder->reset();
-    if (w > INT_MAX - 2) {
+    // 0 <= codingLine[0] < codingLine[1] < ... < codingLine[n] = w
+    // ---> max codingLine size = w + 1
+    // refLine has one extra guard entry at the end
+    // ---> max refLine size = w + 2
+    codingLine = (int *)gmallocn_checkoverflow(w + 1, sizeof(int));
+    refLine = (int *)gmallocn_checkoverflow(w + 2, sizeof(int));
+
+    if (unlikely(!codingLine || !refLine)) {
       error(errSyntaxError, curStr->getPos(), "Bad width in JBIG2 generic bitmap");
       delete bitmap;
       return nullptr;
     }
-    // 0 <= codingLine[0] < codingLine[1] < ... < codingLine[n] = w
-    // ---> max codingLine size = w + 1
-    // refLine has one extra guard entry at the end
-    // ---> max refLine size = w + 2
-    codingLine = (int *)gmallocn(w + 1, sizeof(int));
-    refLine = (int *)gmallocn(w + 2, sizeof(int));
+
     memset(refLine, 0, (w + 2) * sizeof(int));
     for (i = 0; i < w + 1; ++i) codingLine[i] = w;
 
@@ -4085,15 +4088,20 @@
 
   huffDecoder->reset();
   huffTabSize = 8;
-  huffTab = (JBIG2HuffmanTable *)
-                gmallocn(huffTabSize, sizeof(JBIG2HuffmanTable));
+  huffTab = (JBIG2HuffmanTable *)gmallocn_checkoverflow(huffTabSize, sizeof(JBIG2HuffmanTable));
+  if (unlikely(!huffTab)) {
+    goto oomError;
+  }
+
   i = 0;
   val = lowVal;
   while (val < highVal) {
     if (i == huffTabSize) {
       huffTabSize *= 2;
-      huffTab = (JBIG2HuffmanTable *)
-	            greallocn(huffTab, huffTabSize, sizeof(JBIG2HuffmanTable));
+      huffTab = (JBIG2HuffmanTable *)greallocn_checkoverflow(huffTab, huffTabSize, sizeof(JBIG2HuffmanTable));
+      if (unlikely(!huffTab)) {
+	goto oomError;
+      }
     }
     huffTab[i].val = val;
     huffTab[i].prefixLen = huffDecoder->readBits(prefixBits);
@@ -4103,8 +4111,10 @@
   }
   if (i + oob + 3 > huffTabSize) {
     huffTabSize = i + oob + 3;
-    huffTab = (JBIG2HuffmanTable *)
-                  greallocn(huffTab, huffTabSize, sizeof(JBIG2HuffmanTable));
+    huffTab = (JBIG2HuffmanTable *)greallocn_checkoverflow(huffTab, huffTabSize, sizeof(JBIG2HuffmanTable));
+    if (unlikely(!huffTab)) {
+      goto oomError;
+    }
   }
   huffTab[i].val = lowVal - 1;
   huffTab[i].prefixLen = huffDecoder->readBits(prefixBits);
@@ -4132,6 +4142,8 @@
 
  eofError:
   error(errSyntaxError, curStr->getPos(), "Unexpected EOF in JBIG2 stream");
+ oomError:
+  error(errInternal, curStr->getPos(), "Failed allocation when processing JBIG2 stream");
 }
 
 void JBIG2Stream::readExtensionSeg(Guint length) {

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Link.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Link.cc	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Link.cc	2018-09-22 07:01:59 UTC (rev 48730)
@@ -56,7 +56,8 @@
 }
 
 LinkAction::~LinkAction() {
-  delete nextActionList;
+  if (nextActionList)
+    deleteGooList(nextActionList, LinkAction);
 }
 
 LinkAction *LinkAction::parseDest(const Object *obj) {

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Object.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Object.cc	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Object.cc	2018-09-22 07:01:59 UTC (rev 48730)
@@ -15,6 +15,7 @@
 //
 // Copyright (C) 2008, 2010, 2012, 2017 Albert Astals Cid <aacid at kde.org>
 // Copyright (C) 2013 Adrian Johnson <ajohnson at redneon.com>
+// Copyright (C) 2018 Adam Reichold <adam.reichold at t-online.de>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -58,11 +59,6 @@
   "dead"
 };
 
-#ifdef DEBUG_MEM
-int Object::numAlloc[numObjTypes] =
-  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-#endif
-
 Object::Object(Object&& other)
 {
   type = other.type;
@@ -95,6 +91,7 @@
     obj.string = string->copy();
     break;
   case objName:
+  case objCmd:
     obj.cString = copyString(cString);
     break;
   case objArray:
@@ -106,15 +103,9 @@
   case objStream:
     stream->incRef();
     break;
-  case objCmd:
-    obj.cString = copyString(cString);
-    break;
   default:
     break;
   }
-#ifdef DEBUG_MEM
-  ++numAlloc[type];
-#endif
   return obj;
 }
 
@@ -131,6 +122,7 @@
     delete string;
     break;
   case objName:
+  case objCmd:
     gfree(cString);
     break;
   case objArray:
@@ -148,15 +140,9 @@
       delete stream;
     }
     break;
-  case objCmd:
-    gfree(cString);
-    break;
   default:
     break;
   }
-#ifdef DEBUG_MEM
-  --numAlloc[type];
-#endif
   type = objNone;
 }
 
@@ -234,23 +220,3 @@
     break;
   }
 }
-
-void Object::memCheck(FILE *f) {
-#ifdef DEBUG_MEM
-  int i;
-  int t;
-
-  t = 0;
-  for (i = 0; i < numObjTypes; ++i)
-    t += numAlloc[i];
-  if (t > 0) {
-    fprintf(f, "Allocated objects:\n");
-    for (i = 0; i < numObjTypes; ++i) {
-      if (numAlloc[i] > 0)
-	fprintf(f, "  %-20s: %6d\n", objTypeNames[i], numAlloc[i]);
-    }
-  }
-#else
-  (void)f;
-#endif
-}

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Object.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Object.h	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Object.h	2018-09-22 07:01:59 UTC (rev 48730)
@@ -15,7 +15,7 @@
 //
 // Copyright (C) 2007 Julien Rebetez <julienr at svn.gnome.org>
 // Copyright (C) 2008 Kees Cook <kees at outflux.net>
-// Copyright (C) 2008, 2010, 2017 Albert Astals Cid <aacid at kde.org>
+// Copyright (C) 2008, 2010, 2017, 2018 Albert Astals Cid <aacid at kde.org>
 // Copyright (C) 2009 Jakub Wilk <jwilk at jwilk.net>
 // Copyright (C) 2012 Fabio D'Urso <fabiodurso at hotmail.it>
 // Copyright (C) 2013 Thomas Freitag <Thomas.Freitag at alfa.de>
@@ -23,6 +23,7 @@
 // Copyright (C) 2013 Adrian Perez de Castro <aperez at igalia.com>
 // Copyright (C) 2016 Jakub Alba <jakubalba at gmail.com>
 // Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. Work sponsored by the LiMux project of the city of Munich
+// Copyright (C) 2018 Adam Reichold <adam.reichold at t-online.de>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -36,6 +37,7 @@
 #pragma interface
 #endif
 
+#include <cassert>
 #include <set>
 #include <stdio.h>
 #include <string.h>
@@ -87,14 +89,33 @@
   int gen;			// generation number
 };
 
-struct RefCompare {
-  bool operator() (const Ref& lhs, const Ref& rhs) const {
-    if (lhs.num != rhs.num)
-      return lhs.num < rhs.num;
-    return lhs.gen < rhs.gen;
-  }
+inline bool operator== (const Ref& lhs, const Ref& rhs) noexcept {
+  return lhs.num == rhs.num && lhs.gen == rhs.gen;
+}
+
+inline bool operator< (const Ref& lhs, const Ref& rhs) noexcept {
+  if (lhs.num != rhs.num)
+    return lhs.num < rhs.num;
+  return lhs.gen < rhs.gen;
+}
+
+namespace std
+{
+
+template<>
+struct hash<Ref>
+{
+    using argument_type = Ref;
+    using result_type = size_t;
+
+    result_type operator() (const argument_type &ref) const noexcept
+    {
+	return std::hash<int>{}(ref.num) ^ (std::hash<int>{}(ref.gen) << 1);
+    }
 };
 
+}
+
 //------------------------------------------------------------------------
 // object types
 //------------------------------------------------------------------------
@@ -131,17 +152,8 @@
 // Object
 //------------------------------------------------------------------------
 
-#ifdef DEBUG_MEM
-#define initObj(t) free(); zeroUnion(); ++numAlloc[type = t]
-#else
 #define initObj(t) free(); zeroUnion(); type = t
-#endif
-
-#ifdef DEBUG_MEM
-#define constructObj(t) ++numAlloc[type = t]
-#else
 #define constructObj(t) type = t
-#endif
 
 class Object {
 public:
@@ -162,17 +174,17 @@
   explicit Object(double realA)
     { constructObj(objReal); real = realA; }
   explicit Object(GooString *stringA)
-    { constructObj(objString); string = stringA; }
+    { assert(stringA); constructObj(objString); string = stringA; }
   Object(ObjType typeA, const char *stringA)
-    { constructObj(typeA); cString = copyString(stringA); }
+    { assert(typeA == objName || typeA == objCmd); assert(stringA); constructObj(typeA); cString = copyString(stringA); }
   explicit Object(long long int64gA)
     { constructObj(objInt64); int64g = int64gA; }
   explicit Object(Array *arrayA)
-    { constructObj(objArray); array = arrayA; }
+    { assert(arrayA); constructObj(objArray); array = arrayA; }
   explicit Object(Dict *dictA)
-    { constructObj(objDict); dict = dictA; }
+    { assert(dictA); constructObj(objDict); dict = dictA; }
   explicit Object(Stream *streamA)
-    { constructObj(objStream); stream = streamA; }
+    { assert(streamA); constructObj(objStream); stream = streamA; }
   Object(int numA, int genA)
     { constructObj(objRef); ref.num = numA; ref.gen = genA; }
   template<typename T> Object(T) = delete;
@@ -238,10 +250,8 @@
     return type == objInt ? (double)intg : type == objInt64 ? (double)int64g : real;
   }
   const GooString *getString() const { OBJECT_TYPE_CHECK(objString); return string; }
-  // After takeString() the only method that should be called for the object is free()
-  // because the object it's not expected to have a NULL string.
-  GooString *takeString() {
-    OBJECT_TYPE_CHECK(objString); GooString *s = string; string = nullptr; return s; }
+  // After takeString() the only method that should be called for the object is free().
+  GooString *takeString() { OBJECT_TYPE_CHECK(objString); type = objDead; return string; }
   const char *getName() const { OBJECT_TYPE_CHECK(objName); return cString; }
   Array *getArray() const { OBJECT_TYPE_CHECK(objArray); return array; }
   Dict *getDict() const { OBJECT_TYPE_CHECK(objDict); return dict; }
@@ -263,13 +273,14 @@
 
   // Dict accessors.
   int dictGetLength() const;
-  void dictAdd(char *key, Object &&val);
+  void dictAdd(char *key, Object &&val) = delete;
+  void dictAdd(const char *key, Object &&val);
   void dictSet(const char *key, Object &&val);
   void dictRemove(const char *key);
   GBool dictIs(const char *dictType) const;
   Object dictLookup(const char *key, int recursion = 0) const;
   Object dictLookupNF(const char *key) const;
-  char *dictGetKey(int i) const;
+  const char *dictGetKey(int i) const;
   Object dictGetVal(int i) const;
   Object dictGetValNF(int i) const;
 
@@ -289,9 +300,6 @@
   const char *getTypeName() const;
   void print(FILE *f = stdout) const;
 
-  // Memory testing.
-  static void memCheck(FILE *f);
-
 private:
   friend class Array; // Needs free and initNullAfterMalloc
   friend class Dict; // Needs free and initNullAfterMalloc
@@ -316,11 +324,6 @@
     Stream *stream;		//   stream
     Ref ref;			//   indirect reference
   };
-
-#ifdef DEBUG_MEM
-  static int			// number of each type of object
-    numAlloc[numObjTypes];	//   currently allocated
-#endif
 };
 
 //------------------------------------------------------------------------
@@ -353,7 +356,7 @@
 inline int Object::dictGetLength() const
   { OBJECT_TYPE_CHECK(objDict); return dict->getLength(); }
 
-inline void Object::dictAdd(char *key, Object &&val)
+inline void Object::dictAdd(const char *key, Object &&val)
   { OBJECT_TYPE_CHECK(objDict); dict->add(key, std::move(val)); }
 
 inline void Object::dictSet(const char *key, Object &&val)
@@ -374,7 +377,7 @@
 inline Object Object::dictLookupNF(const char *key) const
   { OBJECT_TYPE_CHECK(objDict); return dict->lookupNF(key); }
 
-inline char *Object::dictGetKey(int i) const
+inline const char *Object::dictGetKey(int i) const
   { OBJECT_TYPE_CHECK(objDict); return dict->getKey(i); }
 
 inline Object Object::dictGetVal(int i) const

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/OptionalContent.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/OptionalContent.cc	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/OptionalContent.cc	2018-09-22 07:01:59 UTC (rev 48730)
@@ -7,6 +7,7 @@
 // Copyright 2008, 2010 Carlos Garcia Campos <carlosgc at gnome.org>
 // Copyright 2008, 2010, 2011, 2017, 2018 Albert Astals Cid <aacid at kde.org>
 // Copyright 2008 Mark Kaplan <mkaplan at finjan.com>
+// Copyright 2018 Adam Reichold <adam.reichold at t-online.de>
 //
 // Released under the GPL (version 2, or later, at your option)
 //
@@ -22,7 +23,6 @@
 #include "goo/GooString.h"
 #include "goo/GooList.h"
 #include "Error.h"
-// #include "PDFDocEncoding.h"
 #include "OptionalContent.h"
 
 // Max depth of nested visibility expressions.  This is used to catch
@@ -40,8 +40,6 @@
 {
   // we need to parse the dictionary here, and build optionalContentGroups
   ok = gTrue;
-  optionalContentGroups = new GooList();
-  display = nullptr;
 
   Object ocgList = ocgObject->dictLookup("OCGs");
   if (!ocgList.isArray()) {
@@ -56,17 +54,15 @@
     if (!ocg.isDict()) {
       break;
     }
-    OptionalContentGroup *thisOptionalContentGroup = new OptionalContentGroup(ocg.getDict());
+    auto thisOptionalContentGroup = std::make_unique<OptionalContentGroup>(ocg.getDict());
     ocg = ocgList.arrayGetNF(i);
     if (!ocg.isRef()) {
-      delete thisOptionalContentGroup;
       break;
     }
-    // TODO: we should create a lookup map from Ref to the OptionalContentGroup
     thisOptionalContentGroup->setRef( ocg.getRef() );
     // the default is ON - we change state later, depending on BaseState, ON and OFF
     thisOptionalContentGroup->setState(OptionalContentGroup::On);
-    optionalContentGroups->append(thisOptionalContentGroup);
+    optionalContentGroups.emplace(ocg.getRef(), std::move(thisOptionalContentGroup));
   }
 
   Object defaultOcgConfig = ocgObject->dictLookup("D");
@@ -78,11 +74,8 @@
 
   Object baseState = defaultOcgConfig.dictLookup("BaseState");
   if (baseState.isName("OFF")) {
-    for (int i = 0; i < optionalContentGroups->getLength(); ++i) {
-      OptionalContentGroup *group;
-
-      group = (OptionalContentGroup *)optionalContentGroups->get(i);
-      group->setState(OptionalContentGroup::Off);
+    for (auto &group : optionalContentGroups) {
+      group.second->setState(OptionalContentGroup::Off);
     }
   }
 
@@ -126,42 +119,26 @@
   rbgroups = defaultOcgConfig.dictLookup("RBGroups");
 }
 
-OCGs::~OCGs()
-{
-  deleteGooList(optionalContentGroups, OptionalContentGroup);
-  delete display;
-}
-
-
 bool OCGs::hasOCGs() const
 {
-  return ( optionalContentGroups->getLength() > 0 );
+  return !( optionalContentGroups.empty() );
 }
 
-OptionalContentGroup* OCGs::findOcgByRef( const Ref &ref)
+OptionalContentGroup* OCGs::findOcgByRef( const Ref &ref )
 {
-  //TODO: make this more efficient
-  OptionalContentGroup *ocg = nullptr;
-  for (int i=0; i < optionalContentGroups->getLength(); ++i) {
-    ocg = (OptionalContentGroup*)optionalContentGroups->get(i);
-    if ( (ocg->getRef().num == ref.num) && (ocg->getRef().gen == ref.gen) ) {
-      return ocg;
-    }
-  }
-
-  // not found
-  return nullptr;
+  const auto ocg = optionalContentGroups.find( ref );
+  return ocg != optionalContentGroups.end() ? ocg->second.get() : nullptr;
 }
 
 OCDisplayNode *OCGs::getDisplayRoot()
 {
   if (display)
-    return display;
+    return display.get();
 
   if (order.isArray())
-    display = OCDisplayNode::parse(&order, this, m_xref);
+    display.reset(OCDisplayNode::parse(&order, this, m_xref));
 
-  return display;
+  return display.get();
 }
 
 bool OCGs::optContentIsVisible( Object *dictRef )
@@ -184,7 +161,6 @@
     return result;
   }
   dict = dictObj.getDict();
-  // printf("checking if optContent is visible\n");
   Object dictType = dict->lookup("Type");
   if (dictType.isName("OCMD")) {
     Object ve = dict->lookup("VE");
@@ -213,13 +189,12 @@
         }
       }
     }
-  } else if ( dictType.isName("OCG") ) {
+  } else if ( dictType.isName("OCG") && dictRef->isRef() ) {
     OptionalContentGroup* oc = findOcgByRef( dictRef->getRef() );
     if ( oc && oc->getState() == OptionalContentGroup::Off ) {
       result=false;
     }
   }
-  // printf("visibility: %s\n", result? "on" : "off");
   return result;
 }
 

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/OptionalContent.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/OptionalContent.h	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/OptionalContent.h	2018-09-22 07:01:59 UTC (rev 48730)
@@ -5,6 +5,7 @@
 // Copyright 2007 Brad Hards <bradh at kde.org>
 // Copyright 2008 Carlos Garcia Campos <carlosgc at gnome.org>
 // Copyright 2013, 2018 Albert Astals Cid <aacid at kde.org>
+// Copyright 2018 Adam Reichold <adam.reichold at t-online.de>
 //
 // Released under the GPL (version 2, or later, at your option)
 //
@@ -19,6 +20,8 @@
 
 #include "Object.h"
 #include "CharTypes.h"
+#include <unordered_map>
+#include <memory>
 
 class GooString;
 class GooList;
@@ -33,7 +36,6 @@
 public:
 
   OCGs(Object *ocgObject, XRef *xref);
-  ~OCGs();
 
   OCGs(const OCGs &) = delete;
   OCGs& operator=(const OCGs &) = delete;
@@ -42,7 +44,7 @@
   GBool isOk() const { return ok; }
   
   bool hasOCGs() const;
-  GooList *getOCGs() const { return optionalContentGroups; }
+  const std::unordered_map< Ref, std::unique_ptr< OptionalContentGroup > > &getOCGs() const { return optionalContentGroups; }
 
   OptionalContentGroup* findOcgByRef( const Ref &ref);
 
@@ -66,12 +68,12 @@
   bool anyOn( Array *ocgArray );
   bool anyOff( Array *ocgArray );
 
-  GooList *optionalContentGroups;
+  std::unordered_map< Ref, std::unique_ptr< OptionalContentGroup > > optionalContentGroups;
 
   Object order;
   Object rbgroups;
   XRef *m_xref;
-  OCDisplayNode *display; // root node of display tree
+  std::unique_ptr< OCDisplayNode > display; // root node of display tree
 };
 
 //------------------------------------------------------------------------

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/OutputDev.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/OutputDev.h	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/OutputDev.h	2018-09-22 07:01:59 UTC (rev 48730)
@@ -244,7 +244,19 @@
     { return gFalse; }
 
   //----- path clipping
+
+  // Update the clipping path.  The new path is the intersection of the old path
+  // with the path given in 'state'.
+  // Additionally, set the clipping mode to the 'nonzero winding number rule'.
+  // That is, a point is inside the clipping region if its winding number
+  // with respect to the clipping path is nonzero.
   virtual void clip(GfxState * /*state*/) {}
+
+  // Update the clipping path.  The new path is the intersection of the old path
+  // with the path given in 'state'.
+  // Additionally, set the clipping mode to the 'even-odd rule'.  That is, a point is
+  // inside the clipping region if a ray from it to infinity will cross the clipping
+  // path an odd number of times (disregarding the path orientation).
   virtual void eoClip(GfxState * /*state*/) {}
   virtual void clipToStrokePath(GfxState * /*state*/) {}
 

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/PDFDoc.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/PDFDoc.cc	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/PDFDoc.cc	2018-09-22 07:01:59 UTC (rev 48730)
@@ -29,7 +29,7 @@
 // Copyright (C) 2011-2016 Thomas Freitag <Thomas.Freitag at alfa.de>
 // Copyright (C) 2012, 2013 Fabio D'Urso <fabiodurso at hotmail.it>
 // Copyright (C) 2013, 2014, 2017 Adrian Johnson <ajohnson at redneon.com>
-// Copyright (C) 2013 Adam Reichold <adamreichold at myopera.com>
+// Copyright (C) 2013, 2018 Adam Reichold <adamreichold at myopera.com>
 // Copyright (C) 2014 Bogdan Cristea <cristeab at gmail.com>
 // Copyright (C) 2015 Li Junling <lijunling at sina.com>
 // Copyright (C) 2015 André Guerreiro <aguerreiro1985 at gmail.com>
@@ -40,6 +40,7 @@
 // Copyright (C) 2018 Ben Timby <btimby at gmail.com>
 // Copyright (C) 2018 Evangelos Foutras <evangelos at foutrelis.com>
 // Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. Work sponsored by the LiMux project of the city of Munich
+// Copyright (C) 2018 Evangelos Rigas <erigas at rnd2.org>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -62,6 +63,7 @@
 #include <stddef.h>
 #include <string.h>
 #include <time.h>
+#include <regex>
 #include <sys/stat.h>
 #include "goo/glibc.h"
 #include "goo/gstrtod.h"
@@ -318,6 +320,9 @@
     }
   }
 
+  // Extract PDF Subtype information
+  extractPDFSubtype();
+
   // done
   return gTrue;
 }
@@ -482,6 +487,133 @@
   return ret;
 }
 
+static PDFSubtypePart pdfPartFromString(PDFSubtype subtype, GooString *pdfSubtypeVersion) {
+  const std::regex regex("PDF/(?:A|X|VT|E|UA)-([[:digit:]])(?:[[:alpha:]]{1,2})?:?([[:digit:]]{4})?");
+  std::smatch match;
+  std::string pdfsubver = pdfSubtypeVersion->toStr();
+  PDFSubtypePart subtypePart = subtypePartNone;
+
+  if (std::regex_search(pdfsubver, match, regex)) {
+    int date = 0;
+    const int part = std::stoi(match.str(1));
+
+    if (match[2].matched) {
+      date = std::stoi(match.str(2));
+    }
+
+    switch (subtype) {
+      case subtypePDFX:
+        switch (part) {
+          case 1:
+            switch (date) {
+              case 2001:
+              default:
+                subtypePart = subtypePart1;
+                break;
+              case 2003:
+                subtypePart = subtypePart4;
+                break;
+            }
+            break;
+          case 2:
+            subtypePart = subtypePart5;
+            break;
+          case 3:
+            switch (date) {
+              case 2002:
+              default:
+                subtypePart = subtypePart3;
+                break;
+              case 2003:
+                subtypePart = subtypePart6;
+                break;
+            }
+            break;
+          case 4:
+            subtypePart = subtypePart7;
+            break;
+          case 5:
+            subtypePart = subtypePart8;
+            break;
+        }
+        break;
+      default:
+        subtypePart = (PDFSubtypePart)part;
+        break;
+
+    }
+  }
+
+  return subtypePart;
+}
+
+static PDFSubtypeConformance pdfConformanceFromString(GooString *pdfSubtypeVersion) {
+  const std::regex regex("PDF/(?:A|X|VT|E|UA)-[[:digit:]]([[:alpha:]]+)");
+  std::smatch match;
+  const std::string pdfsubver = pdfSubtypeVersion->toStr();
+  PDFSubtypeConformance pdfConf = subtypeConfNone;
+
+  // match contains the PDF conformance (A, B, G, N, P, PG or U)
+  if (std::regex_search(pdfsubver, match, regex)) {
+    GooString *conf = new GooString(match.str(1));
+    // Convert to lowercase as the conformance may appear in both cases
+    conf->lowerCase();
+    if (conf->cmp("a")==0) {
+      pdfConf = subtypeConfA;
+    } else if (conf->cmp("b")==0) {
+      pdfConf = subtypeConfB;
+    } else if (conf->cmp("g")==0) {
+      pdfConf = subtypeConfG;
+    } else if (conf->cmp("n")==0) {
+      pdfConf = subtypeConfN;
+    } else if (conf->cmp("p")==0) {
+      pdfConf = subtypeConfP;
+    } else if (conf->cmp("pg")==0) {
+      pdfConf = subtypeConfPG;
+    } else if (conf->cmp("u")==0) {
+      pdfConf = subtypeConfU;
+    } else {
+      pdfConf = subtypeConfNone;
+    }
+    delete conf;
+  }
+
+  return pdfConf;
+}
+
+void PDFDoc::extractPDFSubtype() {
+  pdfSubtype = subtypeNull;
+  pdfPart = subtypePartNull;
+  pdfConformance = subtypeConfNull;
+
+  GooString *pdfSubtypeVersion = nullptr;
+  // Find PDF InfoDict subtype key if any
+  if ((pdfSubtypeVersion = getDocInfoStringEntry("GTS_PDFA1Version"))) {
+    pdfSubtype = subtypePDFA;
+  } else if ((pdfSubtypeVersion = getDocInfoStringEntry("GTS_PDFEVersion"))) {
+    pdfSubtype = subtypePDFE;
+  } else if ((pdfSubtypeVersion = getDocInfoStringEntry("GTS_PDFUAVersion"))) {
+    pdfSubtype = subtypePDFUA;
+  } else if ((pdfSubtypeVersion = getDocInfoStringEntry("GTS_PDFVTVersion"))) {
+    pdfSubtype = subtypePDFVT;
+  } else if ((pdfSubtypeVersion = getDocInfoStringEntry("GTS_PDFXVersion"))) {
+    pdfSubtype = subtypePDFX;
+  } else {
+    pdfSubtype = subtypeNone;
+    pdfPart = subtypePartNone;
+    pdfConformance = subtypeConfNone;
+    return;
+  }
+
+  // Extract part from version string
+  pdfPart = pdfPartFromString(pdfSubtype, pdfSubtypeVersion);
+
+  // Extract conformance from version string
+  pdfConformance = pdfConformanceFromString(pdfSubtypeVersion);
+
+  delete pdfSubtypeVersion;
+}
+
 std::vector<FormWidgetSignature*> PDFDoc::getSignatureWidgets()
 {
   int num_pages = getNumPages();
@@ -1645,7 +1777,7 @@
   mediaBoxArray->add(Object(mediaBox->y2));
   Object mediaBoxObject(mediaBoxArray);
   Object trimBoxObject = mediaBoxObject.copy();
-  pageDict->add(copyString("MediaBox"), std::move(mediaBoxObject));
+  pageDict->add("MediaBox", std::move(mediaBoxObject));
   if (cropBox != nullptr) {
     Array *cropBoxArray = new Array(getXRef());
     cropBoxArray->add(Object(cropBox->x1));
@@ -1654,10 +1786,10 @@
     cropBoxArray->add(Object(cropBox->y2));
     Object cropBoxObject(cropBoxArray);
     trimBoxObject = cropBoxObject.copy();
-    pageDict->add(copyString("CropBox"), std::move(cropBoxObject));
+    pageDict->add("CropBox", std::move(cropBoxObject));
   }
-  pageDict->add(copyString("TrimBox"), std::move(trimBoxObject));
-  pageDict->add(copyString("Rotate"), Object(rotate));
+  pageDict->add("TrimBox", std::move(trimBoxObject));
+  pageDict->add("Rotate", Object(rotate));
   getXRef()->setModifiedObject(&page, *refPage);
 }
 

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/PDFDoc.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/PDFDoc.h	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/PDFDoc.h	2018-09-22 07:01:59 UTC (rev 48730)
@@ -31,6 +31,7 @@
 // Copyright (C) 2015 André Esser <bepandre at hotmail.com>
 // Copyright (C) 2016 Jakub Alba <jakubalba at gmail.com>
 // Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. Work sponsored by the LiMux project of the city of Munich
+// Copyright (C) 2018 Evangelos Rigas <erigas at rnd2.org>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -74,6 +75,41 @@
   writeForceIncremental
 };
 
+enum PDFSubtype {
+  subtypeNull,
+  subtypePDFA,
+  subtypePDFE,
+  subtypePDFUA,
+  subtypePDFVT,
+  subtypePDFX,
+  subtypeNone
+};
+
+enum PDFSubtypePart {
+  subtypePartNull,
+  subtypePart1,
+  subtypePart2,
+  subtypePart3,
+  subtypePart4,
+  subtypePart5,
+  subtypePart6,
+  subtypePart7,
+  subtypePart8,
+  subtypePartNone
+};
+
+enum PDFSubtypeConformance {
+  subtypeConfNull,
+  subtypeConfA,
+  subtypeConfB,
+  subtypeConfG,
+  subtypeConfN,
+  subtypeConfP,
+  subtypeConfPG,
+  subtypeConfU,
+  subtypeConfNone
+};
+
 //------------------------------------------------------------------------
 // PDFDoc
 //------------------------------------------------------------------------
@@ -273,6 +309,11 @@
   GooString *getDocInfoCreatDate() { return getDocInfoStringEntry("CreationDate"); }
   GooString *getDocInfoModDate() { return getDocInfoStringEntry("ModDate"); }
 
+  // Return the PDF subtype, part, and conformance
+  PDFSubtype getPDFSubtype() const { return pdfSubtype; }
+  PDFSubtypePart getPDFSubtypePart() const { return pdfPart; }
+  PDFSubtypeConformance getPDFSubtypeConformance() const { return pdfConformance; }
+
   // Return the PDF version specified by the file.
   int getPDFMajorVersion() { return pdfMajorVersion; }
   int getPDFMinorVersion() { return pdfMinorVersion; }
@@ -346,6 +387,8 @@
   GBool checkFooter();
   void checkHeader();
   GBool checkEncryption(GooString *ownerPassword, GooString *userPassword);
+  void extractPDFSubtype();
+
   // Get the offset of the start xref table.
   Goffset getStartXRef(GBool tryingToReconstruct = gFalse);
   // Get the offset of the entries in the main XRef table of a
@@ -365,6 +408,9 @@
   void *guiData;
   int pdfMajorVersion;
   int pdfMinorVersion;
+  PDFSubtype pdfSubtype;
+  PDFSubtypePart pdfPart;
+  PDFSubtypeConformance pdfConformance;
   Linearization *linearization;
   // linearizationState = 0: unchecked
   // linearizationState = 1: checked and valid

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/PSOutputDev.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/PSOutputDev.cc	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/PSOutputDev.cc	2018-09-22 07:01:59 UTC (rev 48730)
@@ -33,6 +33,7 @@
 // Copyright (C) 2016 Caolán McNamara <caolanm at redhat.com>
 // Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. Work sponsored by the LiMux project of the city of Munich
 // Copyright (C) 2018 Adam Reichold <adam.reichold at t-online.de>
+// Copyright (C) 2018 Philipp Knechtges <philipp-dev at knechtges.com>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -52,6 +53,7 @@
 #include <math.h>
 #include <limits.h>
 #include <algorithm>
+#include <array>
 #include "goo/GooString.h"
 #include "goo/GooList.h"
 #include "poppler-config.h"
@@ -4927,6 +4929,60 @@
   return gTrue;
 }
 
+GBool PSOutputDev::patchMeshShadedFill(GfxState *state,
+				        GfxPatchMeshShading *shading) {
+  // TODO: support parametrized shading
+  if (level < psLevel3 || shading->isParameterized()) {
+    return gFalse;
+  }
+
+  writePS("%% Begin patchMeshShadedFill\n");
+
+  // ShadingType 7 shadings are pretty much the same for pdf and ps.
+  // As such, we basically just need to invert GfxPatchMeshShading::parse here.
+
+  writePS("<<\n");
+  writePS("  /ShadingType 7\n");
+  writePS("  /ColorSpace ");
+  dumpColorSpaceL2(shading->getColorSpace(), gFalse, gFalse, gFalse);
+  writePS("\n");
+  writePS("  /DataSource [\n");
+
+  const int ncomps = shading->getColorSpace()->getNComps();
+
+  for (int i = 0; i < shading->getNPatches(); ++i) {
+    const auto& patch = *shading->getPatch(i);
+    // Print Flag, for us always f = 0
+    writePS("  0 \n");
+
+    // Print coordinates
+    const std::array<std::pair<int,int>, 16> coordindices = {{ {0,0}, {0,1}, {0,2}, {0,3},
+                                                               {1,3}, {2,3}, {3,3}, {3,2},
+                                                               {3,1}, {3,0}, {2,0}, {1,0},
+                                                               {1,1}, {1,2}, {2,2}, {2,1} }};
+    for (const auto& index: coordindices) {
+      writePSFmt("  {0:.6g} {1:.6g}\n", patch.x[index.first][index.second],
+        patch.y[index.first][index.second]);
+    }
+
+    // Print colors
+    const std::array<std::pair<int, int>, 4> colindices = {{ {0,0}, {0,1}, {1,1}, {1,0} }};
+    for (const auto& index: colindices) {
+      writePS(" ");
+      for (int comp = 0; comp < ncomps; ++comp) {
+        writePSFmt(" {0:.6g}", colToDbl(patch.color[index.first][index.second].c[comp]));
+      }
+      writePS("\n");
+    }
+  }
+
+  writePS("  ]\n");
+
+  writePS(">> shfill\n");
+  writePS("%% End patchMeshShadedFill\n");
+  return gTrue;
+}
+
 void PSOutputDev::clip(GfxState *state) {
   doPath(state->getPath());
   writePS("W\n");

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/PSOutputDev.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/PSOutputDev.h	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/PSOutputDev.h	2018-09-22 07:01:59 UTC (rev 48730)
@@ -26,6 +26,7 @@
 // Copyright (C) 2012 Fabio D'Urso <fabiodurso at hotmail.it>
 // Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. Work sponsored by the LiMux project of the city of Munich
 // Copyright (C) 2018 Adam Reichold <adam.reichold at t-online.de>
+// Copyright (C) 2018 Philipp Knechtges <philipp-dev at knechtges.com>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -152,7 +153,7 @@
   // radialShadedFill()?  If this returns false, these shaded fills
   // will be reduced to a series of other drawing operations.
   GBool useShadedFills(int type) override
-    { return type < 4 && level >= psLevel2; }
+    { return (type < 4 && level >= psLevel2) || (type == 7 && level >= psLevel3); }
 
   // Does this device use drawForm()?  If this returns false,
   // form-type XObjects will be interpreted (i.e., unrolled).
@@ -249,6 +250,7 @@
 				   GfxFunctionShading *shading) override;
   GBool axialShadedFill(GfxState *state, GfxAxialShading *shading, double /*tMin*/, double /*tMax*/) override;
   GBool radialShadedFill(GfxState *state, GfxRadialShading *shading, double /*sMin*/, double /*sMax*/) override;
+  GBool patchMeshShadedFill(GfxState *state, GfxPatchMeshShading *shading) override;
 
   //----- path clipping
   void clip(GfxState *state) override;

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Parser.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Parser.cc	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Parser.cc	2018-09-22 07:01:59 UTC (rev 48730)
@@ -20,6 +20,7 @@
 // Copyright (C) 2013 Adrian Johnson <ajohnson at redneon.com>
 // Copyright (C) 2013 Thomas Freitag <Thomas.Freitag at alfa.de>
 // Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. Work sponsored by the LiMux project of the city of Munich
+// Copyright (C) 2018 Adam Reichold <adam.reichold at t-online.de>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -112,20 +113,18 @@
 	if (strict) goto err;
 	shift();
       } else {
-	// buf1 might go away in shift(), so construct the key
-	char *key = copyString(buf1.getName());
+	// buf1 will go away in shift(), so keep the key
+	const auto key = std::move(buf1);
 	shift();
 	if (buf1.isEOF() || buf1.isError()) {
-	  gfree(key);
 	  if (strict && buf1.isError()) goto err;
 	  break;
 	}
 	Object obj2 = getObj(gFalse, fileKey, encAlgorithm, keyLength, objNum, objGen, recursion + 1);
 	if (unlikely(obj2.isError() && recursion + 1 >= recursionLimit)) {
-	  gfree(key);
 	  break;
 	}
-	obj.dictAdd(key, std::move(obj2));
+	obj.dictAdd(key.getName(), std::move(obj2));
       }
     }
     if (buf1.isEOF()) {

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/SignatureInfo.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/SignatureInfo.cc	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/SignatureInfo.cc	2018-09-22 07:01:59 UTC (rev 48730)
@@ -127,16 +127,16 @@
   subject_dn = strdup(subjectDN);
 }
 
-void SignatureInfo::setLocation(char *loc)
+void SignatureInfo::setLocation(const char *loc)
 {
   free(location);
-  location = loc;
+  location = strdup(loc);
 }
 
-void SignatureInfo::setReason(char *signingReason)
+void SignatureInfo::setReason(const char *signingReason)
 {
   free(reason);
-  reason = signingReason;
+  reason = strdup(signingReason);
 }
 
 void SignatureInfo::setHashAlgorithm(int type)

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/SignatureInfo.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/SignatureInfo.h	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/SignatureInfo.h	2018-09-22 07:01:59 UTC (rev 48730)
@@ -61,8 +61,8 @@
   void setCertificateValStatus(enum CertificateValidationStatus );
   void setSignerName(char *);
   void setSubjectDN(const char *);
-  void setLocation(char *);
-  void setReason(char *);
+  void setLocation(const char *);
+  void setReason(const char *);
   void setHashAlgorithm(int);
   void setSigningTime(time_t);
   void setSubFilterSupport(bool isSupported) { sig_subfilter_supported = isSupported; }

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/SplashOutputDev.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/SplashOutputDev.cc	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/SplashOutputDev.cc	2018-09-22 07:01:59 UTC (rev 48730)
@@ -2294,88 +2294,71 @@
 }
 
 void SplashOutputDev::stroke(GfxState *state) {
-  SplashPath *path;
-
   if (state->getStrokeColorSpace()->isNonMarking()) {
     return;
   }
   setOverprintMask(state->getStrokeColorSpace(), state->getStrokeOverprint(),
 		   state->getOverprintMode(), state->getStrokeColor());
-  path = convertPath(state, state->getPath(), gFalse);
-  splash->stroke(path);
-  delete path;
+  SplashPath path = convertPath(state, state->getPath(), gFalse);
+  splash->stroke(&path);
 }
 
 void SplashOutputDev::fill(GfxState *state) {
-  SplashPath *path;
-
   if (state->getFillColorSpace()->isNonMarking()) {
     return;
   }
   setOverprintMask(state->getFillColorSpace(), state->getFillOverprint(),
 		   state->getOverprintMode(), state->getFillColor());
-  path = convertPath(state, state->getPath(), gTrue);
-  splash->fill(path, gFalse);
-  delete path;
+  SplashPath path = convertPath(state, state->getPath(), gTrue);
+  splash->fill(&path, gFalse);
 }
 
 void SplashOutputDev::eoFill(GfxState *state) {
-  SplashPath *path;
-
   if (state->getFillColorSpace()->isNonMarking()) {
     return;
   }
   setOverprintMask(state->getFillColorSpace(), state->getFillOverprint(),
 		   state->getOverprintMode(), state->getFillColor());
-  path = convertPath(state, state->getPath(), gTrue);
-  splash->fill(path, gTrue);
-  delete path;
+  SplashPath path = convertPath(state, state->getPath(), gTrue);
+  splash->fill(&path, gTrue);
 }
 
 void SplashOutputDev::clip(GfxState *state) {
-  SplashPath *path;
-
-  path = convertPath(state, state->getPath(), gTrue);
-  splash->clipToPath(path, gFalse);
-  delete path;
+  SplashPath path = convertPath(state, state->getPath(), gTrue);
+  splash->clipToPath(&path, gFalse);
 }
 
 void SplashOutputDev::eoClip(GfxState *state) {
-  SplashPath *path;
-
-  path = convertPath(state, state->getPath(), gTrue);
-  splash->clipToPath(path, gTrue);
-  delete path;
+  SplashPath path = convertPath(state, state->getPath(), gTrue);
+  splash->clipToPath(&path, gTrue);
 }
 
 void SplashOutputDev::clipToStrokePath(GfxState *state) {
-  SplashPath *path, *path2;
+  SplashPath *path2;
 
-  path = convertPath(state, state->getPath(), gFalse);
-  path2 = splash->makeStrokePath(path, state->getLineWidth());
-  delete path;
+  SplashPath path = convertPath(state, state->getPath(), gFalse);
+  path2 = splash->makeStrokePath(&path, state->getLineWidth());
   splash->clipToPath(path2, gFalse);
   delete path2;
 }
 
-SplashPath *SplashOutputDev::convertPath(GfxState *state, GfxPath *path,
+SplashPath SplashOutputDev::convertPath(GfxState *state, GfxPath *path,
 					 GBool dropEmptySubpaths) {
-  SplashPath *sPath;
+  SplashPath sPath;
   GfxSubpath *subpath;
   int n, i, j;
 
   n = dropEmptySubpaths ? 1 : 0;
-  sPath = new SplashPath();
   for (i = 0; i < path->getNumSubpaths(); ++i) {
     subpath = path->getSubpath(i);
     if (subpath->getNumPoints() > n) {
-      sPath->reserve(subpath->getNumPoints() + 1);
-      sPath->moveTo((SplashCoord)subpath->getX(0),
+      sPath.reserve(subpath->getNumPoints() + 1);
+      sPath.moveTo((SplashCoord)subpath->getX(0),
 		    (SplashCoord)subpath->getY(0));
       j = 1;
       while (j < subpath->getNumPoints()) {
 	if (subpath->getCurve(j)) {
-	  sPath->curveTo((SplashCoord)subpath->getX(j),
+	  sPath.curveTo((SplashCoord)subpath->getX(j),
 			 (SplashCoord)subpath->getY(j),
 			 (SplashCoord)subpath->getX(j+1),
 			 (SplashCoord)subpath->getY(j+1),
@@ -2383,13 +2366,13 @@
 			 (SplashCoord)subpath->getY(j+2));
 	  j += 3;
 	} else {
-	  sPath->lineTo((SplashCoord)subpath->getX(j),
+	  sPath.lineTo((SplashCoord)subpath->getX(j),
 			(SplashCoord)subpath->getY(j));
 	  ++j;
 	}
       }
       if (subpath->isClosed()) {
-	sPath->close();
+	sPath.close();
       }
     }
   }
@@ -3570,14 +3553,16 @@
       }
       break;
     case splashModeXBGR8:
-      imgData.lookup = (SplashColorPtr)gmallocn(n, 4);
-      for (i = 0; i < n; ++i) {
-	pix = (Guchar)i;
-	colorMap->getRGB(&pix, &rgb);
-	imgData.lookup[4*i] = colToByte(rgb.r);
-	imgData.lookup[4*i+1] = colToByte(rgb.g);
-	imgData.lookup[4*i+2] = colToByte(rgb.b);
-	imgData.lookup[4*i+3] = 255;
+      imgData.lookup = (SplashColorPtr)gmallocn_checkoverflow(n, 4);
+      if (likely(imgData.lookup != nullptr)) {
+	for (i = 0; i < n; ++i) {
+	  pix = (Guchar)i;
+	  colorMap->getRGB(&pix, &rgb);
+	  imgData.lookup[4*i] = colToByte(rgb.r);
+	  imgData.lookup[4*i+1] = colToByte(rgb.g);
+	  imgData.lookup[4*i+2] = colToByte(rgb.b);
+	  imgData.lookup[4*i+3] = 255;
+	}
       }
       break;
 #ifdef SPLASH_CMYK
@@ -4086,14 +4071,16 @@
       }
       break;
     case splashModeXBGR8:
-      imgData.lookup = (SplashColorPtr)gmallocn(n, 4);
-      for (i = 0; i < n; ++i) {
-	pix = (Guchar)i;
-	colorMap->getRGB(&pix, &rgb);
-	imgData.lookup[4*i] = colToByte(rgb.r);
-	imgData.lookup[4*i+1] = colToByte(rgb.g);
-	imgData.lookup[4*i+2] = colToByte(rgb.b);
-	imgData.lookup[4*i+3] = 255;
+      imgData.lookup = (SplashColorPtr)gmallocn_checkoverflow(n, 4);
+      if (likely(imgData.lookup != nullptr)) {
+	for (i = 0; i < n; ++i) {
+	  pix = (Guchar)i;
+	  colorMap->getRGB(&pix, &rgb);
+	  imgData.lookup[4*i] = colToByte(rgb.r);
+	  imgData.lookup[4*i+1] = colToByte(rgb.g);
+	  imgData.lookup[4*i+2] = colToByte(rgb.b);
+	  imgData.lookup[4*i+3] = 255;
+	}
       }
       break;
 #ifdef SPLASH_CMYK
@@ -4784,7 +4771,6 @@
 
 GBool SplashOutputDev::univariateShadedFill(GfxState *state, SplashUnivariatePattern *pattern, double tMin, double tMax) {
   double xMin, yMin, xMax, yMax;
-  SplashPath *path;
   GBool vaa = getVectorAntialias();
   // restore vector antialias because we support it here
   setVectorAntialias(gTrue);
@@ -4831,7 +4817,7 @@
   state->lineTo(xMax, yMax);
   state->lineTo(xMin, yMax);
   state->closePath();
-  path = convertPath(state, state->getPath(), gTrue);
+  SplashPath path = convertPath(state, state->getPath(), gTrue);
 
 #ifdef SPLASH_CMYK
   pattern->getShading()->getColorSpace()->createMapping(bitmap->getSeparationList(), SPOT_NCOMPS);
@@ -4838,10 +4824,9 @@
 #endif
   setOverprintMask(pattern->getShading()->getColorSpace(), state->getFillOverprint(),
 		   state->getOverprintMode(), nullptr);
-  retVal = (splash->shadedFill(path, pattern->getShading()->getHasBBox(), pattern) == splashOk);
+  retVal = (splash->shadedFill(&path, pattern->getShading()->getHasBBox(), pattern) == splashOk);
   state->clearPath();
   setVectorAntialias(vaa);
-  delete path;
 
   return retVal;
 }
@@ -4849,7 +4834,6 @@
 GBool SplashOutputDev::functionShadedFill(GfxState *state, GfxFunctionShading *shading) {
   SplashFunctionPattern *pattern = new SplashFunctionPattern(colorMode, state, shading);
   double xMin, yMin, xMax, yMax;
-  SplashPath *path;
   GBool vaa = getVectorAntialias();
   // restore vector antialias because we support it here
   setVectorAntialias(gTrue);
@@ -4896,7 +4880,7 @@
   state->lineTo(xMax, yMax);
   state->lineTo(xMin, yMax);
   state->closePath();
-  path = convertPath(state, state->getPath(), gTrue);
+  SplashPath path = convertPath(state, state->getPath(), gTrue);
 
 #ifdef SPLASH_CMYK
   pattern->getShading()->getColorSpace()->createMapping(bitmap->getSeparationList(), SPOT_NCOMPS);
@@ -4903,10 +4887,9 @@
 #endif
   setOverprintMask(pattern->getShading()->getColorSpace(), state->getFillOverprint(),
 		   state->getOverprintMode(), nullptr);
-  retVal = (splash->shadedFill(path, pattern->getShading()->getHasBBox(), pattern) == splashOk);
+  retVal = (splash->shadedFill(&path, pattern->getShading()->getHasBBox(), pattern) == splashOk);
   state->clearPath();
   setVectorAntialias(vaa);
-  delete path;
 
   delete pattern;
 

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/SplashOutputDev.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/SplashOutputDev.h	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/SplashOutputDev.h	2018-09-22 07:01:59 UTC (rev 48730)
@@ -22,6 +22,7 @@
 // Copyright (C) 2011, 2017 Adrian Johnson <ajohnson at redneon.com>
 // Copyright (C) 2012, 2015, 2018 Albert Astals Cid <aacid at kde.org>
 // Copyright (C) 2015, 2016 William Bader <williambader at hotmail.com>
+// Copyright (C) 2018 Stefan Br\xFCns <stefan.bruens at rwth-aachen.de>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -410,7 +411,7 @@
   static void getMatteColor( SplashColorMode colorMode, GfxImageColorMap *colorMap, GfxColor * matteColor, SplashColor splashMatteColor);
   void setOverprintMask(GfxColorSpace *colorSpace, GBool overprintFlag,
 			int overprintMode, GfxColor *singleColor, GBool grayIndexed = gFalse);
-  SplashPath *convertPath(GfxState *state, GfxPath *path,
+  SplashPath convertPath(GfxState *state, GfxPath *path,
 			  GBool dropEmptySubpaths);
   void drawType3Glyph(GfxState *state, T3FontCache *t3Font,
 		      T3FontCacheTag *tag, Guchar *data);

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/StructTreeRoot.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/StructTreeRoot.cc	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/StructTreeRoot.cc	2018-09-22 07:01:59 UTC (rev 48730)
@@ -9,6 +9,7 @@
 // Copyright 2017 Jan-Erik S <janerik234678 at gmail.com>
 // Copyright 2017, 2018 Albert Astals Cid <aacid at kde.org>
 // Copyright 2017, 2018 Adrian Johnson <ajohnson at redneon.com>
+// Copyright 2018, Adam Reichold <adam.reichold at t-online.de>
 //
 //========================================================================
 
@@ -110,7 +111,7 @@
   }
 
   // refToParentMap is only used during parsing. Ensure all memory used by it is freed.
-  std::multimap<Ref, Parent*, RefCompare>().swap(refToParentMap);
+  std::multimap<Ref, Parent*>().swap(refToParentMap);
 }
 
 void StructTreeRoot::parseNumberTreeNode(Dict *node)

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/StructTreeRoot.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/StructTreeRoot.h	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/StructTreeRoot.h	2018-09-22 07:01:59 UTC (rev 48730)
@@ -7,6 +7,7 @@
 // Copyright 2013, 2014 Igalia S.L.
 // Copyright 2018 Albert Astals Cid <aacid at kde.org>
 // Copyright 2018 Adrian Johnson <ajohnson at redneon.com>
+// Copyright 2018 Adam Reichold <adam.reichold at t-online.de>
 //
 //========================================================================
 
@@ -79,7 +80,7 @@
   Object classMap;
   ElemPtrArray elements;
   std::map<int, std::vector<Parent> > parentTree;
-  std::multimap<Ref, Parent*, RefCompare> refToParentMap;
+  std::multimap<Ref, Parent*> refToParentMap;
 
   void parse(Dict *rootDict);
   void parseNumberTreeNode(Dict *node);

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/TextOutputDev.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/TextOutputDev.cc	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/TextOutputDev.cc	2018-09-22 07:01:59 UTC (rev 48730)
@@ -37,6 +37,7 @@
 // Copyright (C) 2013 Ed Catmur <ed at catmur.co.uk>
 // Copyright (C) 2016 Khaled Hosny <khaledhosny at eglug.org>
 // Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. Work sponsored by the LiMux project of the city of Munich
+// Copyright (C) 2018 Sanchit Anand <sanxchit at gmail.com>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -5878,3 +5879,7 @@
   text = new TextPage(rawOrder);
   return ret;
 }
+
+TextFlow *TextOutputDev::getFlows() {
+  return text->getFlows();
+}

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/TextOutputDev.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/TextOutputDev.h	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/TextOutputDev.h	2018-09-22 07:01:59 UTC (rev 48730)
@@ -22,6 +22,7 @@
 // Copyright (C) 2012, 2013, 2015, 2016 Jason Crain <jason at aquaticape.us>
 // Copyright (C) 2013 Thomas Freitag <Thomas.Freitag at alfa.de>
 // Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. Work sponsored by the LiMux project of the city of Munich
+// Copyright (C) 2018 Sanchit Anand <sanxchit at gmail.com>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -890,6 +891,10 @@
   // Turn extra processing for HTML conversion on or off.
   void enableHTMLExtras(GBool doHTMLA) { doHTML = doHTMLA; }
 
+  // Get the head of the linked list of TextFlows for the
+  // last rasterized page.
+  TextFlow *getFlows();
+
 private:
 
   TextOutputFunc outputFunc;	// output function

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/XRef.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/XRef.cc	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/XRef.cc	2018-09-22 07:01:59 UTC (rev 48730)
@@ -773,10 +773,10 @@
   }
 
   obj = dict->lookupNF("Prev");
-  if (obj.isInt()) {
+  if (obj.isInt() && obj.getInt() >= 0) {
     *pos = obj.getInt();
     more = gTrue;
-  } else if (obj.isInt64()) {
+  } else if (obj.isInt64() && obj.getInt64() >= 0) {
     *pos = obj.getInt64();
     more = gTrue;
   } else {

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/poppler-config.h.cmake
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/poppler-config.h.cmake	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/poppler-config.h.cmake	2018-09-22 07:01:59 UTC (rev 48730)
@@ -17,6 +17,7 @@
 // Copyright (C) 2014 Hib Eris <hib at hiberis.nl>
 // Copyright (C) 2016 Tor Lillqvist <tml at collabora.com>
 // Copyright (C) 2017 Adrian Johnson <ajohnson at redneon.com>
+// Copyright (C) 2018 Adam Reichold <adam.reichold at t-online.de>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -121,8 +122,7 @@
 
 // Also, there are preprocessor symbols in the header files
 // that are used but never defined when building poppler using configure
-// or cmake: DISABLE_OUTLINE, DEBUG_MEM,
-// ENABLE_PLUGINS, DEBUG_FORMS
+// or cmake: DISABLE_OUTLINE, ENABLE_PLUGINS, DEBUG_FORMS
 
 //------------------------------------------------------------------------
 // version

Modified: trunk/Build/source/libs/poppler/version.ac
===================================================================
--- trunk/Build/source/libs/poppler/version.ac	2018-09-22 00:18:06 UTC (rev 48729)
+++ trunk/Build/source/libs/poppler/version.ac	2018-09-22 07:01:59 UTC (rev 48730)
@@ -9,4 +9,4 @@
 dnl --------------------------------------------------------
 dnl
 dnl  m4-include this file to define the current poppler version
-m4_define([poppler_version], [0.68.0])
+m4_define([poppler_version], [0.69.0])



More information about the tex-live-commits mailing list