commit: 05f92b46ad938da390f63a047a6f96b7bb5a7e95 Author: Sam James <sam <AT> gentoo <DOT> org> AuthorDate: Sun Sep 14 11:07:00 2025 +0000 Commit: Sam James <sam <AT> gentoo <DOT> org> CommitDate: Sun Sep 14 11:07:00 2025 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=05f92b46
net-print/cups-filters: fix build w/ >=qpdf-12 for <cups-filters-2 Closes: https://bugs.gentoo.org/962385 Signed-off-by: Sam James <sam <AT> gentoo.org> .../cups-filters/cups-filters-1.28.17-r2.ebuild | 1 + .../files/cups-filters-1.28.17-qpdf-12.patch | 276 +++++++++++++++++++++ 2 files changed, 277 insertions(+) diff --git a/net-print/cups-filters/cups-filters-1.28.17-r2.ebuild b/net-print/cups-filters/cups-filters-1.28.17-r2.ebuild index dae278f7e718..47439731e56e 100644 --- a/net-print/cups-filters/cups-filters-1.28.17-r2.ebuild +++ b/net-print/cups-filters/cups-filters-1.28.17-r2.ebuild @@ -54,6 +54,7 @@ BDEPEND=" PATCHES=( "${FILESDIR}"/${PN}-1.28.17-c++17.patch "${FILESDIR}"/${PN}-1.28.17-CVE-2023-24805.patch + "${FILESDIR}"/${PN}-1.28.17-qpdf-12.patch ) src_configure() { diff --git a/net-print/cups-filters/files/cups-filters-1.28.17-qpdf-12.patch b/net-print/cups-filters/files/cups-filters-1.28.17-qpdf-12.patch new file mode 100644 index 000000000000..25e7f8d9727e --- /dev/null +++ b/net-print/cups-filters/files/cups-filters-1.28.17-qpdf-12.patch @@ -0,0 +1,276 @@ +https://bugs.gentoo.org/962385#c4 +diff '--color=auto' -rupN a/filter/pdf.cxx b/filter/pdf.cxx +--- a/filter/pdf.cxx 2023-01-24 18:41:08.000000000 -0700 ++++ b/filter/pdf.cxx 2025-09-05 10:07:29.738695867 -0600 +@@ -138,7 +138,7 @@ extern "C" void pdf_prepend_stream(pdf_t + } + + // prepare the new stream which is to be prepended +- PointerHolder<Buffer> stream_data = PointerHolder<Buffer>(new Buffer(len)); ++ std::shared_ptr<Buffer> stream_data = std::shared_ptr<Buffer>(new Buffer(len)); + memcpy(stream_data->getBuffer(), buf, len); + QPDFObjectHandle stream = QPDFObjectHandle::newStream(pdf, stream_data); + stream = pdf->makeIndirectObject(stream); +diff '--color=auto' -rupN a/filter/pdftopdf/qpdf_pdftopdf_processor.cc b/filter/pdftopdf/qpdf_pdftopdf_processor.cc +--- a/filter/pdftopdf/qpdf_pdftopdf_processor.cc 2023-01-24 18:41:08.000000000 -0700 ++++ b/filter/pdftopdf/qpdf_pdftopdf_processor.cc 2025-09-05 09:57:51.836902479 -0600 +@@ -83,10 +83,10 @@ QPDFObjectHandle QPDF_PDFTOPDF_PageHandl + page.getKey("/Resources").replaceKey("/XObject",QPDFObjectHandle::newDictionary(xobjs)); + content.append("Q\n"); + page.getKey("/Contents").replaceStreamData(content,QPDFObjectHandle::newNull(),QPDFObjectHandle::newNull()); +- page.replaceOrRemoveKey("/Rotate",makeRotate(rotation)); ++ page.replaceKey("/Rotate",makeRotate(rotation)); + } else { + Rotation rot=getRotate(page)+rotation; +- page.replaceOrRemoveKey("/Rotate",makeRotate(rot)); ++ page.replaceKey("/Rotate",makeRotate(rot)); + } + page=QPDFObjectHandle(); // i.e. uninitialized + return ret; +@@ -181,9 +181,9 @@ Rotation QPDF_PDFTOPDF_PageHandle::crop( + page.assertInitialized(); + Rotation save_rotate = getRotate(page); + if(orientation==ROT_0||orientation==ROT_180) +- page.replaceOrRemoveKey("/Rotate",makeRotate(ROT_90)); ++ page.replaceKey("/Rotate",makeRotate(ROT_90)); + else +- page.replaceOrRemoveKey("/Rotate",makeRotate(ROT_0)); ++ page.replaceKey("/Rotate",makeRotate(ROT_0)); + + PageRect currpage= getBoxAsRect(getTrimBox(page)); + double width = currpage.right-currpage.left; +@@ -242,7 +242,7 @@ Rotation QPDF_PDFTOPDF_PageHandle::crop( + //Cropping. + // TODO: Borders are covered by the image. buffer space? + page.replaceKey("/TrimBox",makeBox(currpage.left,currpage.bottom,currpage.right,currpage.top)); +- page.replaceOrRemoveKey("/Rotate",makeRotate(save_rotate)); ++ page.replaceKey("/Rotate",makeRotate(save_rotate)); + return getRotate(page); + } + +@@ -251,14 +251,14 @@ bool QPDF_PDFTOPDF_PageHandle::is_landsc + page.assertInitialized(); + Rotation save_rotate = getRotate(page); + if(orientation==ROT_0||orientation==ROT_180) +- page.replaceOrRemoveKey("/Rotate",makeRotate(ROT_90)); ++ page.replaceKey("/Rotate",makeRotate(ROT_90)); + else +- page.replaceOrRemoveKey("/Rotate",makeRotate(ROT_0)); ++ page.replaceKey("/Rotate",makeRotate(ROT_0)); + + PageRect currpage= getBoxAsRect(getTrimBox(page)); + double width = currpage.right-currpage.left; + double height = currpage.top-currpage.bottom; +- page.replaceOrRemoveKey("/Rotate",makeRotate(save_rotate)); ++ page.replaceKey("/Rotate",makeRotate(save_rotate)); + if(width>height) + return true; + return false; +@@ -662,7 +662,7 @@ void QPDF_PDFTOPDF_Processor::autoRotate + // TODO? other rotation direction, e.g. if (src_rot==ROT_0)&&(param.orientation==ROT_270) ... etc. + // rotation=ROT_270; + +- page.replaceOrRemoveKey("/Rotate",makeRotate(src_rot+rotation)); ++ page.replaceKey("/Rotate",makeRotate(src_rot+rotation)); + } + } + } +diff '--color=auto' -rupN a/filter/pdftopdf/qpdf_xobject.cc b/filter/pdftopdf/qpdf_xobject.cc +--- a/filter/pdftopdf/qpdf_xobject.cc 2023-01-24 18:41:08.000000000 -0700 ++++ b/filter/pdftopdf/qpdf_xobject.cc 2025-09-05 10:09:23.131598674 -0600 +@@ -136,7 +136,7 @@ QPDFObjectHandle makeXObject(QPDF *pdf,Q + + std::vector<QPDFObjectHandle> contents=page.getPageContents(); // (will assertPageObject) + +- auto ph=PointerHolder<QPDFObjectHandle::StreamDataProvider>(new CombineFromContents_Provider(contents)); ++ auto ph=std::shared_ptr<QPDFObjectHandle::StreamDataProvider>(new CombineFromContents_Provider(contents)); + ret.replaceStreamData(ph,filter,decode_parms); + + return ret; +diff '--color=auto' -rupN a/filter/rastertopdf.cpp b/filter/rastertopdf.cpp +--- a/filter/rastertopdf.cpp 2023-01-24 18:41:08.000000000 -0700 ++++ b/filter/rastertopdf.cpp 2025-09-05 10:20:21.324455441 -0600 +@@ -310,10 +310,10 @@ struct pdf_info + std::vector<std::string> pclm_source_resolution_supported; + std::string pclm_source_resolution_default; + std::string pclm_raster_back_side; +- std::vector< PointerHolder<Buffer> > pclm_strip_data; ++ std::vector< std::shared_ptr<Buffer> > pclm_strip_data; + std::string render_intent; + cups_cspace_t color_space; +- PointerHolder<Buffer> page_data; ++ std::shared_ptr<Buffer> page_data; + double page_width,page_height; + OutFormatType outformat; + }; +@@ -442,7 +442,7 @@ QPDFObjectHandle embedIccProfile(QPDF &p + std::map<std::string,QPDFObjectHandle> streamdict; + std::string n_value = ""; + std::string alternate_cs = ""; +- PointerHolder<Buffer>ph; ++ std::shared_ptr<Buffer>ph; + + #ifdef USE_LCMS1 + size_t profile_size; +@@ -481,7 +481,7 @@ QPDFObjectHandle embedIccProfile(QPDF &p + cmsSaveProfileToMem(colorProfile, buff, &profile_size); + + // Write ICC profile buffer into PDF +- ph = new Buffer(buff, profile_size); ++ ph = std::shared_ptr<Buffer>(new Buffer(buff, profile_size)); + iccstream = QPDFObjectHandle::newStream(&pdf, ph); + iccstream.replaceDict(QPDFObjectHandle::newDictionary(streamdict)); + +@@ -605,7 +605,7 @@ QPDFObjectHandle getCalGrayArray(double + * O - std::vector of QPDFObjectHandle + * I - QPDF object + * I - number of strips per page +- * I - std::vector of PointerHolder<Buffer> containing data for each strip ++ * I - std::vector of std::shared_ptr<Buffer> containing data for each strip + * I - strip width + * I - strip height + * I - color space +@@ -613,7 +613,7 @@ QPDFObjectHandle getCalGrayArray(double + */ + std::vector<QPDFObjectHandle> + makePclmStrips(QPDF &pdf, unsigned num_strips, +- std::vector< PointerHolder<Buffer> > &strip_data, ++ std::vector< std::shared_ptr<Buffer> > &strip_data, + std::vector<CompressionMethod> &compression_methods, + unsigned width, std::vector<unsigned>& strip_height, cups_cspace_t cs, unsigned bpc) + { +@@ -679,7 +679,7 @@ makePclmStrips(QPDF &pdf, unsigned num_s + Pl_Flate pflate("pflate", &psink, Pl_Flate::a_deflate); + pflate.write(strip_data[i]->getBuffer(), strip_data[i]->getSize()); + pflate.finish(); +- ret[i].replaceStreamData(PointerHolder<Buffer>(psink.getBuffer()), ++ ret[i].replaceStreamData(std::shared_ptr<Buffer>(psink.getBuffer()), + QPDFObjectHandle::newName("/FlateDecode"),QPDFObjectHandle::newNull()); + } + else if (compression == RLE_DECODE) +@@ -687,7 +687,7 @@ makePclmStrips(QPDF &pdf, unsigned num_s + Pl_RunLength prle("prle", &psink, Pl_RunLength::a_encode); + prle.write(strip_data[i]->getBuffer(),strip_data[i]->getSize()); + prle.finish(); +- ret[i].replaceStreamData(PointerHolder<Buffer>(psink.getBuffer()), ++ ret[i].replaceStreamData(std::shared_ptr<Buffer>(psink.getBuffer()), + QPDFObjectHandle::newName("/RunLengthDecode"),QPDFObjectHandle::newNull()); + } + else if (compression == DCT_DECODE) +@@ -695,7 +695,7 @@ makePclmStrips(QPDF &pdf, unsigned num_s + Pl_DCT pdct("pdct", &psink, width, strip_height[i], components, color_space); + pdct.write(strip_data[i]->getBuffer(),strip_data[i]->getSize()); + pdct.finish(); +- ret[i].replaceStreamData(PointerHolder<Buffer>(psink.getBuffer()), ++ ret[i].replaceStreamData(std::shared_ptr<Buffer>(psink.getBuffer()), + QPDFObjectHandle::newName("/DCTDecode"),QPDFObjectHandle::newNull()); + } + } +@@ -703,7 +703,7 @@ makePclmStrips(QPDF &pdf, unsigned num_s + } + #endif + +-QPDFObjectHandle makeImage(QPDF &pdf, PointerHolder<Buffer> page_data, unsigned width, ++QPDFObjectHandle makeImage(QPDF &pdf, std::shared_ptr<Buffer> page_data, unsigned width, + unsigned height, std::string render_intent, cups_cspace_t cs, unsigned bpc) + { + QPDFObjectHandle ret = QPDFObjectHandle::newStream(&pdf); +@@ -843,7 +843,7 @@ QPDFObjectHandle makeImage(QPDF &pdf, Po + pflate.write(page_data->getBuffer(),page_data->getSize()); + pflate.finish(); + +- ret.replaceStreamData(PointerHolder<Buffer>(psink.getBuffer()), ++ ret.replaceStreamData(std::shared_ptr<Buffer>(psink.getBuffer()), + QPDFObjectHandle::newName("/FlateDecode"),QPDFObjectHandle::newNull()); + #else + ret.replaceStreamData(page_data,QPDFObjectHandle::newNull(),QPDFObjectHandle::newNull()); +@@ -857,7 +857,7 @@ void finish_page(struct pdf_info * info) + if (info->outformat == OUTPUT_FORMAT_PDF) + { + // Finish previous PDF Page +- if(!info->page_data.getPointer()) ++ if(!info->page_data.get()) + return; + + QPDFObjectHandle image = makeImage(info->pdf, info->page_data, info->width, info->height, info->render_intent, info->color_space, info->bpc); +@@ -874,7 +874,7 @@ void finish_page(struct pdf_info * info) + return; + + for (size_t i = 0; i < info->pclm_strip_data.size(); i ++) +- if(!info->pclm_strip_data[i].getPointer()) ++ if(!info->pclm_strip_data[i].get()) + return; + + std::vector<QPDFObjectHandle> strips = makePclmStrips(info->pdf, info->pclm_num_strips, info->pclm_strip_data, info->pclm_compression_method_preferred, info->width, info->pclm_strip_height, info->color_space, info->bpc); +@@ -932,7 +932,7 @@ void finish_page(struct pdf_info * info) + #endif + + // bookkeeping +- info->page_data = PointerHolder<Buffer>(); ++ info->page_data = std::shared_ptr<Buffer>(); + #ifdef QPDF_HAVE_PCLM + info->pclm_strip_data.clear(); + #endif +@@ -1101,12 +1101,12 @@ int add_pdf_page(struct pdf_info * info, + die("Page too big"); + } + if (info->outformat == OUTPUT_FORMAT_PDF) +- info->page_data = PointerHolder<Buffer>(new Buffer(info->line_bytes*info->height)); ++ info->page_data = std::shared_ptr<Buffer>(new Buffer(info->line_bytes*info->height)); + else if (info->outformat == OUTPUT_FORMAT_PCLM) + { + // reserve space for PCLm strips + for (size_t i = 0; i < info->pclm_num_strips; i ++) +- info->pclm_strip_data[i] = PointerHolder<Buffer>(new Buffer(info->line_bytes*info->pclm_strip_height[i])); ++ info->pclm_strip_data[i] = std::shared_ptr<Buffer>(new Buffer(info->line_bytes*info->pclm_strip_height[i])); + } + + QPDFObjectHandle page = QPDFObjectHandle::parse( +diff '--color=auto' -rupN a/filter/urftopdf.cpp b/filter/urftopdf.cpp +--- a/filter/urftopdf.cpp 2023-01-24 18:41:08.000000000 -0700 ++++ b/filter/urftopdf.cpp 2025-09-05 10:09:30.535788230 -0600 +@@ -80,7 +80,7 @@ struct pdf_info + unsigned pixel_bytes; + unsigned line_bytes; + unsigned bpp; +- PointerHolder<Buffer> page_data; ++ std::shared_ptr<Buffer> page_data; + double page_width,page_height; + }; + +@@ -119,7 +119,7 @@ enum ColorSpace { + iprintf("Created temporary file '%s'\n", tempfile_name); + */ + +-QPDFObjectHandle makeImage(QPDF &pdf, PointerHolder<Buffer> page_data, unsigned width, unsigned height, ColorSpace cs, unsigned bpc) ++QPDFObjectHandle makeImage(QPDF &pdf, std::shared_ptr<Buffer> page_data, unsigned width, unsigned height, ColorSpace cs, unsigned bpc) + { + QPDFObjectHandle ret = QPDFObjectHandle::newStream(&pdf); + +@@ -153,7 +153,7 @@ QPDFObjectHandle makeImage(QPDF &pdf, Po + + // /Filter /FlateDecode + // /DecodeParms [<</Predictor 1 /Colors 1[3] /BitsPerComponent $bits /Columns $x>>] ?? +- ret.replaceStreamData(PointerHolder<Buffer>(psink.getBuffer()), ++ ret.replaceStreamData(std::shared_ptr<Buffer>(psink.getBuffer()), + QPDFObjectHandle::newName("/FlateDecode"),QPDFObjectHandle::newNull()); + #else + ret.replaceStreamData(page_data,QPDFObjectHandle::newNull(),QPDFObjectHandle::newNull()); +@@ -182,7 +182,7 @@ void finish_page(struct pdf_info * info) + info->page.getKey("/Contents").replaceStreamData(content,QPDFObjectHandle::newNull(),QPDFObjectHandle::newNull()); + + // bookkeeping +- info->page_data = PointerHolder<Buffer>(); ++ info->page_data = std::shared_ptr<Buffer>(); + } + + int add_pdf_page(struct pdf_info * info, int pagen, unsigned width, unsigned height, int bpp, unsigned dpi) +@@ -199,7 +199,7 @@ int add_pdf_page(struct pdf_info * info, + if (info->height > (std::numeric_limits<unsigned>::max() / info->line_bytes)) { + die("Page too big"); + } +- info->page_data = PointerHolder<Buffer>(new Buffer(info->line_bytes*info->height)); ++ info->page_data = std::shared_ptr<Buffer>(new Buffer(info->line_bytes*info->height)); + + QPDFObjectHandle page = QPDFObjectHandle::parse( + "<<"
