Annotation of /trunk/koffice/patches/post-1.3-koffice-CAN-2005-3193.diff
Parent Directory | Revision Log
Revision 144 -
(hide annotations)
(download)
Tue May 8 20:06:05 2007 UTC (17 years, 4 months ago) by niro
File size: 2612 byte(s)
Tue May 8 20:06:05 2007 UTC (17 years, 4 months ago) by niro
File size: 2612 byte(s)
-import
1 | niro | 144 | Index: filters/kword/pdf/xpdf/xpdf/Stream.cc |
2 | =================================================================== | ||
3 | --- filters/kword/pdf/xpdf/xpdf/Stream.cc (revision 485850) | ||
4 | +++ filters/kword/pdf/xpdf/xpdf/Stream.cc (revision 486431) | ||
5 | @@ -404,18 +404,33 @@ void ImageStream::skipLine() { | ||
6 | |||
7 | StreamPredictor::StreamPredictor(Stream *strA, int predictorA, | ||
8 | int widthA, int nCompsA, int nBitsA) { | ||
9 | + int totalBits; | ||
10 | + | ||
11 | str = strA; | ||
12 | predictor = predictorA; | ||
13 | width = widthA; | ||
14 | nComps = nCompsA; | ||
15 | nBits = nBitsA; | ||
16 | + predLine = NULL; | ||
17 | + ok = gFalse; | ||
18 | |||
19 | nVals = width * nComps; | ||
20 | + totalBits = nVals * nBits; | ||
21 | + if ( totalBits == 0 || | ||
22 | + (totalBits / nBits) / nComps != width || | ||
23 | + totalBits + 7 < 0) { | ||
24 | + return; | ||
25 | + } | ||
26 | pixBytes = (nComps * nBits + 7) >> 3; | ||
27 | - rowBytes = ((nVals * nBits + 7) >> 3) + pixBytes; | ||
28 | + rowBytes = ((totalBits + 7) >> 3) + pixBytes; | ||
29 | + if (rowBytes < 0) | ||
30 | + return; | ||
31 | + | ||
32 | predLine = (Guchar *)gmalloc(rowBytes); | ||
33 | memset(predLine, 0, rowBytes); | ||
34 | predIdx = rowBytes; | ||
35 | + | ||
36 | + ok = gTrue; | ||
37 | } | ||
38 | |||
39 | StreamPredictor::~StreamPredictor() { | ||
40 | @@ -982,6 +997,10 @@ LZWStream::LZWStream(Stream *strA, int p | ||
41 | FilterStream(strA) { | ||
42 | if (predictor != 1) { | ||
43 | pred = new StreamPredictor(this, predictor, columns, colors, bits); | ||
44 | + if ( !pred->isOk()) { | ||
45 | + delete pred; | ||
46 | + pred = NULL; | ||
47 | + } | ||
48 | } else { | ||
49 | pred = NULL; | ||
50 | } | ||
51 | @@ -2861,6 +2880,10 @@ GBool DCTStream::readBaselineSOF() { | ||
52 | height = read16(); | ||
53 | width = read16(); | ||
54 | numComps = str->getChar(); | ||
55 | + if (numComps <= 0 || numComps > 4) { | ||
56 | + error(getPos(), "Bad number of components in DCT stream"); | ||
57 | + return gFalse; | ||
58 | + } | ||
59 | if (prec != 8) { | ||
60 | error(getPos(), "Bad DCT precision %d", prec); | ||
61 | return gFalse; | ||
62 | @@ -3179,6 +3202,10 @@ FlateStream::FlateStream(Stream *strA, i | ||
63 | FilterStream(strA) { | ||
64 | if (predictor != 1) { | ||
65 | pred = new StreamPredictor(this, predictor, columns, colors, bits); | ||
66 | + if ( !pred->isOk()) { | ||
67 | + delete pred; | ||
68 | + pred = NULL; | ||
69 | + } | ||
70 | } else { | ||
71 | pred = NULL; | ||
72 | } | ||
73 | Index: filters/kword/pdf/xpdf/xpdf/Stream.h | ||
74 | =================================================================== | ||
75 | --- filters/kword/pdf/xpdf/xpdf/Stream.h (revision 485850) | ||
76 | +++ filters/kword/pdf/xpdf/xpdf/Stream.h (revision 486431) | ||
77 | @@ -227,6 +227,7 @@ public: | ||
78 | |||
79 | int lookChar(); | ||
80 | int getChar(); | ||
81 | + GBool isOk() { return ok; } | ||
82 | |||
83 | private: | ||
84 | |||
85 | @@ -242,6 +243,7 @@ private: | ||
86 | int rowBytes; // bytes per line | ||
87 | Guchar *predLine; // line buffer | ||
88 | int predIdx; // current index in predLine | ||
89 | + GBool ok; | ||
90 | }; | ||
91 | |||
92 | //------------------------------------------------------------------------ |