Fix buffer overflow vulnerability in xpdf code.

Security:	http://www.kde.org/info/security/advisory-20070730-1.txt
Security:	CVE-2007-3387
This commit is contained in:
Michael Nottebrock 2007-07-30 21:59:27 +00:00
parent a8f26cf252
commit b09d5e70f1
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=196764
10 changed files with 99 additions and 3 deletions

View file

@ -7,7 +7,7 @@
PORTNAME= koffice
PORTVERSION= 1.6.3
PORTREVISION= 1
PORTREVISION= 2
PORTEPOCH= 2
CATEGORIES= editors kde
MASTER_SITES= ${MASTER_SITE_KDE}

View file

@ -0,0 +1,20 @@
--- filters/kword/pdf/xpdf/xpdf/Stream.cc
+++ filters/kword/pdf/xpdf/xpdf/Stream.cc
@@ -413,13 +413,11 @@ StreamPredictor::StreamPredictor(Stream
predLine = NULL;
ok = gFalse;
- if (width <= 0 || nComps <= 0 || nBits <= 0 ||
- nComps >= INT_MAX / nBits ||
- width >= INT_MAX / nComps / nBits)
- return;
-
nVals = width * nComps;
- if (nVals * nBits + 7 <= 0)
+ if (width <= 0 || nComps <= 0 || nBits <= 0 ||
+ nComps >= 4 || nBits > 16 ||
+ width >= INT_MAX / nComps ||
+ nVals >= (INT_MAX - 7) / nBits)
return;
pixBytes = (nComps * nBits + 7) >> 3;

View file

@ -7,7 +7,7 @@
PORTNAME= koffice
PORTVERSION= 1.6.3
PORTREVISION= 1
PORTREVISION= 2
PORTEPOCH= 2
CATEGORIES= editors kde
MASTER_SITES= ${MASTER_SITE_KDE}

View file

@ -0,0 +1,20 @@
--- filters/kword/pdf/xpdf/xpdf/Stream.cc
+++ filters/kword/pdf/xpdf/xpdf/Stream.cc
@@ -413,13 +413,11 @@ StreamPredictor::StreamPredictor(Stream
predLine = NULL;
ok = gFalse;
- if (width <= 0 || nComps <= 0 || nBits <= 0 ||
- nComps >= INT_MAX / nBits ||
- width >= INT_MAX / nComps / nBits)
- return;
-
nVals = width * nComps;
- if (nVals * nBits + 7 <= 0)
+ if (width <= 0 || nComps <= 0 || nBits <= 0 ||
+ nComps >= 4 || nBits > 16 ||
+ width >= INT_MAX / nComps ||
+ nVals >= (INT_MAX - 7) / nBits)
return;
pixBytes = (nComps * nBits + 7) >> 3;

View file

@ -7,7 +7,7 @@
PORTNAME= koffice
PORTVERSION= 1.6.3
PORTREVISION= 1
PORTREVISION= 2
PORTEPOCH= 2
CATEGORIES= editors kde
MASTER_SITES= ${MASTER_SITE_KDE}

View file

@ -0,0 +1,20 @@
--- filters/kword/pdf/xpdf/xpdf/Stream.cc
+++ filters/kword/pdf/xpdf/xpdf/Stream.cc
@@ -413,13 +413,11 @@ StreamPredictor::StreamPredictor(Stream
predLine = NULL;
ok = gFalse;
- if (width <= 0 || nComps <= 0 || nBits <= 0 ||
- nComps >= INT_MAX / nBits ||
- width >= INT_MAX / nComps / nBits)
- return;
-
nVals = width * nComps;
- if (nVals * nBits + 7 <= 0)
+ if (width <= 0 || nComps <= 0 || nBits <= 0 ||
+ nComps >= 4 || nBits > 16 ||
+ width >= INT_MAX / nComps ||
+ nVals >= (INT_MAX - 7) / nBits)
return;
pixBytes = (nComps * nBits + 7) >> 3;

View file

@ -8,6 +8,7 @@
PORTNAME= kdegraphics
PORTVERSION= ${KDE_VERSION}
PORTREVISION= 1
CATEGORIES= graphics kde
MASTER_SITES= ${MASTER_SITE_KDE}
MASTER_SITE_SUBDIR= stable/${PORTVERSION:S/.0//}/src

View file

@ -0,0 +1,17 @@
Index: kpdf/xpdf/xpdf/Stream.cc
===================================================================
--- kpdf/xpdf/xpdf/Stream.cc (revision 689574)
+++ kpdf/xpdf/xpdf/Stream.cc (working copy)
@@ -411,9 +411,9 @@ StreamPredictor::StreamPredictor(Stream
nVals = width * nComps;
if (width <= 0 || nComps <= 0 || nBits <= 0 ||
- nComps >= INT_MAX / nBits ||
- width >= INT_MAX / nComps / nBits ||
- nVals * nBits + 7 < 0) {
+ nComps > gfxColorMaxComps || nBits > 16 ||
+ width >= INT_MAX / nComps ||
+ nVals >= (INT_MAX - 7) / nBits) {
return;
}
pixBytes = (nComps * nBits + 7) >> 3;

View file

@ -8,6 +8,7 @@
PORTNAME= kdegraphics
PORTVERSION= ${KDE_VERSION}
PORTREVISION= 1
CATEGORIES= graphics kde
MASTER_SITES= ${MASTER_SITE_KDE}
MASTER_SITE_SUBDIR= stable/${PORTVERSION:S/.0//}/src

View file

@ -0,0 +1,17 @@
Index: kpdf/xpdf/xpdf/Stream.cc
===================================================================
--- kpdf/xpdf/xpdf/Stream.cc (revision 689574)
+++ kpdf/xpdf/xpdf/Stream.cc (working copy)
@@ -411,9 +411,9 @@ StreamPredictor::StreamPredictor(Stream
nVals = width * nComps;
if (width <= 0 || nComps <= 0 || nBits <= 0 ||
- nComps >= INT_MAX / nBits ||
- width >= INT_MAX / nComps / nBits ||
- nVals * nBits + 7 < 0) {
+ nComps > gfxColorMaxComps || nBits > 16 ||
+ width >= INT_MAX / nComps ||
+ nVals >= (INT_MAX - 7) / nBits) {
return;
}
pixBytes = (nComps * nBits + 7) >> 3;