summaryrefslogtreecommitdiff
path: root/poppler-0.73.0-PSOutputDev-buffer-read.patch
diff options
context:
space:
mode:
Diffstat (limited to 'poppler-0.73.0-PSOutputDev-buffer-read.patch')
-rw-r--r--poppler-0.73.0-PSOutputDev-buffer-read.patch289
1 files changed, 0 insertions, 289 deletions
diff --git a/poppler-0.73.0-PSOutputDev-buffer-read.patch b/poppler-0.73.0-PSOutputDev-buffer-read.patch
deleted file mode 100644
index 707ef1b..0000000
--- a/poppler-0.73.0-PSOutputDev-buffer-read.patch
+++ /dev/null
@@ -1,289 +0,0 @@
-From 9bcc9d0a164dbd1f24aae8f900c28feafd0cb3f2 Mon Sep 17 00:00:00 2001
-From: Marek Kasik <mkasik@redhat.com>
-Date: Tue, 30 Apr 2019 18:47:44 +0200
-Subject: [PATCH] PSOutputDev: Don't read outside of image buffer
-
-Check whether input image is RGB or BGR to not treat
-it as CMYK in those cases in PSOutputDev::checkPageSlice().
-
-Fixes #751
----
- poppler/PSOutputDev.cc | 248 ++++++++++++++++++++++++++++++++---------
- 1 file changed, 196 insertions(+), 52 deletions(-)
-
-diff --git a/poppler/PSOutputDev.cc b/poppler/PSOutputDev.cc
-index 0d201835..155a8cbe 100644
---- a/poppler/PSOutputDev.cc
-+++ b/poppler/PSOutputDev.cc
-@@ -3374,6 +3374,14 @@ bool PSOutputDev::checkPageSlice(Page *page, double /*hDPI*/, double /*vDPI*/,
- }
- break;
- case psLevel1Sep:
-+ GfxColor inputColor;
-+ GfxCMYK cmyk;
-+ unsigned char cmykColor[4];
-+ GfxDeviceRGBColorSpace *rgbCS;
-+ SplashColorMode colorMode;
-+
-+ colorMode = bitmap->getMode();
-+
- p = bitmap->getDataPtr();
- // Check for an all gray image
- if (getOptimizeColorSpace()) {
-@@ -3448,65 +3456,201 @@ bool PSOutputDev::checkPageSlice(Page *page, double /*hDPI*/, double /*vDPI*/,
- }
- } else if (((psProcessCyan | psProcessMagenta | psProcessYellow | psProcessBlack) & ~processColors) != 0) {
- // Color image, need to check color flags for each dot
-- for (y = 0; y < h; ++y) {
-- for (comp = 0; comp < 4; ++comp) {
-- if (useBinary) {
-- // Binary color image
-- for (x = 0; x < w; ++x) {
-- col[comp] |= p[4*x + comp];
-- hexBuf[i++] = p[4*x + comp];
-- if (i >= 64) {
-- writePSBuf(hexBuf, i);
-- i = 0;
-+ switch (colorMode) {
-+ case splashModeRGB8:
-+ case splashModeBGR8:
-+ rgbCS = new GfxDeviceRGBColorSpace();
-+ for (y = 0; y < h; ++y) {
-+ for (comp = 0; comp < 4; ++comp) {
-+ if (useBinary) {
-+ // Binary color image
-+ for (x = 0; x < w; ++x) {
-+ if (likely(colorMode == splashModeRGB8)) {
-+ inputColor.c[0] = byteToCol(p[3*x + 0]);
-+ inputColor.c[1] = byteToCol(p[3*x + 1]);
-+ inputColor.c[2] = byteToCol(p[3*x + 2]);
-+ } else {
-+ inputColor.c[0] = byteToCol(p[3*x + 2]);
-+ inputColor.c[1] = byteToCol(p[3*x + 1]);
-+ inputColor.c[2] = byteToCol(p[3*x + 0]);
-+ }
-+ rgbCS->getCMYK(&inputColor, &cmyk);
-+ cmykColor[0] = colToByte(cmyk.c);
-+ cmykColor[1] = colToByte(cmyk.m);
-+ cmykColor[2] = colToByte(cmyk.y);
-+ cmykColor[3] = colToByte(cmyk.k);
-+
-+ col[comp] |= cmykColor[comp];
-+ hexBuf[i++] = cmykColor[comp];
-+ if (i >= 64) {
-+ writePSBuf(hexBuf, i);
-+ i = 0;
-+ }
-+ }
-+ } else {
-+ // Gray color image
-+ for (x = 0; x < w; ++x) {
-+ if (likely(colorMode == splashModeRGB8)) {
-+ inputColor.c[0] = byteToCol(p[3*x + 0]);
-+ inputColor.c[1] = byteToCol(p[3*x + 1]);
-+ inputColor.c[2] = byteToCol(p[3*x + 2]);
-+ } else {
-+ inputColor.c[0] = byteToCol(p[3*x + 2]);
-+ inputColor.c[1] = byteToCol(p[3*x + 1]);
-+ inputColor.c[2] = byteToCol(p[3*x + 0]);
-+ }
-+ rgbCS->getCMYK(&inputColor, &cmyk);
-+ cmykColor[0] = colToByte(cmyk.c);
-+ cmykColor[1] = colToByte(cmyk.m);
-+ cmykColor[2] = colToByte(cmyk.y);
-+ cmykColor[3] = colToByte(cmyk.k);
-+
-+ col[comp] |= cmykColor[comp];
-+ digit = cmykColor[comp] / 16;
-+ hexBuf[i++] = digit + ((digit >= 10)? 'a' - 10: '0');
-+ digit = cmykColor[comp] % 16;
-+ hexBuf[i++] = digit + ((digit >= 10)? 'a' - 10: '0');
-+ if (i >= 64) {
-+ hexBuf[i++] = '\n';
-+ writePSBuf(hexBuf, i);
-+ i = 0;
-+ }
-+ }
- }
-- }
-- } else {
-- // Gray color image
-- for (x = 0; x < w; ++x) {
-- col[comp] |= p[4*x + comp];
-- digit = p[4*x + comp] / 16;
-- hexBuf[i++] = digit + ((digit >= 10)? 'a' - 10: '0');
-- digit = p[4*x + comp] % 16;
-- hexBuf[i++] = digit + ((digit >= 10)? 'a' - 10: '0');
-- if (i >= 64) {
-- hexBuf[i++] = '\n';
-- writePSBuf(hexBuf, i);
-- i = 0;
-+ }
-+ p -= bitmap->getRowSize();
-+ }
-+ delete rgbCS;
-+ break;
-+ default:
-+ for (y = 0; y < h; ++y) {
-+ for (comp = 0; comp < 4; ++comp) {
-+ if (useBinary) {
-+ // Binary color image
-+ for (x = 0; x < w; ++x) {
-+ col[comp] |= p[4*x + comp];
-+ hexBuf[i++] = p[4*x + comp];
-+ if (i >= 64) {
-+ writePSBuf(hexBuf, i);
-+ i = 0;
-+ }
-+ }
-+ } else {
-+ // Gray color image
-+ for (x = 0; x < w; ++x) {
-+ col[comp] |= p[4*x + comp];
-+ digit = p[4*x + comp] / 16;
-+ hexBuf[i++] = digit + ((digit >= 10)? 'a' - 10: '0');
-+ digit = p[4*x + comp] % 16;
-+ hexBuf[i++] = digit + ((digit >= 10)? 'a' - 10: '0');
-+ if (i >= 64) {
-+ hexBuf[i++] = '\n';
-+ writePSBuf(hexBuf, i);
-+ i = 0;
-+ }
-+ }
- }
-- }
-- }
-- }
-- p -= bitmap->getRowSize();
-+ }
-+ p -= bitmap->getRowSize();
-+ }
-+ break;
- }
- } else {
- // Color image, do not need to check color flags
-- for (y = 0; y < h; ++y) {
-- for (comp = 0; comp < 4; ++comp) {
-- if (useBinary) {
-- // Binary color image
-- for (x = 0; x < w; ++x) {
-- hexBuf[i++] = p[4*x + comp];
-- if (i >= 64) {
-- writePSBuf(hexBuf, i);
-- i = 0;
-+ switch (colorMode) {
-+ case splashModeRGB8:
-+ case splashModeBGR8:
-+ rgbCS = new GfxDeviceRGBColorSpace();
-+ for (y = 0; y < h; ++y) {
-+ for (comp = 0; comp < 4; ++comp) {
-+ if (useBinary) {
-+ // Binary color image
-+ for (x = 0; x < w; ++x) {
-+ if (likely(colorMode == splashModeRGB8)) {
-+ inputColor.c[0] = byteToCol(p[3*x + 0]);
-+ inputColor.c[1] = byteToCol(p[3*x + 1]);
-+ inputColor.c[2] = byteToCol(p[3*x + 2]);
-+ } else {
-+ inputColor.c[0] = byteToCol(p[3*x + 2]);
-+ inputColor.c[1] = byteToCol(p[3*x + 1]);
-+ inputColor.c[2] = byteToCol(p[3*x + 0]);
-+ }
-+ rgbCS->getCMYK(&inputColor, &cmyk);
-+ cmykColor[0] = colToByte(cmyk.c);
-+ cmykColor[1] = colToByte(cmyk.m);
-+ cmykColor[2] = colToByte(cmyk.y);
-+ cmykColor[3] = colToByte(cmyk.k);
-+
-+ hexBuf[i++] = cmykColor[comp];
-+ if (i >= 64) {
-+ writePSBuf(hexBuf, i);
-+ i = 0;
-+ }
-+ }
-+ } else {
-+ // Hex color image
-+ for (x = 0; x < w; ++x) {
-+ if (likely(colorMode == splashModeRGB8)) {
-+ inputColor.c[0] = byteToCol(p[3*x + 0]);
-+ inputColor.c[1] = byteToCol(p[3*x + 1]);
-+ inputColor.c[2] = byteToCol(p[3*x + 2]);
-+ } else {
-+ inputColor.c[0] = byteToCol(p[3*x + 2]);
-+ inputColor.c[1] = byteToCol(p[3*x + 1]);
-+ inputColor.c[2] = byteToCol(p[3*x + 0]);
-+ }
-+ rgbCS->getCMYK(&inputColor, &cmyk);
-+ cmykColor[0] = colToByte(cmyk.c);
-+ cmykColor[1] = colToByte(cmyk.m);
-+ cmykColor[2] = colToByte(cmyk.y);
-+ cmykColor[3] = colToByte(cmyk.k);
-+
-+ digit = cmykColor[comp] / 16;
-+ hexBuf[i++] = digit + ((digit >= 10)? 'a' - 10: '0');
-+ digit = cmykColor[comp] % 16;
-+ hexBuf[i++] = digit + ((digit >= 10)? 'a' - 10: '0');
-+ if (i >= 64) {
-+ hexBuf[i++] = '\n';
-+ writePSBuf(hexBuf, i);
-+ i = 0;
-+ }
-+ }
- }
-- }
-- } else {
-- // Hex color image
-- for (x = 0; x < w; ++x) {
-- digit = p[4*x + comp] / 16;
-- hexBuf[i++] = digit + ((digit >= 10)? 'a' - 10: '0');
-- digit = p[4*x + comp] % 16;
-- hexBuf[i++] = digit + ((digit >= 10)? 'a' - 10: '0');
-- if (i >= 64) {
-- hexBuf[i++] = '\n';
-- writePSBuf(hexBuf, i);
-- i = 0;
-+ }
-+ p -= bitmap->getRowSize();
-+ }
-+ delete rgbCS;
-+ break;
-+ default:
-+ for (y = 0; y < h; ++y) {
-+ for (comp = 0; comp < 4; ++comp) {
-+ if (useBinary) {
-+ // Binary color image
-+ for (x = 0; x < w; ++x) {
-+ hexBuf[i++] = p[4*x + comp];
-+ if (i >= 64) {
-+ writePSBuf(hexBuf, i);
-+ i = 0;
-+ }
-+ }
-+ } else {
-+ // Hex color image
-+ for (x = 0; x < w; ++x) {
-+ digit = p[4*x + comp] / 16;
-+ hexBuf[i++] = digit + ((digit >= 10)? 'a' - 10: '0');
-+ digit = p[4*x + comp] % 16;
-+ hexBuf[i++] = digit + ((digit >= 10)? 'a' - 10: '0');
-+ if (i >= 64) {
-+ hexBuf[i++] = '\n';
-+ writePSBuf(hexBuf, i);
-+ i = 0;
-+ }
-+ }
- }
-- }
-- }
-- }
-- p -= bitmap->getRowSize();
-+ }
-+ p -= bitmap->getRowSize();
-+ }
-+ break;
- }
- }
- if (i != 0) {
---
-2.21.0
-