diff options
Diffstat (limited to 'debian/patches/0078-Grow-m_pPrinterBuffer-if-needed-on-each-page.patch')
-rw-r--r-- | debian/patches/0078-Grow-m_pPrinterBuffer-if-needed-on-each-page.patch | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/debian/patches/0078-Grow-m_pPrinterBuffer-if-needed-on-each-page.patch b/debian/patches/0078-Grow-m_pPrinterBuffer-if-needed-on-each-page.patch new file mode 100644 index 000000000..d5d31362f --- /dev/null +++ b/debian/patches/0078-Grow-m_pPrinterBuffer-if-needed-on-each-page.patch @@ -0,0 +1,68 @@ +From: =?utf-8?q?Bernhard_=C3=9Cbelacker?= <bernhardu@mailbox.org> +Date: Fri, 26 Feb 2021 15:41:07 +0100 +Subject: Grow m_pPrinterBuffer if needed on each page + +Bug-Debian: https://bugs.debian.org/974828 +Bug-Ubuntu: https://launchpad.net/bugs/1904318 +--- + prnt/hpcups/HPCupsFilter.cpp | 13 ++++++++++--- + prnt/hpcups/HPCupsFilter.h | 1 + + 2 files changed, 11 insertions(+), 3 deletions(-) + +diff --git a/prnt/hpcups/HPCupsFilter.cpp b/prnt/hpcups/HPCupsFilter.cpp +index 42e6322..f188204 100644 +--- a/prnt/hpcups/HPCupsFilter.cpp ++++ b/prnt/hpcups/HPCupsFilter.cpp +@@ -199,7 +199,7 @@ void HPCupsFilter::WriteKBMPRaster (FILE *fp, BYTE *pbyk, int width) + fwrite (black_raster, 1, adj_k_width, fp); + } + +-HPCupsFilter::HPCupsFilter() : m_pPrinterBuffer(NULL) ++HPCupsFilter::HPCupsFilter() : m_pPrinterBuffer(NULL), m_PrinterBufferSize(0) + { + setbuf (stderr, NULL); + +@@ -226,6 +226,7 @@ void HPCupsFilter::cleanup() + if (m_pPrinterBuffer) { + delete [] m_pPrinterBuffer; + m_pPrinterBuffer = NULL; ++ m_PrinterBufferSize = 0; + } + + if(m_ppd){ +@@ -497,8 +498,6 @@ DRIVER_ERROR HPCupsFilter::startPage (cups_page_header2_t *cups_header) + dbglog("HPCUPS: returning NO_ERROR from startPage\n"); + } + +- m_pPrinterBuffer = new BYTE[cups_header->cupsWidth * 4 + 32]; +- + return NO_ERROR; + } + +@@ -661,6 +660,14 @@ int HPCupsFilter::processRasterData(cups_raster_t *cups_raster) + { + current_page_number++; + ++ if (m_PrinterBufferSize < (cups_header.cupsWidth * 4 + 32)) { ++ m_PrinterBufferSize = cups_header.cupsWidth * 4 + 32; ++ if (m_pPrinterBuffer) { ++ delete [] m_pPrinterBuffer; ++ } ++ m_pPrinterBuffer = new BYTE[m_PrinterBufferSize]; ++ } ++ + if (current_page_number == 1) { + + if (startPage(&cups_header) != NO_ERROR) { +diff --git a/prnt/hpcups/HPCupsFilter.h b/prnt/hpcups/HPCupsFilter.h +index 60f8580..f5f0706 100644 +--- a/prnt/hpcups/HPCupsFilter.h ++++ b/prnt/hpcups/HPCupsFilter.h +@@ -89,6 +89,7 @@ public: + private: + + BYTE *m_pPrinterBuffer; ++ int m_PrinterBufferSize; + Job m_Job; + SystemServices *m_pSys; + int child_pid; |