From c078f1b08b844c7126db2a4a0f83db2217e3bb0f Mon Sep 17 00:00:00 2001 From: Marius Bakke Date: Wed, 17 Apr 2019 17:46:59 +0200 Subject: [PATCH] gnu: texlive-bin: Adapt to Poppler 0.75. This is a follow-up to commit 2eb92ce85fc9e3e06650065e499385e8fba107c1. * gnu/packages/patches/texlive-bin-luatex-poppler-compat.patch: Update for Poppler 0.75. * gnu/packages/tex.scm (texlive-bin)[source](patches): Update pdftex-poppler-0.75.patch. [arguments]: Adjust accordingly. --- .../texlive-bin-luatex-poppler-compat.patch | 313 +++++++----------- gnu/packages/tex.scm | 16 +- 2 files changed, 137 insertions(+), 192 deletions(-) diff --git a/gnu/packages/patches/texlive-bin-luatex-poppler-compat.patch b/gnu/packages/patches/texlive-bin-luatex-poppler-compat.patch index d8b9bf172a..df6121c6e1 100644 --- a/gnu/packages/patches/texlive-bin-luatex-poppler-compat.patch +++ b/gnu/packages/patches/texlive-bin-luatex-poppler-compat.patch @@ -1,23 +1,14 @@ -Fix LuaTeX compatibility with Poppler 0.72. +Fix LuaTeX compatibility with Poppler 0.75. Upstream LuaTeX have moved from Poppler to "pplib" and thus upstream -fixes are unavailable. This is based on Arch Linux patches, with minor -changes for Poppler 0.72: -https://git.archlinux.org/svntogit/packages.git/tree/trunk?h=packages/texlive-bin&id=f1b424435c8fa31d9296c7a6dc17f939a8332780 +fixes are unavailable. This is based on Archs patch, with minor +tweaks to comply with texlive-bin-CVE-2018-17407.patch. +https://git.archlinux.org/svntogit/packages.git/tree/trunk?h=packages/texlive-bin&id=418dd6f008c3d41a461353fdb60f2d73d87c58ed diff --git a/texk/web2c/luatexdir/image/pdftoepdf.w b/texk/web2c/luatexdir/image/pdftoepdf.w --- a/texk/web2c/luatexdir/image/pdftoepdf.w +++ b/texk/web2c/luatexdir/image/pdftoepdf.w -@@ -35,7 +35,7 @@ - - extern void md5(Guchar *msg, int msgLen, Guchar *digest); - --static GBool isInit = gFalse; -+static bool isInit = false; - - /* Maintain AVL tree of all PDF files for embedding */ - -@@ -363,10 +363,10 @@ void copyReal(PDF pdf, double d) +@@ -363,7 +363,7 @@ void copyReal(PDF pdf, double d) static void copyString(PDF pdf, GooString * string) { @@ -25,11 +16,7 @@ diff --git a/texk/web2c/luatexdir/image/pdftoepdf.w b/texk/web2c/luatexdir/image + const char *p; unsigned char c; size_t i, l; -- p = string->getCString(); -+ p = string->c_str(); - l = (size_t) string->getLength(); - if (pdf->cave) - pdf_out(pdf, ' '); + p = string->getCString(); @@ -393,7 +393,7 @@ static void copyString(PDF pdf, GooString * string) pdf->cave = true; } @@ -39,15 +26,25 @@ diff --git a/texk/web2c/luatexdir/image/pdftoepdf.w b/texk/web2c/luatexdir/image { pdf_out(pdf, '/'); for (; *s != 0; s++) { -@@ -468,14 +468,14 @@ static void copyObject(PDF pdf, PdfDocument * pdf_doc, Object * obj) - break; - /* - case objNum: -- GBool isNum() { return type == objInt || type == objReal; } -+ bool isNum() { return type == objInt || type == objReal; } - break; - */ - case objString: +@@ -412,7 +412,7 @@ static void copyArray(PDF pdf, PdfDocument * pdf_doc, Array * array) + Object obj1; + pdf_begin_array(pdf); + for (i = 0, l = array->getLength(); i < l; ++i) { +- obj1 = array->getNF(i); ++ obj1 = array->getNF(i).copy(); + copyObject(pdf, pdf_doc, &obj1); + } + pdf_end_array(pdf); +@@ -425,7 +425,7 @@ static void copyDict(PDF pdf, PdfDocument * pdf_doc, Dict * dict) + pdf_begin_dict(pdf); + for (i = 0, l = dict->getLength(); i < l; ++i) { + copyName(pdf, dict->getKey(i)); +- obj1 = dict->getValNF(i); ++ obj1 = dict->getValNF(i).copy(); + copyObject(pdf, pdf_doc, &obj1); + } + pdf_end_dict(pdf); +@@ -475,7 +475,7 @@ static void copyObject(PDF pdf, PdfDocument * pdf_doc, Object * obj) copyString(pdf, (GooString *)obj->getString()); break; case objName: @@ -85,31 +82,37 @@ diff --git a/texk/web2c/luatexdir/image/pdftoepdf.w b/texk/web2c/luatexdir/image break; } } -@@ -587,11 +587,11 @@ void read_pdf_info(image_dict * idict) - PDFRectangle *pagebox; - int pdf_major_version_found, pdf_minor_version_found; - float xsize, ysize, xorig, yorig; -- if (isInit == gFalse) { -+ if (isInit == false) { - if (!(globalParams)) - globalParams = new GlobalParams(); -- globalParams->setErrQuiet(gFalse); -- isInit = gTrue; -+ globalParams->setErrQuiet(false); -+ isInit = true; - } - if (img_type(idict) == IMG_TYPE_PDF) - pdf_doc = refPdfDocument(img_filepath(idict), FE_FAIL); -@@ -966,7 +966,7 @@ void epdf_free() - if (PdfDocumentTree != NULL) - avl_destroy(PdfDocumentTree, destroyPdfDocument); - PdfDocumentTree = NULL; -- if (isInit == gTrue) -+ if (isInit == true) - delete globalParams; -- isInit = gFalse; -+ isInit = false; - } +@@ -788,12 +788,12 @@ void write_epdf(PDF pdf, image_dict * idict, int suppress_optional_info) + Now all relevant parts of the Page dictionary are copied. Metadata validity + check is needed(as a stream it must be indirect). + */ +- obj1 = pageDict->lookupNF("Metadata"); ++ obj1 = pageDict->lookupNF("Metadata").copy(); + if (!obj1.isNull() && !obj1.isRef()) + formatted_warning("pdf inclusion","/Metadata must be indirect object"); + /* copy selected items in Page dictionary */ + for (i = 0; pagedictkeys[i] != NULL; i++) { +- obj1 = pageDict->lookupNF(pagedictkeys[i]); ++ obj1 = pageDict->lookupNF(pagedictkeys[i]).copy(); + if (!obj1.isNull()) { + pdf_add_name(pdf, pagedictkeys[i]); + /* preserves indirection */ +@@ -806,13 +806,13 @@ void write_epdf(PDF pdf, image_dict * idict, int suppress_optional_info) + PDF file, climbing up the tree until the Resources are found. + (This fixes a problem with Scribus 1.3.3.14.) + */ +- obj1 = pageDict->lookupNF("Resources"); ++ obj1 = pageDict->lookupNF("Resources").copy(); + if (obj1.isNull()) { + op1 = &pagesobj1; + op2 = &pagesobj2; + *op1 = pageDict->lookup("Parent"); + while (op1->isDict()) { +- obj1 = op1->dictLookupNF("Resources"); ++ obj1 = op1->dictLookupNF("Resources").copy(); + if (!obj1.isNull()) { + pdf_add_name(pdf, "Resources"); + copyObject(pdf, pdf_doc, &obj1); diff --git a/texk/web2c/luatexdir/lua/lepdflib.cc b/texk/web2c/luatexdir/lua/lepdflib.cc --- a/texk/web2c/luatexdir/lua/lepdflib.cc +++ b/texk/web2c/luatexdir/lua/lepdflib.cc @@ -122,15 +125,15 @@ diff --git a/texk/web2c/luatexdir/lua/lepdflib.cc b/texk/web2c/luatexdir/lua/lep uout->atype = ALLOC_LEPDF; uout->pc = uobj->pc; uout->pd = uobj->pd; -@@ -439,7 +439,7 @@ static int l_new_Object(lua_State * L) - break; - case 1: - if (lua_isboolean (L,1)) { -- uout->d = new Object(lua_toboolean(L, 1)? gTrue : gFalse); -+ uout->d = new Object(lua_toboolean(L, 1)? true : false); - uout->atype = ALLOC_LEPDF; - uout->pc = 0; - uout->pd = NULL; +@@ -496,7 +496,7 @@ static int l_new_Object(lua_State * L) + double numA = lua_tonumber(L,1); + double genA = lua_tonumber(L,2); + if ( ((numA)==(int)(numA)) && ((genA)==(int)(genA)) ){ +- uout->d = new Object((int)(numA), (int)(genA)); ++ uout->d = new Object({(int)(numA), (int)(genA)}); + uout->atype = ALLOC_LEPDF; + uout->pc = 0; + uout->pd = NULL; @@ -596,7 +596,7 @@ static int m_##in##_##function(lua_State * L) \ uin = (udstruct *) luaL_checkudata(L, 1, M_##in); \ if (uin->pd != NULL && uin->pd->pc != uin->pc) \ @@ -140,33 +143,15 @@ diff --git a/texk/web2c/luatexdir/lua/lepdflib.cc b/texk/web2c/luatexdir/lua/lep if (o != NULL) { \ uout = new_##out##_userdata(L); \ uout->d = o; \ -@@ -676,7 +676,7 @@ static int m_##in##_##function(lua_State * L) \ - pdfdoc_changed_error(L); \ - gs = (GooString *)((in *) uin->d)->function(); \ - if (gs != NULL) \ -- lua_pushlstring(L, gs->getCString(), gs->getLength()); \ -+ lua_pushlstring(L, gs->c_str(), gs->getLength()); \ - else \ - lua_pushnil(L); \ - return 1; \ -@@ -911,7 +911,7 @@ static int m_Array_getString(lua_State * L) +@@ -889,7 +889,7 @@ static int m_Array_getNF(lua_State * L) if (i > 0 && i <= len) { - gs = new GooString(); - if (((Array *) uin->d)->getString(i - 1, gs)) -- lua_pushlstring(L, gs->getCString(), gs->getLength()); -+ lua_pushlstring(L, gs->c_str(), gs->getLength()); - else - lua_pushnil(L); - delete gs; -@@ -1063,7 +1063,7 @@ static int m_Catalog_getJS(lua_State * L) - if (i > 0 && i <= len) { - gs = ((Catalog *) uin->d)->getJS(i - 1); - if (gs != NULL) -- lua_pushlstring(L, gs->getCString(), gs->getLength()); -+ lua_pushlstring(L, gs->c_str(), gs->getLength()); - else - lua_pushnil(L); - delete gs; + uout = new_Object_userdata(L); + uout->d = new Object(); +- *((Object *) uout->d) = ((Array *) uin->d)->getNF(i - 1); ++ *((Object *) uout->d) = ((Array *) uin->d)->getNF(i - 1).copy(); + uout->atype = ALLOC_LEPDF; + uout->pc = uin->pc; + uout->pd = uin->pd; @@ -1125,12 +1125,12 @@ m_poppler_get_INT(Dict, getLength); static int m_Dict_add(lua_State * L) @@ -182,36 +167,42 @@ diff --git a/texk/web2c/luatexdir/lua/lepdflib.cc b/texk/web2c/luatexdir/lua/lep uobj = (udstruct *) luaL_checkudata(L, 3, M_Object); ((Dict *) uin->d)->add(s, std::move(*((Object *) uobj->d))); return 0; -@@ -1378,7 +1378,7 @@ static int m_GooString__tostring(lua_State * L) - uin = (udstruct *) luaL_checkudata(L, 1, M_GooString); - if (uin->pd != NULL && uin->pd->pc != uin->pc) +@@ -1190,7 +1190,7 @@ static int m_Dict_lookupNF(lua_State * L) + s = luaL_checkstring(L, 2); + uout = new_Object_userdata(L); + uout->d = new Object(); +- *((Object *) uout->d) = ((Dict *) uin->d)->lookupNF(s); ++ *((Object *) uout->d) = ((Dict *) uin->d)->lookupNF(s).copy(); + uout->atype = ALLOC_LEPDF; + uout->pc = uin->pc; + uout->pd = uin->pd; +@@ -1263,7 +1263,7 @@ static int m_Dict_getValNF(lua_State * L) + if (i > 0 && i <= len) { + uout = new_Object_userdata(L); + uout->d = new Object(); +- *((Object *) uout->d) = ((Dict *) uin->d)->getValNF(i - 1); ++ *((Object *) uout->d) = ((Dict *) uin->d)->getValNF(i - 1).copy(); + uout->atype = ALLOC_LEPDF; + uout->pc = uin->pc; + uout->pd = uin->pd; +@@ -1653,7 +1653,7 @@ static int m_Object_initRef(lua_State * L) pdfdoc_changed_error(L); -- lua_pushlstring(L, ((GooString *) uin->d)->getCString(), -+ lua_pushlstring(L, ((GooString *) uin->d)->c_str(), - ((GooString *) uin->d)->getLength()); - return 1; - } -@@ -1527,9 +1527,9 @@ static int m_Object_initBool(lua_State * L) - pdfdoc_changed_error(L); - luaL_checktype(L, 2, LUA_TBOOLEAN); - if (lua_toboolean(L, 2) != 0) -- *((Object *) uin->d) = Object(gTrue); -+ *((Object *) uin->d) = Object(true); - else -- *((Object *) uin->d) = Object(gFalse); -+ *((Object *) uin->d) = Object(false); + num = luaL_checkint(L, 2); + gen = luaL_checkint(L, 3); +- *((Object *) uin->d) = Object(num, gen); ++ *((Object *) uin->d) = Object({num, gen}); return 0; } -@@ -1814,7 +1814,7 @@ static int m_Object_getString(lua_State * L) - pdfdoc_changed_error(L); - if (((Object *) uin->d)->isString()) { - gs = (GooString *)((Object *) uin->d)->getString(); -- lua_pushlstring(L, gs->getCString(), gs->getLength()); -+ lua_pushlstring(L, gs->c_str(), gs->getLength()); - } else - lua_pushnil(L); - return 1; +@@ -2011,7 +2011,7 @@ static int m_Object_arrayGetNF(lua_State * L) + if (i > 0 && i <= len) { + uout = new_Object_userdata(L); + uout->d = new Object(); +- *((Object *) uout->d) = ((Object *) uin->d)->arrayGetNF(i - 1); ++ *((Object *) uout->d) = ((Object *) uin->d)->arrayGetNF(i - 1).copy(); + uout->atype = ALLOC_LEPDF; + uout->pc = uin->pc; + uout->pd = uin->pd; @@ -2051,7 +2051,7 @@ static int m_Object_dictAdd(lua_State * L) pdfdoc_changed_error(L); if (!((Object *) uin->d)->isDict()) @@ -221,30 +212,42 @@ diff --git a/texk/web2c/luatexdir/lua/lepdflib.cc b/texk/web2c/luatexdir/lua/lep return 0; } -@@ -2470,9 +2470,9 @@ static int m_PDFDoc_getFileName(lua_State * L) +@@ -2104,7 +2104,7 @@ static int m_Object_dictLookupNF(lua_State * L) + if (((Object *) uin->d)->isDict()) { + uout = new_Object_userdata(L); + uout->d = new Object(); +- *((Object *) uout->d) = ((Object *) uin->d)->dictLookupNF(s); ++ *((Object *) uout->d) = ((Object *) uin->d)->dictLookupNF(s).copy(); + uout->atype = ALLOC_LEPDF; + uout->pc = uin->pc; + uout->pd = uin->pd; +@@ -2169,7 +2169,7 @@ static int m_Object_dictGetValNF(lua_State * L) + if (i > 0 && i <= len) { + uout = new_Object_userdata(L); + uout->d = new Object(); +- *((Object *) uout->d) = ((Object *) uin->d)->dictGetValNF(i - 1); ++ *((Object *) uout->d) = ((Object *) uin->d)->dictGetValNF(i - 1).copy(); + uout->atype = ALLOC_LEPDF; + uout->pc = uin->pc; + uout->pd = uin->pd; +@@ -2470,7 +2470,7 @@ static int m_PDFDoc_getFileName(lua_State * L) uin = (udstruct *) luaL_checkudata(L, 1, M_PDFDoc); if (uin->pd != NULL && uin->pd->pc != uin->pc) pdfdoc_changed_error(L); - gs = ((PdfDocument *) uin->d)->doc->getFileName(); + gs = (GooString *) ((PdfDocument *) uin->d)->doc->getFileName(); if (gs != NULL) -- lua_pushlstring(L, gs->getCString(), gs->getLength()); -+ lua_pushlstring(L, gs->c_str(), gs->getLength()); + lua_pushlstring(L, gs->getCString(), gs->getLength()); else - lua_pushnil(L); - return 1; -@@ -2559,9 +2559,9 @@ static int m_PDFDoc_readMetadata(lua_State * L) +@@ -2559,7 +2559,7 @@ static int m_PDFDoc_readMetadata(lua_State * L) if (uin->pd != NULL && uin->pd->pc != uin->pc) pdfdoc_changed_error(L); if (((PdfDocument *) uin->d)->doc->getCatalog()->isOk()) { - gs = ((PdfDocument *) uin->d)->doc->readMetadata(); + gs = (GooString *) ((PdfDocument *) uin->d)->doc->readMetadata(); if (gs != NULL) -- lua_pushlstring(L, gs->getCString(), gs->getLength()); -+ lua_pushlstring(L, gs->c_str(), gs->getLength()); + lua_pushlstring(L, gs->getCString(), gs->getLength()); else - lua_pushnil(L); - } else @@ -2577,7 +2577,7 @@ static int m_PDFDoc_getStructTreeRoot(lua_State * L) if (uin->pd != NULL && uin->pd->pc != uin->pc) pdfdoc_changed_error(L); @@ -254,65 +257,3 @@ diff --git a/texk/web2c/luatexdir/lua/lepdflib.cc b/texk/web2c/luatexdir/lua/lep uout = new_StructTreeRoot_userdata(L); uout->d = obj; uout->pc = uin->pc; -@@ -3038,12 +3038,12 @@ m_poppler_get_BOOL(Attribute, isHidden); - - static int m_Attribute_setHidden(lua_State * L) - { -- GBool i; -+ bool i; - udstruct *uin; - uin = (udstruct *) luaL_checkudata(L, 1, M_Attribute); - if (uin->pd != NULL && uin->pd->pc != uin->pc) - pdfdoc_changed_error(L); -- i = (GBool) lua_toboolean(L, 2); -+ i = (bool) lua_toboolean(L, 2); - ((Attribute *) uin->d)->setHidden(i); - return 0; - } -@@ -3180,7 +3180,7 @@ static int m_StructElement_getParentRef(lua_State * L) - // Ref is false if the C++ functione return false - static int m_StructElement_getPageRef(lua_State * L) - { -- GBool b; -+ bool b; - Ref *r; - udstruct *uin, *uout; - uin = (udstruct *) luaL_checkudata(L, 1, M_StructElement); -@@ -3226,16 +3226,16 @@ static int m_StructElement_setRevision(lua_State * L) - - static int m_StructElement_getText(lua_State * L) - { -- GBool i; -+ bool i; - GooString *gs; - udstruct *uin; - uin = (udstruct *) luaL_checkudata(L, 1, M_StructElement); - if (uin->pd != NULL && uin->pd->pc != uin->pc) - pdfdoc_changed_error(L); -- i = (GBool) lua_toboolean(L, 2); -+ i = (bool) lua_toboolean(L, 2); - gs = ((StructElement *) uin->d)->getText(i); - if (gs != NULL) -- lua_pushlstring(L, gs->getCString(), gs->getLength()); -+ lua_pushlstring(L, gs->c_str(), gs->getLength()); - else - lua_pushnil(L); - return 1; -@@ -3321,7 +3321,7 @@ static int m_StructElement_findAttribute(lua_State * L) - { - Attribute::Type t; - Attribute::Owner o; -- GBool g; -+ bool g; - udstruct *uin, *uout; - const Attribute *a; - uin = (udstruct *) luaL_checkudata(L, 1, M_StructElement); -@@ -3329,7 +3329,7 @@ static int m_StructElement_findAttribute(lua_State * L) - pdfdoc_changed_error(L); - t = (Attribute::Type) luaL_checkint(L,1); - o = (Attribute::Owner) luaL_checkint(L,2); -- g = (GBool) lua_toboolean(L, 3); -+ g = (bool) lua_toboolean(L, 3); - a = ((StructElement *) uin->d)->findAttribute(t,g,o); - - if (a!=NULL){ diff --git a/gnu/packages/tex.scm b/gnu/packages/tex.scm index a6fedd78f0..2287a2ff08 100644 --- a/gnu/packages/tex.scm +++ b/gnu/packages/tex.scm @@ -111,12 +111,12 @@ (define-public texlive-bin "&id=" revision)) (file-name (string-append "texlive-bin-" name)) (sha256 (base32 hash))))) - (arch-revision "e1975bce0b9d270d7c9773c5beb7e87d61ee8f57")) + (arch-revision "418dd6f008c3d41a461353fdb60f2d73d87c58ed")) (append (search-patches "texlive-bin-CVE-2018-17407.patch" "texlive-bin-luatex-poppler-compat.patch") (list - (arch-patch "pdftex-poppler0.72.patch" arch-revision - "0p46b6xxxg2s3hx67r0wpz16g3qygx65hpc581xs3jz5pvsiq3y7") + (arch-patch "pdftex-poppler0.75.patch" arch-revision + "1cqpcp7h1qyxyp3wjbpcmx2wgvj9ywpz60hvy280mp9w633yzyg3") (arch-patch "xetex-poppler-fixes.patch" arch-revision "1jj1p5zkjljb7id9pjv29cw0cf8mwrgrh4ackgzz9c200vaqpsvx"))))))) (build-system gnu-build-system) @@ -197,17 +197,21 @@ (define-public texlive-bin #t)) (add-after 'unpack 'use-code-for-new-poppler (lambda _ - (copy-file "texk/web2c/pdftexdir/pdftoepdf-poppler0.72.0.cc" + (copy-file "texk/web2c/pdftexdir/pdftoepdf-poppler0.75.0.cc" "texk/web2c/pdftexdir/pdftoepdf.cc") - (copy-file "texk/web2c/pdftexdir/pdftosrc-poppler0.72.0.cc" + (copy-file "texk/web2c/pdftexdir/pdftosrc-poppler0.75.0.cc" "texk/web2c/pdftexdir/pdftosrc.cc") #t)) (add-after 'use-code-for-new-poppler 'use-code-for-even-newer-poppler (lambda _ - ;; Adjust for deprecated types in Poppler 0.73. + ;; Adjust for deprecated types in Poppler 0.73 and later. (substitute* (append (find-files "texk/web2c/luatexdir/" "\\.(cc|w)$") '("texk/web2c/pdftexdir/pdftosrc.cc")) + (("GBool") "bool") + (("gFalse") "false") + (("gTrue") "true") + (("getCString") "c_str") (("Guint") "unsigned int") (("Guchar") "unsigned char")) #t))