aboutsummaryrefslogtreecommitdiff
path: root/gnu/packages/patches/texlive-bin-luatex-poppler-compat.patch
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/patches/texlive-bin-luatex-poppler-compat.patch')
-rw-r--r--gnu/packages/patches/texlive-bin-luatex-poppler-compat.patch341
1 files changed, 158 insertions, 183 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..024ff416af 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)
- 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)
+@@ -889,7 +889,7 @@ static int m_Array_getNF(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)
- 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)
+@@ -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);
- 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,37 @@ 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)
+--- texlive-source/texk/web2c/luatexdir/lua/lepdflib.cc.orig 2019-04-24 09:41:05.090522664 +0000
++++ texlive-source/texk/web2c/luatexdir/lua/lepdflib.cc 2019-04-24 09:43:37.119184926 +0000
+@@ -994,7 +994,8 @@
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());
+ num = luaL_checkint(L, 2);
+ gen = luaL_checkint(L, 3);
+- i = ((Catalog *) uin->d)->findPage(num, gen);
++ Ref numgen = {num, gen};
++ i = ((Catalog *) uin->d)->findPage(numgen);
+ if (i > 0)
+ lua_pushinteger(L, i);
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)
+@@ -2596,8 +2597,9 @@
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){
+ num = luaL_checkint(L, 2);
+ gen = luaL_checkint(L, 3);
++ Ref numgen = {num, gen};
+ if (((PdfDocument *) uin->d)->doc->getCatalog()->isOk()) {
+- i = ((PdfDocument *) uin->d)->doc->findPage(num, gen);
++ i = ((PdfDocument *) uin->d)->doc->findPage(numgen);
+ if (i > 0)
+ lua_pushinteger(L, i);
+ else
+--- texlive-source/texk/web2c/luatexdir/image/pdftoepdf.w.orig 2019-04-24 09:56:38.406498975 +0000
++++ texlive-source/texk/web2c/luatexdir/image/pdftoepdf.w 2019-04-24 09:56:57.020081327 +0000
+@@ -630,7 +630,7 @@
+ if (link == NULL || !link->isOk())
+ formatted_error("pdf inclusion","invalid destination '%s'",img_pagename(idict));
+ Ref ref = link->getPageRef();
+- img_pagenum(idict) = catalog->findPage(ref.num, ref.gen);
++ img_pagenum(idict) = catalog->findPage(ref);
+ if (img_pagenum(idict) == 0)
+ formatted_error("pdf inclusion","destination is not a page '%s'",img_pagename(idict));
+ delete link;