gnu: texlive-bin: Adapt to Poppler 0.75.

This is a follow-up to commit 2eb92ce85f.

* 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.
This commit is contained in:
Marius Bakke 2019-04-17 17:46:59 +02:00
parent 3b458d5462
commit c078f1b08b
No known key found for this signature in database
GPG Key ID: A2A06DF2A33A54FA
2 changed files with 137 additions and 192 deletions

View File

@ -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,12 +125,12 @@ 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);
@@ -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;
@ -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){

View File

@ -111,12 +111,12 @@
"&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 @@
#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))