summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app-text/texlive/files/2005/texlive-2005-xpdf-vulnerabilities.patch')
-rw-r--r--app-text/texlive/files/2005/texlive-2005-xpdf-vulnerabilities.patch143
1 files changed, 143 insertions, 0 deletions
diff --git a/app-text/texlive/files/2005/texlive-2005-xpdf-vulnerabilities.patch b/app-text/texlive/files/2005/texlive-2005-xpdf-vulnerabilities.patch
new file mode 100644
index 000000000000..7ad201d4e2d2
--- /dev/null
+++ b/app-text/texlive/files/2005/texlive-2005-xpdf-vulnerabilities.patch
@@ -0,0 +1,143 @@
+diff -urN TeX.orig/libs/xpdf/xpdf/JBIG2Stream.cc TeX/libs/xpdf/xpdf/JBIG2Stream.cc
+--- TeX.orig/libs/xpdf/xpdf/JBIG2Stream.cc 2005-08-17 07:34:31.000000000 +0200
++++ TeX/libs/xpdf/xpdf/JBIG2Stream.cc 2006-05-28 23:52:10.000000000 +0200
+@@ -7,6 +7,7 @@
+ //========================================================================
+
+ #include <aconf.h>
++#include <limits.h>
+
+ #ifdef USE_GCC_PRAGMAS
+ #pragma implementation
+@@ -681,6 +682,11 @@
+ w = wA;
+ h = hA;
+ line = (wA + 7) >> 3;
++ if (h < 0 || line <= 0 || h >= (INT_MAX - 1) / line) {
++ error(-1, "invalid width/height");
++ data = NULL;
++ return;
++ }
+ // need to allocate one extra guard byte for use in combine()
+ data = (Guchar *)gmalloc(h * line + 1);
+ data[h * line] = 0;
+@@ -692,6 +698,11 @@
+ w = bitmap->w;
+ h = bitmap->h;
+ line = bitmap->line;
++ if (h < 0 || line <= 0 || h >= (INT_MAX - 1) / line) {
++ error(-1, "invalid width/height");
++ data = NULL;
++ return;
++ }
+ // need to allocate one extra guard byte for use in combine()
+ data = (Guchar *)gmalloc(h * line + 1);
+ memcpy(data, bitmap->data, h * line);
+@@ -720,7 +731,10 @@
+ }
+
+ void JBIG2Bitmap::expand(int newH, Guint pixel) {
+- if (newH <= h) {
++ if (newH <= h || line <= 0 || newH >= (INT_MAX - 1) / line) {
++ error(-1, "invalid width/height");
++ gfree(data);
++ data = NULL;
+ return;
+ }
+ // need to allocate one extra guard byte for use in combine()
+@@ -2936,6 +2950,11 @@
+ JBIG2BitmapPtr tpgrCXPtr0, tpgrCXPtr1, tpgrCXPtr2;
+ int x, y, pix;
+
++ if (w < 0 || h <= 0 || w >= INT_MAX / h) {
++ error(-1, "invalid width/height");
++ return NULL;
++ }
++
+ bitmap = new JBIG2Bitmap(0, w, h);
+ bitmap->clearToZero();
+
+diff -urN TeX.orig/libs/xpdf/xpdf/JPXStream.cc TeX/libs/xpdf/xpdf/JPXStream.cc
+--- TeX.orig/libs/xpdf/xpdf/JPXStream.cc 2005-08-17 07:34:31.000000000 +0200
++++ TeX/libs/xpdf/xpdf/JPXStream.cc 2006-05-28 23:44:00.000000000 +0200
+@@ -7,6 +7,7 @@
+ //========================================================================
+
+ #include <aconf.h>
++#include <limits.h>
+
+ #ifdef USE_GCC_PRAGMAS
+ #pragma implementation
+diff -urN TeX.orig/libs/xpdf/xpdf/Stream.cc TeX/libs/xpdf/xpdf/Stream.cc
+--- TeX.orig/libs/xpdf/xpdf/Stream.cc 2005-08-17 07:34:31.000000000 +0200
++++ TeX/libs/xpdf/xpdf/Stream.cc 2006-05-28 23:49:26.000000000 +0200
+@@ -7,6 +7,7 @@
+ //========================================================================
+
+ #include <aconf.h>
++#include <limits.h>
+
+ #ifdef USE_GCC_PRAGMAS
+ #pragma implementation
+@@ -1256,8 +1257,9 @@
+ endOfLine = endOfLineA;
+ byteAlign = byteAlignA;
+ columns = columnsA;
+- if (columns < 1) {
+- columns = 1;
++ if (columns < 1 || columns >= INT_MAX / sizeof(short)) {
++ error (-1, "invalid number of columns: %d\n", columns);
++ exit (1);
+ }
+ rows = rowsA;
+ endOfBlock = endOfBlockA;
+@@ -2925,6 +2927,10 @@
+ height = read16();
+ width = read16();
+ numComps = str->getChar();
++ if (numComps <= 0 || numComps > 4) {
++ error(getPos(), "Bad number of components in DCT stream", prec);
++ return gFalse;
++ }
+ if (prec != 8) {
+ error(getPos(), "Bad DCT precision %d", prec);
+ return gFalse;
+@@ -2947,6 +2953,11 @@
+
+ length = read16() - 2;
+ scanInfo.numComps = str->getChar();
++ if (scanInfo.numComps <= 0 || scanInfo.numComps > 4) {
++ scanInfo.numComps = 0;
++ error(getPos(), "Bad number of components in DCT stream");
++ return gFalse;
++ }
+ --length;
+ if (length != 2 * scanInfo.numComps + 3) {
+ error(getPos(), "Bad DCT scan info block");
+@@ -3031,12 +3042,12 @@
+ while (length > 0) {
+ index = str->getChar();
+ --length;
+- if ((index & 0x0f) >= 4) {
++ if ((index & 0x10) >= 4 || (index & 0x10) < 0) {
+ error(getPos(), "Bad DCT Huffman table");
+ return gFalse;
+ }
+ if (index & 0x10) {
+- index &= 0x0f;
++ index &= 0x03;
+ if (index >= numACHuffTables)
+ numACHuffTables = index+1;
+ tbl = &acHuffTables[index];
+@@ -3154,9 +3165,11 @@
+ do {
+ do {
+ c = str->getChar();
++ if (c == EOF) return EOF;
+ } while (c != 0xff && c != EOF);
+ do {
+ c = str->getChar();
++ if (c == EOF) return EOF;
+ } while (c == 0xff);
+ } while (c == 0x00);
+ return c;