[Libreoffice-commits] core.git: Branch 'distro/lhm/libreoffice-5-2+backports' - 13 commits - download.lst external/poppler framework/source RepositoryExternal.mk sdext/source sfx2/source

Michael Stahl mstahl at redhat.com
Fri Jun 22 11:23:56 UTC 2018


Rebased ref, commits from common ancestor:
commit 01dda7a60b416edec27c096580171306f46f0f2c
Author: Michael Stahl <mstahl at redhat.com>
Date:   Tue Jun 27 17:32:16 2017 +0200

    tdf#108814 sfx2: fix crash in sidebar when XUpdateModel not implemented
    
    com.sun.star.ui.XUpdateModel was added in 5.1 so pre-existing extensions
    don't implement it.
    
    (regression from 0635208edf1cdee4235ea87666a473ac81007555)
    
    Change-Id: I6749a9cf2fc82b9cd90d85a682247104e369e167

diff --git a/sfx2/source/sidebar/ResourceManager.cxx b/sfx2/source/sidebar/ResourceManager.cxx
index 8958f3b4d5cd..293288058c1d 100644
--- a/sfx2/source/sidebar/ResourceManager.cxx
+++ b/sfx2/source/sidebar/ResourceManager.cxx
@@ -719,7 +719,10 @@ void ResourceManager::UpdateModel(const css::uno::Reference<css::frame::XModel>&
         for (SharedPanelContainer::const_iterator it = rContainer.begin(); it != rContainer.end(); ++it)
         {
             css::uno::Reference<css::ui::XUpdateModel> xPanel((*it)->GetPanelComponent(), css::uno::UNO_QUERY);
-            xPanel->updateModel(xModel);
+            if (xPanel.is()) // tdf#108814 interface is optional
+            {
+                xPanel->updateModel(xModel);
+            }
         }
     }
 }
commit 6e70ed4b8724eab5553a16ef1562025b1574d92a
Author: Michael Stahl <Michael.Stahl at cib.de>
Date:   Fri Jun 22 10:52:37 2018 +0200

    poppler: poppler-snprintf.patch.1 needs rebase
    
    Presumably it's needed for MSVC 2013.
    
    Change-Id: Ibcd3bab373616faa58db4dab0f92f058d1dfafac
    Reviewed-on: https://gerrit.libreoffice.org/56274
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>
    Tested-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>

diff --git a/external/poppler/poppler-snprintf.patch.1 b/external/poppler/poppler-snprintf.patch.1
index aaced8e099c2..baf3e6926c36 100644
--- a/external/poppler/poppler-snprintf.patch.1
+++ b/external/poppler/poppler-snprintf.patch.1
@@ -28,8 +28,8 @@
 +#    include <systools/win32/snprintf.h>
 +#  endif
  #endif
+ #include "goo/glibc.h"
  #include "goo/gmem.h"
- #include "goo/GooString.h"
 --- poppler-0.22.5/poppler/PageLabelInfo.cc	2013-03-25 22:48:34.000000000 +0100
 +++ poppler-0.22.5/poppler/PageLabelInfo.cc	2013-07-08 16:56:47.977901129 +0200
 @@ -17,6 +17,14 @@
commit 81194373617379bb156044f7a07400263af36689
Author: Michael Stahl <Michael.Stahl at cib.de>
Date:   Wed Jun 20 16:10:44 2018 +0200

    poppler: upgrade to release 0.66.0
    
    Unfortunately the autotools build system was removed in 0.60.0, and the
    CMake one is a bit overeager in linking against system libraries that
    happen to be installed on the build machine, and we currently don't
    require CMake anyway, so avoid the problems by using a gbuild makefile
    and a patch to add the generated header files.
    
    Remove all current patches:
    
    poppler-notests.patch.1: obsolete (autotools build system)
    
    poppler-mac-fake.patch.1: presumed obsolete
    
    ubsan.patch.0: presumably fixed differently upstream in
    https://cgit.freedesktop.org/poppler/poppler/commit/?id=f43cb73939f85952d83afc87a6dc638dc1ae311b
    
    poppler-libjpeg.patch.1: obsolete (autotools build system; there appears
    to be no way to do this with CMake?)
    
    0001-Fix-building-with-old-clang.patch.1: merged upstream
    
    Change-Id: I271c87ab3ec25cc9d1e8fafb04dae7c004acc350
    (cherry picked from commit 5f8426a077ec0986a4b6cf8a58515ad5496f78e0)
    Reviewed-on: https://gerrit.libreoffice.org/56259
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>
    Tested-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>

diff --git a/RepositoryExternal.mk b/RepositoryExternal.mk
index 5718c94fb186..5168dbcb7ece 100644
--- a/RepositoryExternal.mk
+++ b/RepositoryExternal.mk
@@ -2693,11 +2693,7 @@ $(call gb_LinkTarget_set_include,$(1),\
 	$$(INCLUDE) \
 )
 
-$(call gb_LinkTarget_add_libs,$(1),\
-	$(call gb_UnpackedTarball_get_dir,poppler)/fofi/.libs/libfofi$(gb_StaticLibrary_PLAINEXT) \
-	$(call gb_UnpackedTarball_get_dir,poppler)/goo/.libs/libgoo$(gb_StaticLibrary_PLAINEXT) \
-	$(call gb_UnpackedTarball_get_dir,poppler)/poppler/.libs/libpoppler$(gb_StaticLibrary_PLAINEXT) \
-)
+$(call gb_LinkTarget_use_static_libraries,$(1),poppler)
 
 $(call gb_LinkTarget_use_external,$(1),jpeg)
 
diff --git a/download.lst b/download.lst
index 5677ab58e433..6309c54993a5 100644
--- a/download.lst
+++ b/download.lst
@@ -129,8 +129,8 @@ export PAGEMAKER_TARBALL := libpagemaker-0.0.3.tar.bz2
 export PIXMAN_TARBALL := c63f411b3ad147db2bcce1bf262a0e02-pixman-0.24.4.tar.bz2
 export PNG_MD5SUM := 897ccec1ebfb0922e83c2bfaa1be8748
 export PNG_TARBALL := libpng-1.6.28.tar.gz
-export POPPLER_MD5SUM := 6e44408a3b4f4a738f8a6770d0aea8a5
-export POPPLER_TARBALL := poppler-0.59.0.tar.xz
+export POPPLER_MD5SUM := 6602813e52f02f85f11ba1590e0ef749
+export POPPLER_TARBALL := poppler-0.66.0.tar.xz
 export POSTGRESQL_TARBALL := c0b4799ea9850eae3ead14f0a60e9418-postgresql-9.2.1.tar.bz2
 
 ifeq ($(PYTHON_VERSION_MINOR),3)
diff --git a/external/poppler/0001-Fix-building-with-old-clang.patch.1 b/external/poppler/0001-Fix-building-with-old-clang.patch.1
deleted file mode 100644
index dcddd11d2967..000000000000
--- a/external/poppler/0001-Fix-building-with-old-clang.patch.1
+++ /dev/null
@@ -1,25 +0,0 @@
-From dd80c182cbcb188af0dd590f222ba9bbb31e3fb7 Mon Sep 17 00:00:00 2001
-From: Albert Astals Cid <aacid at kde.org>
-Date: Mon, 4 Sep 2017 19:36:06 +0200
-Subject: [PATCH] Fix building with old clang
-
----
- poppler/StructElement.cc | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/poppler/StructElement.cc b/poppler/StructElement.cc
-index 0fbd336a..451213f8 100644
---- a/poppler/StructElement.cc
-+++ b/poppler/StructElement.cc
-@@ -248,6 +248,8 @@ struct AttributeMapEntry {
- };
- 
- struct AttributeDefaults {
-+  AttributeDefaults() {}; // needed to support old clang
-+
-   Object Inline  = Object(objName, "Inline");
-   Object LrTb = Object(objName, "LrTb");
-   Object Normal = Object(objName, "Normal");
--- 
-2.13.5
-
diff --git a/external/poppler/ExternalProject_poppler.mk b/external/poppler/ExternalProject_poppler.mk
deleted file mode 100644
index 83d51b9ea9e7..000000000000
--- a/external/poppler/ExternalProject_poppler.mk
+++ /dev/null
@@ -1,51 +0,0 @@
-# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
-#
-# This file is part of the LibreOffice project.
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#
-
-$(eval $(call gb_ExternalProject_ExternalProject,poppler))
-
-$(eval $(call gb_ExternalProject_use_autoconf,poppler,build))
-
-$(eval $(call gb_ExternalProject_use_externals,poppler,\
-	jpeg \
-))
-
-$(eval $(call gb_ExternalProject_register_targets,poppler,\
-	build \
-))
-
-$(call gb_ExternalProject_get_state_target,poppler,build) :
-	$(call gb_ExternalProject_run,build,\
-		$(if $(filter TRUE,$(DISABLE_DYNLOADING)),CFLAGS="$(CFLAGS) $(gb_VISIBILITY_FLAGS) $(gb_COMPILEROPTFLAGS)" CXXFLAGS="$(CXXFLAGS) $(gb_VISIBILITY_FLAGS) $(gb_VISIBILITY_FLAGS_CXX) $(gb_COMPILEROPTFLAGS)",$(if $(filter MSC-120,$(COM)-$(VCVER)),CXXFLAGS="$(CXXFLAGS) -I$(SRCDIR)/include")) \
-		MAKE=$(MAKE) PKG_CONFIG="" ./configure \
-			--with-pic \
-			--enable-static \
-			--disable-shared \
-			--enable-xpdf-headers \
-			--disable-poppler-cpp \
-			--enable-libopenjpeg=none \
-			--disable-libtiff \
-			--enable-libjpeg \
-			--disable-libpng \
-			--disable-zlib \
-			--disable-libcurl \
-			--disable-splash-output \
-			--disable-cairo-output \
-			--disable-poppler-glib \
-			--disable-poppler-qt4 \
-			--disable-poppler-qt5 \
-			--disable-gtk-test \
-			--disable-utils \
-			--disable-cms \
-			$(if $(verbose),--disable-silent-rules,--enable-silent-rules) \
-			$(if $(filter WNT MACOSX,$(OS)),--with-font-configuration=win32,--with-font-configuration=fontconfig) \
-			$(if $(CROSS_COMPILING),--build=$(BUILD_PLATFORM) --host=$(HOST_PLATFORM)) \
-		&& $(MAKE) \
-	)
-
-# vim: set noet sw=4 ts=4:
diff --git a/external/poppler/Module_poppler.mk b/external/poppler/Module_poppler.mk
index 357bc6dd365e..9ae5ed7c8633 100644
--- a/external/poppler/Module_poppler.mk
+++ b/external/poppler/Module_poppler.mk
@@ -12,7 +12,7 @@ $(eval $(call gb_Module_Module,poppler))
 ifeq ($(SYSTEM_POPPLER),)
 
 $(eval $(call gb_Module_add_targets,poppler,\
-	ExternalProject_poppler \
+	StaticLibrary_poppler \
 	UnpackedTarball_poppler \
 ))
 
diff --git a/external/poppler/StaticLibrary_poppler.mk b/external/poppler/StaticLibrary_poppler.mk
new file mode 100644
index 000000000000..bb5f51b571ca
--- /dev/null
+++ b/external/poppler/StaticLibrary_poppler.mk
@@ -0,0 +1,128 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t; fill-column: 100 -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_StaticLibrary_StaticLibrary,poppler))
+
+$(eval $(call gb_StaticLibrary_use_unpacked,poppler,poppler))
+
+$(eval $(call gb_StaticLibrary_use_external,poppler,jpeg))
+
+$(eval $(call gb_StaticLibrary_set_warnings_not_errors,poppler))
+
+$(eval $(call gb_StaticLibrary_set_include,poppler,\
+	-I$(WORKDIR)/UnpackedTarball/poppler \
+	-I$(WORKDIR)/UnpackedTarball/poppler/fofi \
+	-I$(WORKDIR)/UnpackedTarball/poppler/goo \
+	-I$(WORKDIR)/UnpackedTarball/poppler/poppler \
+	$$(INCLUDE) \
+))
+
+ifeq ($(OS),WNT)
+$(eval $(call gb_StaticLibrary_add_defs,poppler,\
+	-DWIN32_LEAN_AND_MEAN \
+	-D_CRT_SECURE_NO_WARNINGS \
+))
+$(eval $(call gb_StaticLibrary_add_cxxflags,poppler,\
+	/Zc:wchar_t- \
+))
+endif
+
+$(eval $(call gb_StaticLibrary_set_generated_cxx_suffix,poppler,cc))
+
+$(eval $(call gb_StaticLibrary_add_generated_exception_objects,poppler,\
+	UnpackedTarball/poppler/goo/gfile \
+	UnpackedTarball/poppler/goo/gmempp \
+	UnpackedTarball/poppler/goo/GooList \
+	UnpackedTarball/poppler/goo/GooTimer \
+	UnpackedTarball/poppler/goo/GooString \
+	UnpackedTarball/poppler/goo/gmem \
+	UnpackedTarball/poppler/goo/FixedPoint \
+	UnpackedTarball/poppler/goo/NetPBMWriter \
+	UnpackedTarball/poppler/goo/PNGWriter \
+	UnpackedTarball/poppler/goo/TiffWriter \
+	UnpackedTarball/poppler/goo/JpegWriter \
+	UnpackedTarball/poppler/goo/ImgWriter \
+	UnpackedTarball/poppler/goo/gstrtod \
+	UnpackedTarball/poppler/goo/grandom \
+	UnpackedTarball/poppler/goo/glibc \
+	UnpackedTarball/poppler/goo/glibc_strtok_r \
+	UnpackedTarball/poppler/fofi/FoFiBase \
+	UnpackedTarball/poppler/fofi/FoFiEncodings \
+	UnpackedTarball/poppler/fofi/FoFiTrueType \
+	UnpackedTarball/poppler/fofi/FoFiType1 \
+	UnpackedTarball/poppler/fofi/FoFiType1C \
+	UnpackedTarball/poppler/fofi/FoFiIdentifier \
+	UnpackedTarball/poppler/poppler/Annot \
+	UnpackedTarball/poppler/poppler/Array \
+	UnpackedTarball/poppler/poppler/BuiltinFont \
+	UnpackedTarball/poppler/poppler/BuiltinFontTables \
+	UnpackedTarball/poppler/poppler/CachedFile \
+	UnpackedTarball/poppler/poppler/Catalog \
+	UnpackedTarball/poppler/poppler/CharCodeToUnicode \
+	UnpackedTarball/poppler/poppler/CMap \
+	UnpackedTarball/poppler/poppler/DateInfo \
+	UnpackedTarball/poppler/poppler/Decrypt \
+	UnpackedTarball/poppler/poppler/Dict \
+	UnpackedTarball/poppler/poppler/Error \
+	UnpackedTarball/poppler/poppler/FileSpec \
+	UnpackedTarball/poppler/poppler/FontEncodingTables \
+	UnpackedTarball/poppler/poppler/Form \
+	UnpackedTarball/poppler/poppler/FontInfo \
+	UnpackedTarball/poppler/poppler/Function \
+	UnpackedTarball/poppler/poppler/Gfx \
+	UnpackedTarball/poppler/poppler/GfxFont \
+	UnpackedTarball/poppler/poppler/GfxState \
+	UnpackedTarball/poppler/poppler/GlobalParams \
+	UnpackedTarball/poppler/poppler/Hints \
+	UnpackedTarball/poppler/poppler/JArithmeticDecoder \
+	UnpackedTarball/poppler/poppler/JBIG2Stream \
+	UnpackedTarball/poppler/poppler/Lexer \
+	UnpackedTarball/poppler/poppler/Link \
+	UnpackedTarball/poppler/poppler/Linearization \
+	UnpackedTarball/poppler/poppler/LocalPDFDocBuilder \
+	UnpackedTarball/poppler/poppler/MarkedContentOutputDev \
+	UnpackedTarball/poppler/poppler/NameToCharCode \
+	UnpackedTarball/poppler/poppler/Object \
+	UnpackedTarball/poppler/poppler/OptionalContent \
+	UnpackedTarball/poppler/poppler/Outline \
+	UnpackedTarball/poppler/poppler/OutputDev \
+	UnpackedTarball/poppler/poppler/Page \
+	UnpackedTarball/poppler/poppler/PageTransition \
+	UnpackedTarball/poppler/poppler/Parser \
+	UnpackedTarball/poppler/poppler/PDFDoc \
+	UnpackedTarball/poppler/poppler/PDFDocEncoding \
+	UnpackedTarball/poppler/poppler/PDFDocFactory \
+	UnpackedTarball/poppler/poppler/PopplerCache \
+	UnpackedTarball/poppler/poppler/ProfileData \
+	UnpackedTarball/poppler/poppler/PreScanOutputDev \
+	UnpackedTarball/poppler/poppler/PSTokenizer \
+	UnpackedTarball/poppler/poppler/SignatureInfo \
+	UnpackedTarball/poppler/poppler/Stream \
+	UnpackedTarball/poppler/poppler/StructTreeRoot \
+	UnpackedTarball/poppler/poppler/StructElement \
+	UnpackedTarball/poppler/poppler/UnicodeMap \
+	UnpackedTarball/poppler/poppler/UnicodeMapFuncs \
+	UnpackedTarball/poppler/poppler/UnicodeTypeTable \
+	UnpackedTarball/poppler/poppler/UTF \
+	UnpackedTarball/poppler/poppler/XRef \
+	UnpackedTarball/poppler/poppler/PSOutputDev \
+	UnpackedTarball/poppler/poppler/TextOutputDev \
+	UnpackedTarball/poppler/poppler/PageLabelInfo \
+	UnpackedTarball/poppler/poppler/SecurityHandler \
+	UnpackedTarball/poppler/poppler/StdinCachedFile \
+	UnpackedTarball/poppler/poppler/StdinPDFDocBuilder \
+	UnpackedTarball/poppler/poppler/Sound \
+	UnpackedTarball/poppler/poppler/ViewerPreferences \
+	UnpackedTarball/poppler/poppler/XpdfPluginAPI \
+	UnpackedTarball/poppler/poppler/Movie \
+	UnpackedTarball/poppler/poppler/Rendition \
+	UnpackedTarball/poppler/poppler/DCTStream \
+))
+
+# vim: set noet sw=4 ts=4:
diff --git a/external/poppler/UnpackedTarball_poppler.mk b/external/poppler/UnpackedTarball_poppler.mk
index 94c8eb650dbc..f29933618b18 100644
--- a/external/poppler/UnpackedTarball_poppler.mk
+++ b/external/poppler/UnpackedTarball_poppler.mk
@@ -12,12 +12,8 @@ $(eval $(call gb_UnpackedTarball_UnpackedTarball,poppler))
 $(eval $(call gb_UnpackedTarball_set_tarball,poppler,$(POPPLER_TARBALL),,poppler))
 
 $(eval $(call gb_UnpackedTarball_add_patches,poppler,\
-	external/poppler/poppler-notests.patch.1 \
 	$(if $(filter MSC-120,$(COM)-$(VCVER)),external/poppler/poppler-snprintf.patch.1) \
-	external/poppler/poppler-mac-fake.patch.1 \
-	external/poppler/ubsan.patch.0 \
-	external/poppler/poppler-libjpeg.patch.1 \
-	external/poppler/0001-Fix-building-with-old-clang.patch.1 \
+	external/poppler/poppler-config.patch.1 \
 ))
 
 # vim: set noet sw=4 ts=4:
diff --git a/external/poppler/poppler-config.patch.1 b/external/poppler/poppler-config.patch.1
new file mode 100644
index 000000000000..5328e680e2f2
--- /dev/null
+++ b/external/poppler/poppler-config.patch.1
@@ -0,0 +1,484 @@
+*three* poppler config headers
+
+mkdir build && cd build && cmake .. -DENABLE_DCTDECODER=libjpeg -DHAVE_CAIRO=off -DENABLE_LIBOPENJPEG=none -DENABLE_CMS=none -DENABLE_LIBCURL=off -DENABLE_ZLIB=off -DENABLE_ZLIB_UNCOMPRESS=off -DENABLE_NSS3=off -DENABLE_LIBPNG=off -DENABLE_LIBTIFF=off -DENABLE_SPLASH=off -DENABLE_UTILS=off -DENABLE_CPP=off -DENABLE_GLIB=off -DENABLE_GOBJECT_INTROSPECTION=off -DENABLE_GTK_DOC=off -DENABLE_QT5=off
+
+manually disabled these because cmake failed to do it:
+HAVE_CAIRO
+ENABLE_NSS3
+ENABLE_LIBPNG (twice!)
+ENABLE_LIBTIFF (twice!)
+ENABLE_LIBCURL
+
+diff --git a/config.h b/config.h
+new file mode 100644
+index 0fbd336a..451213f8 100644
+--- /dev/null
++++ b/config.h
+@@ -0,0 +1,248 @@
++/* config.h.  Generated from config.h.cmake by cmake.  */
++
++/* Build against libcurl. */
++/* #undef ENABLE_LIBCURL */
++
++/* Use libjpeg instead of builtin jpeg decoder. */
++#define ENABLE_LIBJPEG 1
++
++/* Use libopenjpeg instead of builtin jpeg2000 decoder. */
++/* #undef ENABLE_LIBOPENJPEG */
++
++/* Build against libtiff. */
++/* #define ENABLE_LIBTIFF 1 */
++
++/* Build against libpng. */
++/* #define ENABLE_LIBPNG 1 */
++
++/* Do not hardcode the library location */
++/* #undef ENABLE_RELOCATABLE */
++
++/* Build against zlib. */
++/* #undef ENABLE_ZLIB */
++
++/* Use zlib instead of builtin zlib decoder to uncompress flate streams. */
++/* #undef ENABLE_ZLIB_UNCOMPRESS */
++
++/* Build against libnss3 for digital signature validation */
++/* #define ENABLE_NSS3 1 */
++
++/* Use cairo for rendering. */
++/* #define HAVE_CAIRO 1 */
++
++/* Do we have any DCT decoder?. */
++#define HAVE_DCT_DECODER 1
++
++/* Do we have any JPX decoder?. */
++/* #undef HAVE_JPX_DECODER */
++
++#if !defined(_WIN32)
++/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
++   */
++#define HAVE_DIRENT_H 1
++#endif
++
++#if !defined(_WIN32)
++/* Define to 1 if you have the <dlfcn.h> header file. */
++#define HAVE_DLFCN_H 1
++#endif
++
++/* Define to 1 if you have the <fcntl.h> header file. */
++#define HAVE_FCNTL_H 1
++
++/* Define to 1 if you have the `fseek64' function. */
++/* #undef HAVE_FSEEK64 */
++
++#if !defined(_WIN32)
++/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */
++#define HAVE_FSEEKO 1
++#endif
++
++/* Define to 1 if you have the `ftell64' function. */
++/* #undef HAVE_FTELL64 */
++
++#if !defined(__APPLE__) && !defined(_WIN32)
++/* Define to 1 if you have the `pread64' function. */
++#define HAVE_PREAD64 1
++#endif
++
++#if !defined(__APPLE__) && !defined(_WIN32)
++/* Define to 1 if you have the `lseek64' function. */
++#define HAVE_LSEEK64 1
++#endif
++
++#if !defined(_WIN32)
++/* Defines if gettimeofday is available on your system */
++#define HAVE_GETTIMEOFDAY 1
++#endif
++
++#if !defined(_WIN32)
++/* Defines if gmtime_r is available on your system */
++#define HAVE_GMTIME_R 1
++#endif
++
++#if !defined(_WIN32)
++/* Defines if timegm is available on your system */
++#define HAVE_TIMEGM 1
++#endif
++
++/* Define if you have the iconv() function and it works. */
++/* #undef HAVE_ICONV */
++
++/* Define to 1 if you have the `z' library (-lz). */
++/* #undef HAVE_LIBZ */
++
++#if !defined(_WIN32)
++/* Defines if localtime_r is available on your system */
++#define HAVE_LOCALTIME_R 1
++#endif
++
++#if !defined(_WIN32)
++/* Define to 1 if you have the `mkstemp' function. */
++#define HAVE_MKSTEMP 1
++#endif
++
++#if !defined(_WIN32)
++/* Define to 1 if you have the `rand_r' function. */
++#define HAVE_RAND_R 1
++#endif
++
++#if defined(_WIN32)
++/* Define to 1 if you have the `strcpy_s' function. */
++#define HAVE_STRCPY_S 1
++#endif
++
++#if defined(_WIN32)
++/* Define to 1 if you have the `strcat_s' function. */
++#define HAVE_STRCAT_S 1
++#endif
++
++#if !defined(_WIN32)
++/* Defines if strtok_r is available on your system */
++#define HAVE_STRTOK_R 1
++#endif
++
++/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
++/* #undef HAVE_NDIR_H */
++
++#if !defined(_WIN32)
++/* Define to 1 if you have the `popen' function. */
++#define HAVE_POPEN 1
++#endif
++
++/* Use splash for rendering. */
++/* #undef HAVE_SPLASH */
++
++#if !defined(__APPLE__) && !defined(_WIN32)
++/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
++   */
++#define HAVE_SYS_DIR_H 1
++#endif
++
++#if !defined(__APPLE__) && !defined(_WIN32)
++/* Define to 1 if you have the <sys/mman.h> header file. */
++#define HAVE_SYS_MMAN_H 1
++#endif
++
++/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
++   */
++/* #undef HAVE_SYS_NDIR_H */
++
++/* Define to 1 if you have the <sys/stat.h> header file. */
++#define HAVE_SYS_STAT_H 1
++
++#if !defined(_WIN32)
++/* Define to 1 if you have the <unistd.h> header file. */
++#define HAVE_UNISTD_H 1
++#endif
++
++/* Define to 1 if you have a big endian machine */
++/* #undef WORDS_BIGENDIAN */
++
++/* Define as const if the declaration of iconv() needs const. */
++#define ICONV_CONST 
++
++/* Enable multithreading support. */
++#define MULTITHREADED 1
++
++/* Generate OPI comments in PS output. */
++#define OPI_SUPPORT 1
++
++/* Name of package */
++#define PACKAGE "poppler"
++
++/* Define to the address where bug reports for this package should be sent. */
++#define PACKAGE_BUGREPORT "https://bugs.freedesktop.org/enter_bug.cgi?product=poppler"
++
++/* Define to the full name of this package. */
++#define PACKAGE_NAME "poppler"
++
++/* Define to the full name and version of this package. */
++#define PACKAGE_STRING "poppler 0.66.0"
++
++/* Define to the one symbol short name of this package. */
++#define PACKAGE_TARNAME "poppler"
++
++/* Define to the home page for this package. */
++#define PACKAGE_URL ""
++
++/* Define to the version of this package. */
++#define PACKAGE_VERSION "0.66.0"
++
++/* Poppler data dir */
++#define POPPLER_DATADIR "/usr/local/share/poppler"
++
++/* Support for curl based doc builder is compiled in. */
++/* #undef POPPLER_HAS_CURL_SUPPORT */
++
++/* Include support for CMYK rasterization */
++/* #undef SPLASH_CMYK */
++
++/* Enable word list support. */
++#define TEXTOUT_WORD_LIST 1
++
++/* Defines if use cms */
++/* #undef USE_CMS */
++
++/* Use fixed point arithmetic in the Splash backend */
++/* #undef USE_FIXEDPOINT */
++
++/* Use single precision arithmetic in the Splash backend */
++/* #undef USE_FLOAT */
++
++/* Version number of package */
++#define VERSION "0.66.0"
++
++#if defined(__APPLE__)
++#elif defined (_WIN32)
++/* Use win32 font configuration backend */
++#define WITH_FONTCONFIGURATION_WIN32 1
++#else
++/* Use fontconfig font configuration backend */
++#define WITH_FONTCONFIGURATION_FONTCONFIG 1
++#endif
++
++/* OpenJPEG with the OPJ_DPARAMETERS_IGNORE_PCLR_CMAP_CDEF_FLAG flag */
++/* #undef WITH_OPENJPEG_IGNORE_PCLR_CMAP_CDEF_FLAG */
++
++/* MS defined snprintf as deprecated but then added it in Visual Studio 2015. */
++#if defined(_MSC_VER) && _MSC_VER < 1900
++#define snprintf _snprintf
++#endif
++
++//------------------------------------------------------------------------
++// popen
++//------------------------------------------------------------------------
++#if defined(_MSC_VER) || defined(__BORLANDC__)
++#define popen _popen
++#define pclose _pclose
++#endif
++
++/* Number of bits in a file offset, on hosts where this is settable. */
++/* #undef _FILE_OFFSET_BITS */
++
++/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */
++/* TODO This is wrong, port if needed #undef _LARGEFILE_SOURCE */
++
++/* Define for large files, on AIX-style hosts. */
++/* TODO This is wrong, port if needed #undef _LARGE_FILES */
+diff --git a/poppler/poppler-config.h b/poppler/poppler-config.h
+new file mode 100644
+index 0fbd336a..451213f8 100644
+--- /dev/null
++++ b/poppler/poppler-config.h
+@@ -0,0 +1,168 @@
++//================================================= -*- mode: c++ -*- ====
++//
++// poppler-config.h
++//
++// Copyright 1996-2011 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) 2014 Bogdan Cristea <cristeab at gmail.com>
++// 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>
++//
++// 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 POPPLER_CONFIG_H
++#define POPPLER_CONFIG_H
++
++// We duplicate some of the config.h #define's here since they are
++// used in some of the header files we install.  The #ifndef/#endif
++// around #undef look odd, but it's to silence warnings about
++// redefining those symbols.
++
++/* Defines the poppler version. */
++#ifndef POPPLER_VERSION
++#define POPPLER_VERSION "0.66.0"
++#endif
++
++/* Enable multithreading support. */
++#ifndef MULTITHREADED
++#define MULTITHREADED 1
++#endif
++
++/* Use fixedpoint. */
++#ifndef USE_FIXEDPOINT
++/* #undef USE_FIXEDPOINT */
++#endif
++
++/* Use single precision arithmetic in the Splash backend */
++#ifndef USE_FLOAT
++/* #undef USE_FLOAT */
++#endif
++
++/* Include support for OPI comments. */
++#ifndef OPI_SUPPORT
++#define OPI_SUPPORT 1
++#endif
++
++/* Enable word list support. */
++#ifndef TEXTOUT_WORD_LIST
++#define TEXTOUT_WORD_LIST 1
++#endif
++
++/* Support for curl is compiled in. */
++#ifndef POPPLER_HAS_CURL_SUPPORT
++/* #undef POPPLER_HAS_CURL_SUPPORT */
++#endif
++
++/* Use libjpeg instead of builtin jpeg decoder. */
++#ifndef ENABLE_LIBJPEG
++#define ENABLE_LIBJPEG 1
++#endif
++
++/* Build against libtiff. */
++#ifndef ENABLE_LIBTIFF
++/* #define ENABLE_LIBTIFF 1 */
++#endif
++
++/* Build against libpng. */
++#ifndef ENABLE_LIBPNG
++/* #define ENABLE_LIBPNG 1 */
++#endif
++
++/* Use zlib instead of builtin zlib decoder. */
++#ifndef ENABLE_ZLIB
++/* #undef ENABLE_ZLIB */
++#endif
++
++/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
++   */
++#ifndef HAVE_DIRENT_H
++#if !defined(_WIN32)
++#define HAVE_DIRENT_H 1
++#endif
++#endif
++
++/* Defines if gettimeofday is available on your system */
++#ifndef HAVE_GETTIMEOFDAY
++#if !defined(_WIN32)
++#define HAVE_GETTIMEOFDAY 1
++#endif
++#endif
++
++/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
++#ifndef HAVE_NDIR_H
++/* #undef HAVE_NDIR_H */
++#endif
++
++/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
++   */
++#ifndef HAVE_SYS_DIR_H
++#if !defined(__APPLE__) && !defined(_WIN32)
++#define HAVE_SYS_DIR_H 1
++#endif
++#endif
++
++/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
++   */
++#ifndef HAVE_SYS_NDIR_H
++/* #undef HAVE_SYS_NDIR_H */
++#endif
++
++/* Defines if use cms */
++#ifndef USE_CMS
++/* #undef USE_CMS */
++#endif
++
++// 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
++
++//------------------------------------------------------------------------
++// version
++//------------------------------------------------------------------------
++
++// copyright notice
++#define popplerCopyright "Copyright 2005-2018 The Poppler Developers - http://poppler.freedesktop.org"
++#define xpdfCopyright "Copyright 1996-2011 Glyph & Cog, LLC"
++
++//------------------------------------------------------------------------
++// Win32 stuff
++//------------------------------------------------------------------------
++
++#if defined(_WIN32) && !defined(_MSC_VER)
++#include <windef.h>
++#else
++#define CDECL
++#endif
++
++//------------------------------------------------------------------------
++// Compiler
++//------------------------------------------------------------------------
++
++#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)
++#include <stdio.h> // __MINGW_PRINTF_FORMAT is defined in the mingw stdio.h
++#ifdef __MINGW_PRINTF_FORMAT
++#define GCC_PRINTF_FORMAT(fmt_index, va_index) \
++	__attribute__((__format__(__MINGW_PRINTF_FORMAT, fmt_index, va_index)))
++#else
++#define GCC_PRINTF_FORMAT(fmt_index, va_index) \
++	__attribute__((__format__(__printf__, fmt_index, va_index)))
++#endif
++#else
++#define GCC_PRINTF_FORMAT(fmt_index, va_index)
++#endif
++
++#endif /* POPPLER_CONFIG_H */
+diff --git a/cpp/poppler-version.h b/cpp/poppler-version.h
+new file mode 100644
+index 0fbd336a..451213f8 100644
+--- /dev/null
++++ b/cpp/poppler-version.h
+@@ -0,0 +1,39 @@
++/*
++ * Copyright (C) 2009, Pino Toscano <pino at kde.org>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2, or (at your option)
++ * any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
++ */
++
++#ifndef POPPLER_VERSION_H
++#define POPPLER_VERSION_H
++
++#include "poppler-global.h"
++
++#define POPPLER_VERSION "0.66.0"
++#define POPPLER_VERSION_MAJOR 0
++#define POPPLER_VERSION_MINOR 66
++#define POPPLER_VERSION_MICRO 0
++
++namespace poppler
++{
++
++POPPLER_CPP_EXPORT std::string version_string();
++POPPLER_CPP_EXPORT unsigned int version_major();
++POPPLER_CPP_EXPORT unsigned int version_minor();
++POPPLER_CPP_EXPORT unsigned int version_micro();
++
++}
++
++#endif
diff --git a/external/poppler/poppler-libjpeg.patch.1 b/external/poppler/poppler-libjpeg.patch.1
deleted file mode 100644
index c8d54beb75ae..000000000000
--- a/external/poppler/poppler-libjpeg.patch.1
+++ /dev/null
@@ -1,23 +0,0 @@
-do not override user supplied LIBJPEG_LIBS so we can use the one in WORKDIR
-
---- poppler/configure.orig	2016-11-02 13:58:32.530617038 +0100
-+++ poppler/configure	2016-11-02 13:58:06.233617689 +0100
-@@ -21377,8 +21377,9 @@
-           ac_save_USER_INCLUDES="$USER_INCLUDES"
-   ac_save_USER_LDFLAGS="$USER_LDFLAGS"
-   USER_INCLUDES="$USER_INCLUDES $LIBJPEG_CFLAGS"
--  USER_LDFLAGS="$USER_LDFLAGS $LIBJPEG_CFLAGS"
-+  USER_LDFLAGS="$USER_LDFLAGS $LIBJPEG_LIBS"
- 
-+if test -z "$LIBJPEG_LIBS"; then
- 
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libjpeg6b" >&5
- $as_echo_n "checking for libjpeg6b... " >&6; }
-@@ -21489,6 +21490,7 @@
- 
- 
- fi
-+fi
- 
- 
- ac_save_CPPFLAGS="$CPPFLAGS"
diff --git a/external/poppler/poppler-mac-fake.patch.1 b/external/poppler/poppler-mac-fake.patch.1
deleted file mode 100644
index d0b1936658ca..000000000000
--- a/external/poppler/poppler-mac-fake.patch.1
+++ /dev/null
@@ -1,13 +0,0 @@
-diff -ur poppler.org/poppler/GlobalParams.cc poppler/poppler/GlobalParams.cc
---- poppler.org/poppler/GlobalParams.cc	2013-07-09 06:24:38.000000000 -0500
-+++ poppler/poppler/GlobalParams.cc	2013-07-09 06:25:18.000000000 -0500
-@@ -1327,7 +1327,7 @@
-   return path;
- }
- 
--#elif WITH_FONTCONFIGURATION_WIN32
-+#elif WITH_FONTCONFIGURATION_WIN32 && defined(_WIN32)
- #include "GlobalParamsWin.cc"
- 
- GooString *GlobalParams::findBase14FontFile(GooString *base14Name, GfxFont *font) {
-
diff --git a/external/poppler/poppler-notests.patch.1 b/external/poppler/poppler-notests.patch.1
deleted file mode 100644
index ffac17312959..000000000000
--- a/external/poppler/poppler-notests.patch.1
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -483,7 +483,7 @@
- @BUILD_POPPLER_QT4_TRUE at qt4_pc_file = poppler-qt4.pc
- @BUILD_POPPLER_CPP_TRUE at cpp_subdir = cpp
- @BUILD_POPPLER_CPP_TRUE at cpp_pc_file = poppler-cpp.pc
--SUBDIRS = goo fofi $(splash_subdir) poppler utils $(glib_subdir) test $(qt4_subdir) $(qt5_subdir) $(cpp_subdir)
-+SUBDIRS = goo fofi $(splash_subdir) poppler utils $(glib_subdir) $(qt4_subdir) $(qt5_subdir) $(cpp_subdir)
- 
- # Add CMake buildsystem files here so they get added on make dist
- EXTRA_DIST = README-XPDF poppler.pc.in poppler-uninstalled.pc.in \
diff --git a/external/poppler/ubsan.patch.0 b/external/poppler/ubsan.patch.0
deleted file mode 100644
index f6e4667dc133..000000000000
--- a/external/poppler/ubsan.patch.0
+++ /dev/null
@@ -1,230 +0,0 @@
---- poppler/Form.cc
-+++ poppler/Form.cc
-@@ -463,12 +463,11 @@
- // FormField
- //========================================================================
- 
--FormField::FormField(PDFDoc *docA, Object *aobj, const Ref& aref, FormField *parentA, std::set<int> *usedParents, FormFieldType ty)
-+FormField::FormField(PDFDoc *docA, Object *aobj, const Ref& aref, FormField *parentA, FormFieldType ty)
- {
-   doc = docA;
-   xref = doc->getXRef();
-   obj = aobj->copy();
--  Dict* dict = obj.getDict();
-   ref.num = ref.gen = 0;
-   type = ty;
-   parent = parentA;
-@@ -483,7 +482,11 @@
-   hasQuadding = gFalse;
- 
-   ref = aref;
-+}
- 
-+void FormField::init(std::set<int> *usedParents)
-+{
-+  Dict* dict = obj.getDict();
-   //childs
-   Object obj1 = dict->lookup("Kids");
-   if (obj1.isArray()) {
-@@ -803,9 +806,15 @@
- //------------------------------------------------------------------------
- // FormFieldButton
- //------------------------------------------------------------------------
--FormFieldButton::FormFieldButton(PDFDoc *docA, Object *aobj, const Ref& ref, FormField *parent, std::set<int> *usedParents)
--  : FormField(docA, aobj, ref, parent, usedParents, formButton)
-+FormFieldButton::FormFieldButton(PDFDoc *docA, Object *aobj, const Ref& ref, FormField *parent)
-+  : FormField(docA, aobj, ref, parent, formButton)
- {
-+}
-+
-+void FormFieldButton::init(std::set<int> *usedParents)
-+{
-+  FormField::init(usedParents);
-+
-   Dict* dict = obj.getDict();
-   active_child = -1;
-   noAllOff = false;
-@@ -983,9 +992,15 @@
- //------------------------------------------------------------------------
- // FormFieldText
- //------------------------------------------------------------------------
--FormFieldText::FormFieldText(PDFDoc *docA, Object *aobj, const Ref& ref, FormField *parent, std::set<int> *usedParents)
--  : FormField(docA, aobj, ref, parent, usedParents, formText)
-+FormFieldText::FormFieldText(PDFDoc *docA, Object *aobj, const Ref& ref, FormField *parent)
-+  : FormField(docA, aobj, ref, parent, formText)
- {
-+}
-+
-+void FormFieldText::init(std::set<int> *usedParents)
-+{
-+  FormField::init(usedParents);
-+
-   Dict* dict = obj.getDict();
-   Object obj1;
-   content = NULL;
-@@ -1076,9 +1091,15 @@
- //------------------------------------------------------------------------
- // FormFieldChoice
- //------------------------------------------------------------------------
--FormFieldChoice::FormFieldChoice(PDFDoc *docA, Object *aobj, const Ref& ref, FormField *parent, std::set<int> *usedParents)
--  : FormField(docA, aobj, ref, parent, usedParents, formChoice)
-+FormFieldChoice::FormFieldChoice(PDFDoc *docA, Object *aobj, const Ref& ref, FormField *parent)
-+  : FormField(docA, aobj, ref, parent, formChoice)
- {
-+}
-+
-+void FormFieldChoice::init(std::set<int> *usedParents)
-+{
-+  FormField::init(usedParents);
-+
-   numChoices = 0;
-   choices = NULL;
-   editedChoice = NULL;
-@@ -1379,11 +1400,17 @@
- //------------------------------------------------------------------------
- // FormFieldSignature
- //------------------------------------------------------------------------
--FormFieldSignature::FormFieldSignature(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent, std::set<int> *usedParents)
--  : FormField(docA, dict, ref, parent, usedParents, formSignature),
-+FormFieldSignature::FormFieldSignature(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent)
-+  : FormField(docA, dict, ref, parent, formSignature),
-     signature_type(adbe_pkcs7_detached),
-     signature(nullptr), signature_info(nullptr)
- {
-+}
-+
-+void FormFieldSignature::init(std::set<int> *usedParents)
-+{
-+  FormField::init(usedParents);
-+
-   signature = NULL;
- 
-   signature_info = new SignatureInfo();
-@@ -1691,15 +1718,15 @@
- 
-     Object obj2 = Form::fieldLookup(obj->getDict (), "FT");
-     if (obj2.isName("Btn")) {
--      field = new FormFieldButton(docA, obj, pref, parent, usedParents);
-+      field = FormFieldButton::create(docA, obj, pref, parent, usedParents);
-     } else if (obj2.isName("Tx")) {
--      field = new FormFieldText(docA, obj, pref, parent, usedParents);
-+      field = FormFieldText::create(docA, obj, pref, parent, usedParents);
-     } else if (obj2.isName("Ch")) {
--      field = new FormFieldChoice(docA, obj, pref, parent, usedParents);
-+      field = FormFieldChoice::create(docA, obj, pref, parent, usedParents);
-     } else if (obj2.isName("Sig")) {
--      field = new FormFieldSignature(docA, obj, pref, parent, usedParents);
-+      field = FormFieldSignature::create(docA, obj, pref, parent, usedParents);
-     } else { //we don't have an FT entry => non-terminal field
--      field = new FormField(docA, obj, pref, parent, usedParents);
-+      field = FormField::create(docA, obj, pref, parent, usedParents);
-     }
- 
-     return field;
---- poppler/Form.h
-+++ poppler/Form.h
-@@ -264,8 +264,16 @@
- //------------------------------------------------------------------------
- 
- class FormField {
--public:
--  FormField(PDFDoc *docA, Object *aobj, const Ref& aref, FormField *parent, std::set<int> *usedParents, FormFieldType t=formUndef);
-+protected:
-+  FormField(PDFDoc *docA, Object *aobj, const Ref& aref, FormField *parent, FormFieldType t);
-+  void init(std::set<int> *usedParents);
-+public:
-+  static FormField *create(PDFDoc *docA, Object *aobj, const Ref& aref, FormField *parent, std::set<int> *usedParents, FormFieldType t=formUndef)
-+  {
-+    FormField *f = new FormField(docA, aobj, aref, parent, t);
-+    f->init(usedParents);
-+    return f;
-+  }
- 
-   virtual ~FormField();
- 
-@@ -338,8 +346,16 @@
- //------------------------------------------------------------------------
- 
- class FormFieldButton: public FormField {
--public:
--  FormFieldButton(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent, std::set<int> *usedParents);
-+private:
-+  FormFieldButton(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent);
-+  void init(std::set<int> *usedParents);
-+public:
-+  static FormFieldButton *create(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent, std::set<int> *usedParents)
-+  {
-+    FormFieldButton *f = new FormFieldButton(docA, dict, ref, parent);
-+    f->init(usedParents);
-+    return f;
-+  }
- 
-   FormButtonType getButtonType () { return btype; }
- 
-@@ -384,8 +400,16 @@
- //------------------------------------------------------------------------
- 
- class FormFieldText: public FormField {
--public:
--  FormFieldText(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent, std::set<int> *usedParents);
-+private:
-+  FormFieldText(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent);
-+  void init(std::set<int> *usedParents);
-+public:
-+  static FormFieldText *create(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent, std::set<int> *usedParents)
-+  {
-+    FormFieldText *f = new FormFieldText(docA, dict, ref, parent);
-+    f->init(usedParents);
-+    return f;
-+  }
-   
-   GooString* getContent () { return content; }
-   GooString* getContentCopy ();
-@@ -422,8 +446,16 @@
- //------------------------------------------------------------------------
- 
- class FormFieldChoice: public FormField {
--public:
--  FormFieldChoice(PDFDoc *docA, Object *aobj, const Ref& ref, FormField *parent, std::set<int> *usedParents);
-+private:
-+  FormFieldChoice(PDFDoc *docA, Object *aobj, const Ref& ref, FormField *parent);
-+  void init(std::set<int> *usedParents);
-+public:
-+  static FormFieldChoice *create(PDFDoc *docA, Object *aobj, const Ref& ref, FormField *parent, std::set<int> *usedParents)
-+  {
-+    FormFieldChoice *f = new FormFieldChoice(docA, aobj, ref, parent);
-+    f->init(usedParents);
-+    return f;
-+  }
- 
-   ~FormFieldChoice();
- 
-@@ -491,8 +523,16 @@
- 
- class FormFieldSignature: public FormField {
-   friend class FormWidgetSignature;
--public:
--  FormFieldSignature(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent, std::set<int> *usedParents);
-+private:
-+  FormFieldSignature(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent);
-+  void init(std::set<int> *usedParents);
-+public:
-+  static FormFieldSignature *create(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent, std::set<int> *usedParents)
-+  {
-+    FormFieldSignature *f = new FormFieldSignature(docA, dict, ref, parent);
-+    f->init(usedParents);
-+    return f;
-+  }
- 
-   // Use -1 for now as validationTime
-   SignatureInfo *validateSignature(bool doVerifyCert, bool forceRevalidation, time_t validationTime);
---- poppler/XRef.cc
-+++ poppler/XRef.cc
-@@ -293,6 +293,7 @@
-   xRefStream = gFalse;
-   scannedSpecialFlags = gFalse;
-   encrypted = gFalse;
-+  encAlgorithm = cryptRC4;
-   permFlags = defPermFlags;
-   ownerPasswordOk = gFalse;
-   rootNum = -1;
commit 5a6f9a9e5fb23e0d0194aad17676bbb47aab0932
Author: Rene Engelhard <rene at debian.org>
Date:   Tue Apr 24 15:56:23 2018 +0200

    fix build with poppler 0.64
    
    GooString became const...
    
    Change-Id: Icc95be2e8603a4e22c6a9ac2008986bacd0bfba5
    (cherry picked from commit 42cebff14f7d486c20f04863681cc5ef4602f4eb)
    Reviewed-on: https://gerrit.libreoffice.org/56258
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>
    Tested-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>

diff --git a/sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.cxx b/sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.cxx
index 9b9e0f2d3a61..afa60766d2ee 100644
--- a/sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.cxx
+++ b/sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.cxx
@@ -451,6 +451,9 @@ int PDFOutDev::parseFont( long long nNewId, GfxFont* gfxFont, GfxState* state )
     FontAttributes aNewFont;
     int nSize = 0;
 
+#if POPPLER_CHECK_VERSION(0, 64, 0)
+    const
+#endif
     GooString* pFamily = gfxFont->getName();
     if( pFamily )
     {
@@ -748,6 +751,9 @@ void PDFOutDev::updateFont(GfxState *state)
         FontAttributes aFont;
         int nEmbedSize=0;
 
+#if POPPLER_CHECK_VERSION(0, 64, 0)
+        const
+#endif
         Ref* pID = gfxFont->getID();
         // TODO(Q3): Portability problem
         long long fontID = (long long)pID->gen << 32 | (long long)pID->num;
@@ -931,7 +937,11 @@ void PDFOutDev::drawChar(GfxState *state, double x, double y,
     printf( "\n" );
 }
 
+#if POPPLER_CHECK_VERSION(0, 64, 0)
+void PDFOutDev::drawString(GfxState*, const GooString* /*s*/)
+#else
 void PDFOutDev::drawString(GfxState*, GooString* /*s*/)
+#endif
 {
     // TODO(F3): NYI
 }
diff --git a/sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.hxx b/sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.hxx
index 73ea8bf1062b..8304738d9599 100644
--- a/sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.hxx
+++ b/sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.hxx
@@ -222,7 +222,11 @@ namespace pdfi
                               double dx, double dy,
                               double originX, double originY,
                               CharCode code, int nBytes, Unicode *u, int uLen) override;
+#if POPPLER_CHECK_VERSION(0, 64, 0)
+        virtual void drawString(GfxState *state, const GooString *s) override;
+#else
         virtual void drawString(GfxState *state, GooString *s) override;
+#endif
         virtual void endTextObject(GfxState *state) override;
 
         //----- image drawing
commit d8c69902b954230b5cb17cefcf2dd7fd59a982d9
Author: Dominique Leuenberger <dimstar at suse.de>
Date:   Fri Jan 5 12:16:03 2018 +0100

    Allow building with poppler-0.62
    
    Change-Id: Ia627f1628a67dd8ece7d9318639d9ccd06b89765
    Reviewed-on: https://gerrit.libreoffice.org/47460
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Michael Stahl <mstahl at redhat.com>
    (cherry picked from commit 38368be8527ca655854ee1231d9f355b8c0591ec)
    Reviewed-on: https://gerrit.libreoffice.org/56257
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>
    Tested-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>

diff --git a/sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.cxx b/sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.cxx
index 4282999db6e0..9b9e0f2d3a61 100644
--- a/sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.cxx
+++ b/sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.cxx
@@ -32,11 +32,13 @@
 #pragma warning(push, 1)
 #endif
 
-// sigh, UTF8.h was removed in poppler-0.21.0 and put back in 0.21.1
+// sigh, UTF8.h was removed in poppler-0.21.0 and put back in 0.21.1, then renamed to UnicodeMapFuncs.h in 0.62.0
 // FIXME: we can't use #if POPPLER_CHECK_VERSION(0, 21, 0) && !POPPLER_CHECK_VERSION(0, 21, 1)
 //        because the internal poppler does not provide poppler-version.h and the macro always returns 0
-#if POPPLER_CHECK_VERSION(0, 21, 1)
-#include "UTF8.h"
+#if POPPLER_CHECK_VERSION(0, 62, 0)
+#include <UnicodeMapFuncs.h>
+#elif POPPLER_CHECK_VERSION(0, 21, 1)
+#include <UTF8.h>
 #elif POPPLER_CHECK_VERSION(0, 21, 0)
 #include "UTF.h"
 #else
@@ -912,7 +914,11 @@ void PDFOutDev::drawChar(GfxState *state, double x, double y,
             );
 
     // silence spurious warning
+#if POPPLER_CHECK_VERSION(0, 62, 0)
+    (void)&mapUTF16;
+#else
     (void)&mapUCS2;
+#endif
 
     char buf[9];
     for( int i=0; i<uLen; ++i )
commit 4490513018868f1752c693c9480d28277920a3e0
Author: David Tardon <dtardon at redhat.com>
Date:   Thu Sep 7 15:50:09 2017 +0200

    upload poppler 0.59.0
    
    Change-Id: I21dfa3aa04bd960cb2fb87a53213ae4bbd510a24
    Reviewed-on: https://gerrit.libreoffice.org/42061
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: David Tardon <dtardon at redhat.com>
    (cherry picked from commit 1c983335116a6f09cabf0b3eae7f51951111341e)
    Reviewed-on: https://gerrit.libreoffice.org/56256
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>
    Tested-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>

diff --git a/download.lst b/download.lst
index ccd5e8b3b1bd..5677ab58e433 100644
--- a/download.lst
+++ b/download.lst
@@ -129,8 +129,8 @@ export PAGEMAKER_TARBALL := libpagemaker-0.0.3.tar.bz2
 export PIXMAN_TARBALL := c63f411b3ad147db2bcce1bf262a0e02-pixman-0.24.4.tar.bz2
 export PNG_MD5SUM := 897ccec1ebfb0922e83c2bfaa1be8748
 export PNG_TARBALL := libpng-1.6.28.tar.gz
-export POPPLER_MD5SUM := f7a8230626b6d2061acfdc852930b7dd
-export POPPLER_TARBALL := poppler-0.55.0.tar.xz
+export POPPLER_MD5SUM := 6e44408a3b4f4a738f8a6770d0aea8a5
+export POPPLER_TARBALL := poppler-0.59.0.tar.xz
 export POSTGRESQL_TARBALL := c0b4799ea9850eae3ead14f0a60e9418-postgresql-9.2.1.tar.bz2
 
 ifeq ($(PYTHON_VERSION_MINOR),3)
diff --git a/external/poppler/0001-Fix-building-with-old-clang.patch.1 b/external/poppler/0001-Fix-building-with-old-clang.patch.1
new file mode 100644
index 000000000000..dcddd11d2967
--- /dev/null
+++ b/external/poppler/0001-Fix-building-with-old-clang.patch.1
@@ -0,0 +1,25 @@
+From dd80c182cbcb188af0dd590f222ba9bbb31e3fb7 Mon Sep 17 00:00:00 2001
+From: Albert Astals Cid <aacid at kde.org>
+Date: Mon, 4 Sep 2017 19:36:06 +0200
+Subject: [PATCH] Fix building with old clang
+
+---
+ poppler/StructElement.cc | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/poppler/StructElement.cc b/poppler/StructElement.cc
+index 0fbd336a..451213f8 100644
+--- a/poppler/StructElement.cc
++++ b/poppler/StructElement.cc
+@@ -248,6 +248,8 @@ struct AttributeMapEntry {
+ };
+ 
+ struct AttributeDefaults {
++  AttributeDefaults() {}; // needed to support old clang
++
+   Object Inline  = Object(objName, "Inline");
+   Object LrTb = Object(objName, "LrTb");
+   Object Normal = Object(objName, "Normal");
+-- 
+2.13.5
+
diff --git a/external/poppler/UnpackedTarball_poppler.mk b/external/poppler/UnpackedTarball_poppler.mk
index f72c040c513b..94c8eb650dbc 100644
--- a/external/poppler/UnpackedTarball_poppler.mk
+++ b/external/poppler/UnpackedTarball_poppler.mk
@@ -17,6 +17,7 @@ $(eval $(call gb_UnpackedTarball_add_patches,poppler,\
 	external/poppler/poppler-mac-fake.patch.1 \
 	external/poppler/ubsan.patch.0 \
 	external/poppler/poppler-libjpeg.patch.1 \
+	external/poppler/0001-Fix-building-with-old-clang.patch.1 \
 ))
 
 # vim: set noet sw=4 ts=4:
diff --git a/external/poppler/ubsan.patch.0 b/external/poppler/ubsan.patch.0
index e0bf164ce7fc..f6e4667dc133 100644
--- a/external/poppler/ubsan.patch.0
+++ b/external/poppler/ubsan.patch.0
@@ -9,7 +9,7 @@
  {
    doc = docA;
    xref = doc->getXRef();
-   aobj->copy(&obj);
+   obj = aobj->copy();
 -  Dict* dict = obj.getDict();
    ref.num = ref.gen = 0;
    type = ty;
@@ -23,9 +23,9 @@
 +void FormField::init(std::set<int> *usedParents)
 +{
 +  Dict* dict = obj.getDict();
-   Object obj1;
    //childs
-   if (dict->lookup("Kids", &obj1)->isArray()) {
+   Object obj1 = dict->lookup("Kids");
+   if (obj1.isArray()) {
 @@ -803,9 +806,15 @@
  //------------------------------------------------------------------------
  // FormFieldButton
@@ -80,14 +80,16 @@
    numChoices = 0;
    choices = NULL;
    editedChoice = NULL;
-@@ -1379,9 +1400,15 @@
+@@ -1379,11 +1400,17 @@
  //------------------------------------------------------------------------
  // FormFieldSignature
  //------------------------------------------------------------------------
 -FormFieldSignature::FormFieldSignature(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent, std::set<int> *usedParents)
--  : FormField(docA, dict, ref, parent, usedParents, formSignature)
+-  : FormField(docA, dict, ref, parent, usedParents, formSignature),
 +FormFieldSignature::FormFieldSignature(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent)
-+  : FormField(docA, dict, ref, parent, formSignature)
++  : FormField(docA, dict, ref, parent, formSignature),
+     signature_type(adbe_pkcs7_detached),
+     signature(nullptr), signature_info(nullptr)
  {
 +}
 +
@@ -99,9 +101,9 @@
  
    signature_info = new SignatureInfo();
 @@ -1691,15 +1718,15 @@
-     FormField *field;
  
-     if (Form::fieldLookup(obj->getDict (), "FT", &obj2)->isName("Btn")) {
+     Object obj2 = Form::fieldLookup(obj->getDict (), "FT");
+     if (obj2.isName("Btn")) {
 -      field = new FormFieldButton(docA, obj, pref, parent, usedParents);
 +      field = FormFieldButton::create(docA, obj, pref, parent, usedParents);
      } else if (obj2.isName("Tx")) {
@@ -117,8 +119,8 @@
 -      field = new FormField(docA, obj, pref, parent, usedParents);
 +      field = FormField::create(docA, obj, pref, parent, usedParents);
      }
-     obj2.free();
  
+     return field;
 --- poppler/Form.h
 +++ poppler/Form.h
 @@ -264,8 +264,16 @@
@@ -198,9 +200,9 @@
    ~FormFieldChoice();
  
 @@ -491,8 +523,16 @@
- //------------------------------------------------------------------------
  
  class FormFieldSignature: public FormField {
+   friend class FormWidgetSignature;
 -public:
 -  FormFieldSignature(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent, std::set<int> *usedParents);
 +private:
@@ -214,8 +216,8 @@
 +    return f;
 +  }
  
-   SignatureInfo *validateSignature(bool doVerifyCert, bool forceRevalidation);
- 
+   // Use -1 for now as validationTime
+   SignatureInfo *validateSignature(bool doVerifyCert, bool forceRevalidation, time_t validationTime);
 --- poppler/XRef.cc
 +++ poppler/XRef.cc
 @@ -293,6 +293,7 @@
commit 6ce93fcb4bc3cbb4f00d2733a25c9f14cbcc0838
Author: David Tardon <dtardon at redhat.com>
Date:   Wed May 24 19:09:54 2017 +0200

    upload poppler 0.55.0
    
    Change-Id: I19b7d324a2dc50d006b4d255ddb6a5c1f15bc616
    Reviewed-on: https://gerrit.libreoffice.org/37998
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: David Tardon <dtardon at redhat.com>
    (cherry picked from commit b12e16f8fc186117cbb20cc3866bf052a3d75515)
    Signed-off-by: David Tardon <dtardon at redhat.com>
    (cherry picked from commit 51775f495f0399177edbcabb2ad881cdd9f57e0f)
    Reviewed-on: https://gerrit.libreoffice.org/56255
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>
    Tested-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>

diff --git a/download.lst b/download.lst
index 18681926e860..ccd5e8b3b1bd 100644
--- a/download.lst
+++ b/download.lst
@@ -129,8 +129,8 @@ export PAGEMAKER_TARBALL := libpagemaker-0.0.3.tar.bz2
 export PIXMAN_TARBALL := c63f411b3ad147db2bcce1bf262a0e02-pixman-0.24.4.tar.bz2
 export PNG_MD5SUM := 897ccec1ebfb0922e83c2bfaa1be8748
 export PNG_TARBALL := libpng-1.6.28.tar.gz
-export POPPLER_MD5SUM := 9e057ed8eee1f9979fa75d8f044783b8
-export POPPLER_TARBALL := poppler-0.49.0.tar.xz
+export POPPLER_MD5SUM := f7a8230626b6d2061acfdc852930b7dd
+export POPPLER_TARBALL := poppler-0.55.0.tar.xz
 export POSTGRESQL_TARBALL := c0b4799ea9850eae3ead14f0a60e9418-postgresql-9.2.1.tar.bz2
 
 ifeq ($(PYTHON_VERSION_MINOR),3)
diff --git a/external/poppler/ExternalProject_poppler.mk b/external/poppler/ExternalProject_poppler.mk
index 2a83b164ce4d..83d51b9ea9e7 100644
--- a/external/poppler/ExternalProject_poppler.mk
+++ b/external/poppler/ExternalProject_poppler.mk
@@ -28,7 +28,7 @@ $(call gb_ExternalProject_get_state_target,poppler,build) :
 			--disable-shared \
 			--enable-xpdf-headers \
 			--disable-poppler-cpp \
-			--disable-libopenjpeg \
+			--enable-libopenjpeg=none \
 			--disable-libtiff \
 			--enable-libjpeg \
 			--disable-libpng \
diff --git a/external/poppler/ubsan.patch.0 b/external/poppler/ubsan.patch.0
index 67675253b5ad..e0bf164ce7fc 100644
--- a/external/poppler/ubsan.patch.0
+++ b/external/poppler/ubsan.patch.0
@@ -195,7 +195,7 @@
 +    return f;
 +  }
  
-   virtual ~FormFieldChoice();
+   ~FormFieldChoice();
  
 @@ -491,8 +523,16 @@
  //------------------------------------------------------------------------
commit b5411a225f25f7157649fcd42b710396b609d62c
Author: David Tardon <dtardon at redhat.com>
Date:   Wed Nov 23 13:47:52 2016 +0100

    upload poppler 0.49.0
    
    Change-Id: I98508a1a2b57c7b39d5be3bf216271001b6a0427
    Reviewed-on: https://gerrit.libreoffice.org/31111
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: David Tardon <dtardon at redhat.com>
    (cherry picked from commit 6f1ae11761ddfa2f928254ff51f1860155f670a4)
    Signed-off-by: David Tardon <dtardon at redhat.com>
    (cherry picked from commit b1d30ac04e95e72883c759110df6d5e46ce94510)
    Reviewed-on: https://gerrit.libreoffice.org/56254
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>
    Tested-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>

diff --git a/download.lst b/download.lst
index 958ed3048252..18681926e860 100644
--- a/download.lst
+++ b/download.lst
@@ -129,8 +129,8 @@ export PAGEMAKER_TARBALL := libpagemaker-0.0.3.tar.bz2
 export PIXMAN_TARBALL := c63f411b3ad147db2bcce1bf262a0e02-pixman-0.24.4.tar.bz2
 export PNG_MD5SUM := 897ccec1ebfb0922e83c2bfaa1be8748
 export PNG_TARBALL := libpng-1.6.28.tar.gz
-export POPPLER_MD5SUM := 8d61c91cb9e99ad38bba1b0b4432f174
-export POPPLER_TARBALL := poppler-0.48.0.tar.xz
+export POPPLER_MD5SUM := 9e057ed8eee1f9979fa75d8f044783b8
+export POPPLER_TARBALL := poppler-0.49.0.tar.xz
 export POSTGRESQL_TARBALL := c0b4799ea9850eae3ead14f0a60e9418-postgresql-9.2.1.tar.bz2
 
 ifeq ($(PYTHON_VERSION_MINOR),3)
diff --git a/external/poppler/UnpackedTarball_poppler.mk b/external/poppler/UnpackedTarball_poppler.mk
index afad5fba13b6..f72c040c513b 100644
--- a/external/poppler/UnpackedTarball_poppler.mk
+++ b/external/poppler/UnpackedTarball_poppler.mk
@@ -15,8 +15,6 @@ $(eval $(call gb_UnpackedTarball_add_patches,poppler,\
 	external/poppler/poppler-notests.patch.1 \
 	$(if $(filter MSC-120,$(COM)-$(VCVER)),external/poppler/poppler-snprintf.patch.1) \
 	external/poppler/poppler-mac-fake.patch.1 \
-	external/poppler/poppler-vs2013.patch.1 \
-	external/poppler/poppler-0.46.0-std-max.patch.1 \
 	external/poppler/ubsan.patch.0 \
 	external/poppler/poppler-libjpeg.patch.1 \
 ))
diff --git a/external/poppler/poppler-0.46.0-std-max.patch.1 b/external/poppler/poppler-0.46.0-std-max.patch.1
deleted file mode 100644
index 96a9abe88695..000000000000
--- a/external/poppler/poppler-0.46.0-std-max.patch.1
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/poppler/PSOutputDev.cc
-+++ b/poppler/PSOutputDev.cc
-@@ -48,6 +48,7 @@
- #include <signal.h>
- #include <math.h>
- #include <limits.h>
-+#include <algorithm>
- #include "goo/GooString.h"
- #include "goo/GooList.h"
- #include "goo/GooHash.h"
diff --git a/external/poppler/poppler-vs2013.patch.1 b/external/poppler/poppler-vs2013.patch.1
deleted file mode 100644
index ca892dfc2500..000000000000
--- a/external/poppler/poppler-vs2013.patch.1
+++ /dev/null
@@ -1,11 +0,0 @@
---- poppler/poppler/poppler-config.h.in
-+++ poppler/poppler/poppler-config.h.in
-@@ -186,7 +186,7 @@ char * strtok_r (char *s, const char *delim, char **save_ptr);
- #define GCC_PRINTF_FORMAT(fmt_index, va_index)
- #endif
- 
--#if defined(_MSC_VER)
-+#if defined(_MSC_VER) && _MSC_VER < 1800
- #define fmax(a, b) std::max(a, b)
- #define fmin(a, b) std::min(a, b)
- #endif
commit 8096faecce90b327c4ff0e0951460411471e52c8
Author: Michael Stahl <mstahl at redhat.com>
Date:   Thu Nov 3 11:13:29 2016 +0100

    poppler: remove obsolete ubsan patch hunk
    
    With eea709f67d91e271e3df37e6c6724b7b5870b1ee "poppler: build against
    libjpeg" the poppler internal JPEG code is no longer used.
    
    Change-Id: I018a53a495ec505af92bb9b1c1a0c42e0a4f35b8
    (cherry picked from commit 21ca0db5ec27662a3e047d7547eae9beb87b0b01)
    Reviewed-on: https://gerrit.libreoffice.org/56253
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>
    Tested-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>

diff --git a/external/poppler/ubsan.patch.0 b/external/poppler/ubsan.patch.0
index 575cb47dc682..67675253b5ad 100644
--- a/external/poppler/ubsan.patch.0
+++ b/external/poppler/ubsan.patch.0
@@ -216,43 +216,6 @@
  
    SignatureInfo *validateSignature(bool doVerifyCert, bool forceRevalidation);
  
---- poppler/Stream.cc
-+++ poppler/Stream.cc
-@@ -2966,12 +2966,12 @@
-       } else {
- 	amp = 0;
-       }
--      data[0] += (*prevDC += amp) << scanInfo.al;
-+      data[0] += (int) ((unsigned) (*prevDC += amp) << scanInfo.al);
-     } else {
-       if ((bit = readBit()) == 9999) {
- 	return gFalse;
-       }
--      data[0] += bit << scanInfo.al;
-+      data[0] += (unsigned) bit << scanInfo.al;
-     }
-     ++i;
-   }
-@@ -3064,7 +3064,7 @@
- 	  j = dctZigZag[i++];
- 	}
-       }
--      data[j] = amp << scanInfo.al;
-+      data[j] = (unsigned) amp << scanInfo.al;
-     }
-   }
- 
-@@ -3251,8 +3251,8 @@
-     v3 = p[6];
-     v4 = (dctSqrt1d2 * (p[1] - p[7]) + 128) >> 8;
-     v7 = (dctSqrt1d2 * (p[1] + p[7]) + 128) >> 8;
--    v5 = p[3] << 4;
--    v6 = p[5] << 4;
-+    v5 = (unsigned) p[3] << 4;
-+    v6 = (unsigned) p[5] << 4;
- 
-     // stage 3
-     t = (v0 - v1+ 1) >> 1;
 --- poppler/XRef.cc
 +++ poppler/XRef.cc
 @@ -293,6 +293,7 @@
commit 7f51b445b4dd3950527d826c01091be4e9a77be0
Author: David Tardon <dtardon at redhat.com>
Date:   Sat Oct 22 10:16:56 2016 +0200

    upload poppler 0.48.0
    
    Change-Id: I18c49505f71ab609e5cc0e4db759152c3c1d5825
    (cherry picked from commit dc522a114d24ad7c550c072d4f29f50a62260b77)
    Reviewed-on: https://gerrit.libreoffice.org/56252
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>
    Tested-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>

diff --git a/download.lst b/download.lst
index 42ed25265e27..958ed3048252 100644
--- a/download.lst
+++ b/download.lst
@@ -129,8 +129,8 @@ export PAGEMAKER_TARBALL := libpagemaker-0.0.3.tar.bz2
 export PIXMAN_TARBALL := c63f411b3ad147db2bcce1bf262a0e02-pixman-0.24.4.tar.bz2
 export PNG_MD5SUM := 897ccec1ebfb0922e83c2bfaa1be8748
 export PNG_TARBALL := libpng-1.6.28.tar.gz
-export POPPLER_MD5SUM := 38c758d84437378ec4f5aae9f875301d
-export POPPLER_TARBALL := poppler-0.46.0.tar.bz2
+export POPPLER_MD5SUM := 8d61c91cb9e99ad38bba1b0b4432f174
+export POPPLER_TARBALL := poppler-0.48.0.tar.xz
 export POSTGRESQL_TARBALL := c0b4799ea9850eae3ead14f0a60e9418-postgresql-9.2.1.tar.bz2
 
 ifeq ($(PYTHON_VERSION_MINOR),3)
diff --git a/external/poppler/UnpackedTarball_poppler.mk b/external/poppler/UnpackedTarball_poppler.mk
index efcbee7c7e0f..afad5fba13b6 100644
--- a/external/poppler/UnpackedTarball_poppler.mk
+++ b/external/poppler/UnpackedTarball_poppler.mk
@@ -17,7 +17,6 @@ $(eval $(call gb_UnpackedTarball_add_patches,poppler,\
 	external/poppler/poppler-mac-fake.patch.1 \
 	external/poppler/poppler-vs2013.patch.1 \
 	external/poppler/poppler-0.46.0-std-max.patch.1 \
-	external/poppler/poppler-0.46.0-unused-private-field.patch.1 \
 	external/poppler/ubsan.patch.0 \
 	external/poppler/poppler-libjpeg.patch.1 \
 ))
diff --git a/external/poppler/poppler-0.46.0-unused-private-field.patch.1 b/external/poppler/poppler-0.46.0-unused-private-field.patch.1
deleted file mode 100644
index e0765fc92251..000000000000
--- a/external/poppler/poppler-0.46.0-unused-private-field.patch.1
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/goo/GooString.h
-+++ b/goo/GooString.h
-@@ -175,7 +175,7 @@
-   // You can tweak the final object size for different time/space tradeoffs.
-   // In libc malloc(), rounding is 16 so it's best to choose a value that
-   // is a multiple of 16.
--  class MemoryLayout {
-+  struct MemoryLayout {
-       char c[sizeof(char*)];
-       int i;
-       char* s;
diff --git a/external/poppler/ubsan.patch.0 b/external/poppler/ubsan.patch.0
index a27f00f790d2..575cb47dc682 100644
--- a/external/poppler/ubsan.patch.0
+++ b/external/poppler/ubsan.patch.0
@@ -1,14 +1,3 @@
---- goo/GooString.cc
-+++ goo/GooString.cc
-@@ -161,7 +161,7 @@
-       // assert(s != s1) the roundedSize condition ensures this
-       if (newLength < length) {
- 	memcpy(s1, s, newLength);
--      } else {
-+      } else if (length != 0) {
- 	memcpy(s1, s, length);
-       }
-       if (s != sStatic)
 --- poppler/Form.cc
 +++ poppler/Form.cc
 @@ -463,12 +463,11 @@
commit 3c181843cb878f4ac5a563e0ceff582d46763a45
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Fri Oct 14 15:34:53 2016 +0200

    external/poppler: Avoid UBSan warning about undefined downcast
    
    ...of this-ptr of in-construction FormFieldSignature while still in the base
    FormField ctor, as happens (in the xpdfimport process) during
    CppunitTest_xmlsecurity_signing:
    
    > Form.cc:448:12: runtime error: downcast of address 0x60f000000040 which does not point to an object of type 'FormFieldSignature'
    > 0x60f000000040: note: object is of type 'FormField'
    >  03 00 00 6d  50 84 f2 00 00 00 00 00  03 00 00 00 04 00 00 00  00 00 00 00 01 be be be  07 00 00 00
    >               ^~~~~~~~~~~~~~~~~~~~~~~
    >               vptr for 'FormField'
    >     #0 0x73d7f4 in FormWidgetSignature::FormWidgetSignature(PDFDoc*, Object*, unsigned int, Ref, FormField*) workdir/UnpackedTarball/poppler/poppler/Form.cc:448:12
    >     #1 0x741713 in FormField::_createWidget(Object*, Ref) workdir/UnpackedTarball/poppler/poppler/Form.cc:677:34
    >     #2 0x73e747 in FormField::FormField(PDFDoc*, Object*, Ref const&, FormField*, std::set<int, std::less<int>, std::allocator<int> >*, FormFieldType) workdir/UnpackedTarball/poppler/poppler/Form.cc:547:7
    >     #3 0x74ec2b in FormFieldSignature::FormFieldSignature(PDFDoc*, Object*, Ref const&, FormField*, std::set<int, std::less<int>, std::allocator<int> >*) workdir/UnpackedTarball/poppler/poppler/Form.cc:1383:5
    >     #4 0x740d7f in Form::createFieldFromDict(Object*, PDFDoc*, Ref const&, FormField*, std::set<int, std::less<int>, std::allocator<int> >*) workdir/UnpackedTarball/poppler/poppler/Form.cc:1700:19
    >     #5 0x750727 in Form::Form(PDFDoc*, Object*) workdir/UnpackedTarball/poppler/poppler/Form.cc:1623:33
    >     #6 0x71d440 in Catalog::getForm() workdir/UnpackedTarball/poppler/poppler/Catalog.cc:1042:18
    >     #7 0x708572 in Annots::createAnnot(Dict*, Object*) workdir/UnpackedTarball/poppler/poppler/Annot.cc:7218:41
    >     #8 0x70772b in Annots::Annots(PDFDoc*, int, Object*) workdir/UnpackedTarball/poppler/poppler/Annot.cc:7128:17
    >     #9 0x87f3e9 in Page::getAnnots(XRef*) workdir/UnpackedTarball/poppler/poppler/Page.cc:405:18
    >     #10 0x8814b0 in Page::displaySlice(OutputDev*, double, double, int, bool, bool, int, int, int, int, bool, bool (*)(void*), void*, bool (*)(Annot*, void*), void*, bool) workdir/UnpackedTarball/poppler/poppler/Page.cc:611:15
    >     #11 0x880ff6 in Page::display(OutputDev*, double, double, int, bool, bool, bool, bool (*)(void*), void*, bool (*)(Annot*, void*), void*, bool) workdir/UnpackedTarball/poppler/poppler/Page.cc:521:3
    >     #12 0x88d906 in PDFDoc::displayPage(OutputDev*, int, double, double, int, bool, bool, bool, bool (*)(void*), void*, bool (*)(Annot*, void*), void*, bool) workdir/UnpackedTarball/poppler/poppler/PDFDoc.cc:491:20
    >     #13 0x5d59fb in main sdext/source/pdfimport/xpdfwrapper/wrapper_gpl.cxx:142:14
    >     #14 0x7f11600ea730 in __libc_start_main (/lib64/libc.so.6+0x20730)
    >     #15 0x459388 in _start (instdir/program/xpdfimport+0x459388)
    
    Change-Id: Ia808919c8d2363d616feb4664f314a77b40dfbb8
    (cherry picked from commit 55013a7776a43bb18b7fb8faa1839369c3383cb7)
    Reviewed-on: https://gerrit.libreoffice.org/56251
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>
    Tested-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>

diff --git a/external/poppler/ubsan.patch.0 b/external/poppler/ubsan.patch.0
index 623858da9f1f..a27f00f790d2 100644
--- a/external/poppler/ubsan.patch.0
+++ b/external/poppler/ubsan.patch.0
@@ -9,6 +9,224 @@
  	memcpy(s1, s, length);
        }
        if (s != sStatic)
+--- poppler/Form.cc
++++ poppler/Form.cc
+@@ -463,12 +463,11 @@
+ // FormField
+ //========================================================================
+ 
+-FormField::FormField(PDFDoc *docA, Object *aobj, const Ref& aref, FormField *parentA, std::set<int> *usedParents, FormFieldType ty)
++FormField::FormField(PDFDoc *docA, Object *aobj, const Ref& aref, FormField *parentA, FormFieldType ty)
+ {
+   doc = docA;
+   xref = doc->getXRef();
+   aobj->copy(&obj);
+-  Dict* dict = obj.getDict();
+   ref.num = ref.gen = 0;
+   type = ty;
+   parent = parentA;
+@@ -483,7 +482,11 @@
+   hasQuadding = gFalse;
+ 
+   ref = aref;
++}
+ 
++void FormField::init(std::set<int> *usedParents)
++{
++  Dict* dict = obj.getDict();
+   Object obj1;
+   //childs
+   if (dict->lookup("Kids", &obj1)->isArray()) {
+@@ -803,9 +806,15 @@
+ //------------------------------------------------------------------------
+ // FormFieldButton
+ //------------------------------------------------------------------------
+-FormFieldButton::FormFieldButton(PDFDoc *docA, Object *aobj, const Ref& ref, FormField *parent, std::set<int> *usedParents)
+-  : FormField(docA, aobj, ref, parent, usedParents, formButton)
++FormFieldButton::FormFieldButton(PDFDoc *docA, Object *aobj, const Ref& ref, FormField *parent)
++  : FormField(docA, aobj, ref, parent, formButton)
+ {
++}
++
++void FormFieldButton::init(std::set<int> *usedParents)
++{
++  FormField::init(usedParents);
++
+   Dict* dict = obj.getDict();
+   active_child = -1;
+   noAllOff = false;
+@@ -983,9 +992,15 @@
+ //------------------------------------------------------------------------
+ // FormFieldText
+ //------------------------------------------------------------------------
+-FormFieldText::FormFieldText(PDFDoc *docA, Object *aobj, const Ref& ref, FormField *parent, std::set<int> *usedParents)
+-  : FormField(docA, aobj, ref, parent, usedParents, formText)
++FormFieldText::FormFieldText(PDFDoc *docA, Object *aobj, const Ref& ref, FormField *parent)
++  : FormField(docA, aobj, ref, parent, formText)
+ {
++}
++
++void FormFieldText::init(std::set<int> *usedParents)
++{
++  FormField::init(usedParents);
++
+   Dict* dict = obj.getDict();
+   Object obj1;
+   content = NULL;
+@@ -1076,9 +1091,15 @@
+ //------------------------------------------------------------------------
+ // FormFieldChoice
+ //------------------------------------------------------------------------
+-FormFieldChoice::FormFieldChoice(PDFDoc *docA, Object *aobj, const Ref& ref, FormField *parent, std::set<int> *usedParents)
+-  : FormField(docA, aobj, ref, parent, usedParents, formChoice)
++FormFieldChoice::FormFieldChoice(PDFDoc *docA, Object *aobj, const Ref& ref, FormField *parent)
++  : FormField(docA, aobj, ref, parent, formChoice)
+ {
++}
++
++void FormFieldChoice::init(std::set<int> *usedParents)
++{
++  FormField::init(usedParents);
++
+   numChoices = 0;
+   choices = NULL;
+   editedChoice = NULL;
+@@ -1379,9 +1400,15 @@
+ //------------------------------------------------------------------------
+ // FormFieldSignature
+ //------------------------------------------------------------------------
+-FormFieldSignature::FormFieldSignature(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent, std::set<int> *usedParents)
+-  : FormField(docA, dict, ref, parent, usedParents, formSignature)
++FormFieldSignature::FormFieldSignature(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent)
++  : FormField(docA, dict, ref, parent, formSignature)
+ {
++}
++
++void FormFieldSignature::init(std::set<int> *usedParents)
++{
++  FormField::init(usedParents);
++
+   signature = NULL;
+ 
+   signature_info = new SignatureInfo();
+@@ -1691,15 +1718,15 @@
+     FormField *field;
+ 
+     if (Form::fieldLookup(obj->getDict (), "FT", &obj2)->isName("Btn")) {
+-      field = new FormFieldButton(docA, obj, pref, parent, usedParents);
++      field = FormFieldButton::create(docA, obj, pref, parent, usedParents);
+     } else if (obj2.isName("Tx")) {
+-      field = new FormFieldText(docA, obj, pref, parent, usedParents);
++      field = FormFieldText::create(docA, obj, pref, parent, usedParents);
+     } else if (obj2.isName("Ch")) {
+-      field = new FormFieldChoice(docA, obj, pref, parent, usedParents);
++      field = FormFieldChoice::create(docA, obj, pref, parent, usedParents);
+     } else if (obj2.isName("Sig")) {
+-      field = new FormFieldSignature(docA, obj, pref, parent, usedParents);
++      field = FormFieldSignature::create(docA, obj, pref, parent, usedParents);
+     } else { //we don't have an FT entry => non-terminal field
+-      field = new FormField(docA, obj, pref, parent, usedParents);
++      field = FormField::create(docA, obj, pref, parent, usedParents);
+     }
+     obj2.free();
+ 
+--- poppler/Form.h
++++ poppler/Form.h
+@@ -264,8 +264,16 @@
+ //------------------------------------------------------------------------
+ 
+ class FormField {
+-public:
+-  FormField(PDFDoc *docA, Object *aobj, const Ref& aref, FormField *parent, std::set<int> *usedParents, FormFieldType t=formUndef);
++protected:
++  FormField(PDFDoc *docA, Object *aobj, const Ref& aref, FormField *parent, FormFieldType t);
++  void init(std::set<int> *usedParents);
++public:
++  static FormField *create(PDFDoc *docA, Object *aobj, const Ref& aref, FormField *parent, std::set<int> *usedParents, FormFieldType t=formUndef)
++  {
++    FormField *f = new FormField(docA, aobj, aref, parent, t);
++    f->init(usedParents);
++    return f;
++  }
+ 
+   virtual ~FormField();
+ 
+@@ -338,8 +346,16 @@
+ //------------------------------------------------------------------------
+ 
+ class FormFieldButton: public FormField {
+-public:
+-  FormFieldButton(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent, std::set<int> *usedParents);
++private:
++  FormFieldButton(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent);
++  void init(std::set<int> *usedParents);
++public:
++  static FormFieldButton *create(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent, std::set<int> *usedParents)
++  {
++    FormFieldButton *f = new FormFieldButton(docA, dict, ref, parent);
++    f->init(usedParents);
++    return f;
++  }
+ 
+   FormButtonType getButtonType () { return btype; }
+ 
+@@ -384,8 +400,16 @@
+ //------------------------------------------------------------------------
+ 
+ class FormFieldText: public FormField {
+-public:
+-  FormFieldText(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent, std::set<int> *usedParents);
++private:
++  FormFieldText(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent);
++  void init(std::set<int> *usedParents);
++public:
++  static FormFieldText *create(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent, std::set<int> *usedParents)
++  {
++    FormFieldText *f = new FormFieldText(docA, dict, ref, parent);
++    f->init(usedParents);
++    return f;
++  }
+   
+   GooString* getContent () { return content; }
+   GooString* getContentCopy ();
+@@ -422,8 +446,16 @@
+ //------------------------------------------------------------------------
+ 
+ class FormFieldChoice: public FormField {
+-public:
+-  FormFieldChoice(PDFDoc *docA, Object *aobj, const Ref& ref, FormField *parent, std::set<int> *usedParents);
++private:
++  FormFieldChoice(PDFDoc *docA, Object *aobj, const Ref& ref, FormField *parent);
++  void init(std::set<int> *usedParents);
++public:
++  static FormFieldChoice *create(PDFDoc *docA, Object *aobj, const Ref& ref, FormField *parent, std::set<int> *usedParents)
++  {
++    FormFieldChoice *f = new FormFieldChoice(docA, aobj, ref, parent);
++    f->init(usedParents);
++    return f;
++  }
+ 
+   virtual ~FormFieldChoice();
+ 
+@@ -491,8 +523,16 @@
+ //------------------------------------------------------------------------
+ 
+ class FormFieldSignature: public FormField {
+-public:
+-  FormFieldSignature(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent, std::set<int> *usedParents);
++private:
++  FormFieldSignature(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent);
++  void init(std::set<int> *usedParents);
++public:
++  static FormFieldSignature *create(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent, std::set<int> *usedParents)
++  {
++    FormFieldSignature *f = new FormFieldSignature(docA, dict, ref, parent);
++    f->init(usedParents);
++    return f;
++  }
+ 
+   SignatureInfo *validateSignature(bool doVerifyCert, bool forceRevalidation);
+ 
 --- poppler/Stream.cc
 +++ poppler/Stream.cc
 @@ -2966,12 +2966,12 @@
commit 4ad153627120df1b962622085be0bd3673a23c8e
Author: Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>
Date:   Wed Jun 20 11:39:02 2018 +0200

    Don't load UI when running in unit tests
    
    There seems to be some exception for testFdo77229 that IsHeadlessModeEnabled
    returns false.
    So add another check here.
    
    Follow-up for c6dbeee59fa4fd8b43f3ae182c18bf04d57c52dc
    
    Change-Id: I023791bc9c8e1168abb943dc706c7fc8c17671b8

diff --git a/framework/source/loadenv/loadenv.cxx b/framework/source/loadenv/loadenv.cxx
index 4bb7b034c7c9..9a138b4d59f9 100644
--- a/framework/source/loadenv/loadenv.cxx
+++ b/framework/source/loadenv/loadenv.cxx
@@ -160,11 +160,11 @@ css::uno::Reference< css::lang::XComponent > LoadEnv::loadComponentFromURL(const
     {
         LoadEnv aEnv(xContext);
 
-
         EFeature loadEnvFeatures = E_WORK_WITH_UI;
         comphelper::NamedValueCollection aDescriptor( lArgs );
         // tdf#118238 Only disable UI interaction when loading as hidden
-        if (aDescriptor.get("Hidden") == uno::Any(true) || Application::IsHeadlessModeEnabled())
+        static bool const s_isTest(getenv("LO_TESTNAME") != nullptr);
+        if (aDescriptor.get("Hidden") == uno::Any(true) || Application::IsHeadlessModeEnabled() || s_isTest)
             loadEnvFeatures = E_NO_FEATURE;
 
         aEnv.initializeLoading(sURL,
commit c6dbeee59fa4fd8b43f3ae182c18bf04d57c52dc
Author: Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>
Date:   Tue Jun 19 11:47:08 2018 +0200

    tdf#118238 Only disable UI interaction when loading document as hidden
    
    The "quiet" interaction handler was used unconditionally
    when loading a document via the loadComponentFromURL API method.
    So no dialog was shown asking the user whether he wants to enable macros.
    
    With this patch, the "quiet" interaction handler is only used,
    when the document was loaded with the "Hidden" property set.
    
    Change-Id: Idd522d0bf605499b071390fb58312181b755dfca

diff --git a/framework/source/loadenv/loadenv.cxx b/framework/source/loadenv/loadenv.cxx
index 5961c57596ab..4bb7b034c7c9 100644
--- a/framework/source/loadenv/loadenv.cxx
+++ b/framework/source/loadenv/loadenv.cxx
@@ -28,6 +28,7 @@
 #include <services.h>
 #include <comphelper/interaction.hxx>
 #include <comphelper/lok.hxx>
+#include <comphelper/namedvaluecollection.hxx>
 #include <comphelper/propertysequence.hxx>
 #include <framework/interaction.hxx>
 #include <comphelper/processfactory.hxx>
@@ -159,11 +160,19 @@ css::uno::Reference< css::lang::XComponent > LoadEnv::loadComponentFromURL(const
     {
         LoadEnv aEnv(xContext);
 
+
+        EFeature loadEnvFeatures = E_WORK_WITH_UI;
+        comphelper::NamedValueCollection aDescriptor( lArgs );
+        // tdf#118238 Only disable UI interaction when loading as hidden
+        if (aDescriptor.get("Hidden") == uno::Any(true) || Application::IsHeadlessModeEnabled())
+            loadEnvFeatures = E_NO_FEATURE;
+
         aEnv.initializeLoading(sURL,
                                lArgs,
                                css::uno::Reference< css::frame::XFrame >(xLoader, css::uno::UNO_QUERY),
                                sTarget,
-                               nFlags);
+                               nFlags,
+                               loadEnvFeatures);
         aEnv.startLoading();
         aEnv.waitWhileLoading(); // wait for ever!
 


More information about the Libreoffice-commits mailing list