hplip: patch imageProcessor segfault in hpcups
(#58949)
Beginning with version 3.18.7, `hpcups` fails with > DEBUG: imageProcessorStartPage failed and segfaults (tested with HP LaserJet 1000 printer). Upstream bug reports: * https://bugs.launchpad.net/hplip/+bug/1788706 * https://bugs.launchpad.net/hplip/+bug/1787289 There is a patch available in one of the reports: https://bugs.launchpad.net/hplip/+bug/1787289/+attachment/5176026/+files/hplip.patch It applies to 3.18.7, but not to later versions. This commit adds a slight adaption of the patch that applies to versions 3.18.9 -- 3.19.6. The patch fixes https://github.com/NixOS/nixpkgs/issues/58949 . Note that the patch is merely a workaround: It simply removes all calls into the ImageProcessor library from `HPCupsFilter.cpp`.
This commit is contained in:
parent
15aacfb450
commit
60311e0957
@ -82,6 +82,13 @@ pythonPackages.buildPythonApplication {
|
||||
|
||||
makeWrapperArgs = [ "--prefix" "PATH" ":" "${nettools}/bin" ];
|
||||
|
||||
patches = [
|
||||
# remove ImageProcessor usage, it causes segfaults, see
|
||||
# https://bugs.launchpad.net/hplip/+bug/1788706
|
||||
# https://bugs.launchpad.net/hplip/+bug/1787289
|
||||
./image-processor.patch
|
||||
];
|
||||
|
||||
prePatch = ''
|
||||
# HPLIP hardcodes absolute paths everywhere. Nuke from orbit.
|
||||
find . -type f -exec sed -i \
|
||||
|
62
pkgs/misc/drivers/hplip/image-processor.patch
Normal file
62
pkgs/misc/drivers/hplip/image-processor.patch
Normal file
@ -0,0 +1,62 @@
|
||||
diff --git i/prnt/hpcups/HPCupsFilter.cpp w/prnt/hpcups/HPCupsFilter.cpp
|
||||
index 5b282d8..153ee3a 100644
|
||||
--- i/prnt/hpcups/HPCupsFilter.cpp
|
||||
+++ w/prnt/hpcups/HPCupsFilter.cpp
|
||||
@@ -31,7 +31,6 @@
|
||||
\*****************************************************************************/
|
||||
|
||||
#include "HPCupsFilter.h"
|
||||
-#include "ImageProcessor.h"
|
||||
|
||||
#include <signal.h>
|
||||
#include <sys/wait.h>
|
||||
@@ -637,16 +636,10 @@ int HPCupsFilter::processRasterData(cups_raster_t *cups_raster)
|
||||
|
||||
|
||||
sprintf(hpPreProcessedRasterFile, "%s/hp_%s_cups_SwapedPagesXXXXXX",CUPS_TMP_DIR, m_JA.user_name);
|
||||
- image_processor_t* imageProcessor = imageProcessorCreate();
|
||||
|
||||
while (cupsRasterReadHeader2(cups_raster, &cups_header))
|
||||
{
|
||||
|
||||
- IMAGE_PROCESSOR_ERROR result = imageProcessorStartPage(imageProcessor, &cups_header);
|
||||
- if (result != IPE_SUCCESS){
|
||||
- dbglog("DEBUG: imageProcessorStartPage failed result = %d\n", result);
|
||||
- }
|
||||
-
|
||||
current_page_number++;
|
||||
|
||||
if (current_page_number == 1) {
|
||||
@@ -745,11 +738,6 @@ int HPCupsFilter::processRasterData(cups_raster_t *cups_raster)
|
||||
color_raster = rgbRaster;
|
||||
black_raster = kRaster;
|
||||
|
||||
- result = imageProcessorProcessLine(imageProcessor, m_pPrinterBuffer, cups_header.cupsBytesPerLine);
|
||||
- if (result != IPE_SUCCESS){
|
||||
- dbglog("DEBUG: imageProcessorProcessLine failed result = %d\n", result);
|
||||
- }
|
||||
-
|
||||
|
||||
if ((y == 0) && !is_ljmono) {
|
||||
//For ljmono, make sure that first line is not a blankRaster line.Otherwise printer
|
||||
@@ -780,11 +768,6 @@ int HPCupsFilter::processRasterData(cups_raster_t *cups_raster)
|
||||
}
|
||||
} // for() loop end
|
||||
|
||||
- result = imageProcessorEndPage(imageProcessor);
|
||||
- if (result != IPE_SUCCESS){
|
||||
- dbglog("DEBUG: imageProcessorEndPage failed result = %d\n", result);
|
||||
- }
|
||||
-
|
||||
|
||||
m_Job.NewPage();
|
||||
if (err != NO_ERROR) {
|
||||
@@ -800,8 +783,6 @@ int HPCupsFilter::processRasterData(cups_raster_t *cups_raster)
|
||||
rgbRaster = NULL;
|
||||
}
|
||||
|
||||
- imageProcessorDestroy(imageProcessor);
|
||||
-
|
||||
unlink(hpPreProcessedRasterFile);
|
||||
return ret_status;
|
||||
}
|
Loading…
Reference in New Issue
Block a user