summaryrefslogtreecommitdiff
path: root/debian/patches/0078-Grow-m_pPrinterBuffer-if-needed-on-each-page.patch
diff options
context:
space:
mode:
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.patch68
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;