[packages/libreoffice] - fixes for poppler 22.3 and 22.4 (testing)
qboosh
qboosh at pld-linux.org
Tue Apr 19 22:05:39 CEST 2022
commit ec97da6f47114df93cfd87142d1bce39a407df95
Author: Jakub Bogusz <qboosh at pld-linux.org>
Date: Tue Apr 19 22:05:49 2022 +0200
- fixes for poppler 22.3 and 22.4 (testing)
libreoffice-poppler.patch | 156 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 156 insertions(+)
---
diff --git a/libreoffice-poppler.patch b/libreoffice-poppler.patch
new file mode 100644
index 0000000..bcb2678
--- /dev/null
+++ b/libreoffice-poppler.patch
@@ -0,0 +1,156 @@
+--- libreoffice-7.2.6.2/sdext/source/pdfimport/xpdfwrapper/wrapper_gpl.cxx.orig 2022-03-03 14:25:45.000000000 +0100
++++ libreoffice-7.2.6.2/sdext/source/pdfimport/xpdfwrapper/wrapper_gpl.cxx 2022-04-19 20:30:14.031282962 +0200
+@@ -115,6 +115,21 @@ int main(int argc, char **argv)
+ }
+
+ // PDFDoc takes over ownership for all strings below
++#if POPPLER_CHECK_VERSION(22, 3, 0)
++ auto pFileName = std::make_unique<GooString>(argv[1]);
++ auto pErrFileName = std::make_unique<GooString>(argv[2]);
++
++ // check for password string(s)
++ std::optional<GooString> pOwnerPasswordStr, pUserPasswordStr;
++ if( aPwBuf[0] != 0 )
++ pOwnerPasswordStr = GooString(aPwBuf);
++ else if( ownerPassword[0] != '\001' )
++ pOwnerPasswordStr = GooString(ownerPassword);
++ if( aPwBuf[0] != 0 )
++ pUserPasswordStr = GooString(aPwBuf);
++ else if( userPassword[0] != '\001' )
++ pUserPasswordStr = GooString(userPassword);
++#else
+ GooString* pFileName = new GooString(argv[1]);
+ GooString* pErrFileName = new GooString(argv[2]);
+
+@@ -129,6 +144,7 @@ int main(int argc, char **argv)
+ : (userPassword[0] != '\001'
+ ? new GooString(userPassword)
+ : nullptr ) );
++#endif
+ if( outputFile[0] != '\001' )
+ g_binary_out = fopen(outputFile,"wb");
+
+@@ -138,6 +154,15 @@ int main(int argc, char **argv)
+ _setmode( _fileno( g_binary_out ), _O_BINARY );
+ #endif
+
++#if POPPLER_CHECK_VERSION(22, 3, 0)
++ PDFDoc aDoc( std::move(pFileName),
++ pOwnerPasswordStr,
++ pUserPasswordStr );
++
++ PDFDoc aErrDoc( std::move(pErrFileName),
++ pOwnerPasswordStr,
++ pUserPasswordStr );
++#else
+ PDFDoc aDoc( pFileName,
+ pOwnerPasswordStr,
+ pUserPasswordStr );
+@@ -145,6 +170,7 @@ int main(int argc, char **argv)
+ PDFDoc aErrDoc( pErrFileName,
+ pOwnerPasswordStr,
+ pUserPasswordStr );
++#endif
+
+ // Check various permissions for aDoc.
+ PDFDoc &rDoc = aDoc.isOk()? aDoc: aErrDoc;
+--- libreoffice-7.2.6.2/sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.hxx.orig 2022-03-03 14:25:45.000000000 +0100
++++ libreoffice-7.2.6.2/sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.hxx 2022-04-19 19:53:39.226719292 +0200
+@@ -147,8 +147,13 @@ namespace pdfi
+ std::unique_ptr<UnicodeMap> m_pUtf8Map;
+ bool m_bSkipImages;
+
++#if POPPLER_CHECK_VERSION(22, 4, 0)
++ int parseFont( long long nNewId, std::shared_ptr<GfxFont> pFont, GfxState* state ) const;
++ void writeFontFile( std::shared_ptr<GfxFont> gfxFont ) const;
++#else
+ int parseFont( long long nNewId, GfxFont* pFont, GfxState* state ) const;
+ void writeFontFile( GfxFont* gfxFont ) const;
++#endif
+ #if POPPLER_CHECK_VERSION(0, 83, 0)
+ static void printPath( const GfxPath* pPath );
+ #else
+--- libreoffice-7.2.6.2/sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.cxx.orig 2022-03-03 14:25:45.000000000 +0100
++++ libreoffice-7.2.6.2/sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.cxx 2022-04-19 19:58:44.165967063 +0200
+@@ -427,7 +427,11 @@ static void writeMaskLF( OutputBuffer&
+ bool bInvert ) { writeMask_(o_rOutputBuf,str,width,height,bInvert); }
+
+
++#if POPPLER_CHECK_VERSION(22, 4, 0)
++int PDFOutDev::parseFont( long long nNewId, std::shared_ptr<GfxFont> gfxFont, GfxState* state ) const
++#else
+ int PDFOutDev::parseFont( long long nNewId, GfxFont* gfxFont, GfxState* state ) const
++#endif
+ {
+ FontAttributes aNewFont;
+ int nSize = 0;
+@@ -461,23 +465,49 @@ int PDFOutDev::parseFont( long long nNew
+ {
+ // TODO(P3): Unfortunately, need to read stream twice, since
+ // we must write byte count to stdout before
++#if POPPLER_CHECK_VERSION(22, 4, 0)
++ auto buf = gfxFont->readEmbFontFile( m_pDoc->getXRef() );
++ if( buf )
++ {
++ aNewFont.isEmbedded = true;
++ nSize = buf->size();
++ }
++#else
+ char* pBuf = gfxFont->readEmbFontFile( m_pDoc->getXRef(), &nSize );
+ if( pBuf )
+ {
+ aNewFont.isEmbedded = true;
+ gfree(pBuf);
+ }
++#endif
+ }
+
+ m_aFontMap[ nNewId ] = aNewFont;
+ return nSize;
+ }
+
++#if POPPLER_CHECK_VERSION(22, 4, 0)
++void PDFOutDev::writeFontFile( std::shared_ptr<GfxFont> gfxFont ) const
++#else
+ void PDFOutDev::writeFontFile( GfxFont* gfxFont ) const
++#endif
+ {
+ if( gfxFont->getType() != fontTrueType && gfxFont->getType() != fontType1 )
+ return;
+
++#if POPPLER_CHECK_VERSION(22, 4, 0)
++ auto buf = gfxFont->readEmbFontFile( m_pDoc->getXRef() );
++ if( !buf )
++ return;
++
++ // ---sync point--- see SYNC STREAMS above
++ fflush(stdout);
++
++ if( fwrite(buf->data(), 1, buf->size(), g_binary_out) != buf->size() )
++ exit(1); // error
++ // ---sync point--- see SYNC STREAMS above
++ fflush(g_binary_out);
++#else
+ int nSize = 0;
+ char* pBuf = gfxFont->readEmbFontFile( m_pDoc->getXRef(), &nSize );
+ if( !pBuf )
+@@ -494,6 +524,7 @@ void PDFOutDev::writeFontFile( GfxFont*
+ // ---sync point--- see SYNC STREAMS above
+ fflush(g_binary_out);
+ gfree(pBuf);
++#endif
+ }
+
+ #if POPPLER_CHECK_VERSION(0, 83, 0)
+@@ -747,7 +778,11 @@ void PDFOutDev::updateFont(GfxState *sta
+ {
+ assert(state);
+
++#if POPPLER_CHECK_VERSION(22, 4, 0)
++ auto gfxFont = state->getFont();
++#else
+ GfxFont *gfxFont = state->getFont();
++#endif
+ if( !gfxFont )
+ return;
+
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/libreoffice.git/commitdiff/ec97da6f47114df93cfd87142d1bce39a407df95
More information about the pld-cvs-commit
mailing list