Description: Grow m_pPrinterBuffer if needed on each page Author: Bernhard Übelacker Bug-Debian: https://bugs.debian.org/974828 Bug-Ubuntu: https://launchpad.net/bugs/1904318 Last-Update: 2021-02-26 Index: hplip-3.20.11+dfsg0/prnt/hpcups/HPCupsFilter.cpp =================================================================== --- hplip-3.20.11+dfsg0.orig/prnt/hpcups/HPCupsFilter.cpp +++ hplip-3.20.11+dfsg0/prnt/hpcups/HPCupsFilter.cpp @@ -199,7 +199,7 @@ void HPCupsFilter::WriteKBMPRaster (FILE 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 (cu dbglog("HPCUPS: returning NO_ERROR from startPage\n"); } - m_pPrinterBuffer = new BYTE[cups_header->cupsWidth * 4 + 32]; - return NO_ERROR; } @@ -663,6 +662,14 @@ int HPCupsFilter::processRasterData(cups 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) { Index: hplip-3.20.11+dfsg0/prnt/hpcups/HPCupsFilter.h =================================================================== --- hplip-3.20.11+dfsg0.orig/prnt/hpcups/HPCupsFilter.h +++ hplip-3.20.11+dfsg0/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;