File: 0077-Grow-m_pPrinterBuffer-if-needed-on-each-page.patch

package info (click to toggle)
hplip 3.22.10%2Bdfsg0-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 171,296 kB
  • sloc: python: 83,373; ansic: 71,016; cpp: 65,202; sh: 4,408; perl: 4,397; makefile: 937
file content (68 lines) | stat: -rw-r--r-- 2,276 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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 f0ad0eb..fdf2984 100644
--- a/prnt/hpcups/HPCupsFilter.cpp
+++ b/prnt/hpcups/HPCupsFilter.cpp
@@ -203,7 +203,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);
 
@@ -230,6 +230,7 @@ void HPCupsFilter::cleanup()
     if (m_pPrinterBuffer) {
         delete [] m_pPrinterBuffer;
         m_pPrinterBuffer = NULL;
+        m_PrinterBufferSize = 0;
     }
 
     if(m_ppd){
@@ -511,8 +512,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;
 }
 
@@ -693,6 +692,14 @@ int HPCupsFilter::processRasterData(cups_raster_t *cups_raster)
        #endif
         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;