Contents of /trunk/xpdf/patches/xpdf-3.01pl1.patch
Parent Directory | Revision Log
Revision 153 -
(show annotations)
(download)
Tue May 8 20:52:56 2007 UTC (17 years, 4 months ago) by niro
File size: 4936 byte(s)
Tue May 8 20:52:56 2007 UTC (17 years, 4 months ago) by niro
File size: 4936 byte(s)
-import
1 | diff -c -r xpdf-3.01-orig/xpdf/JPXStream.cc xpdf-3.01/xpdf/JPXStream.cc |
2 | *** xpdf-3.01-orig/xpdf/JPXStream.cc Tue Aug 16 22:34:31 2005 |
3 | --- xpdf-3.01/xpdf/JPXStream.cc Thu Nov 3 16:50:39 2005 |
4 | *************** |
5 | *** 783,789 **** |
6 | int segType; |
7 | GBool haveSIZ, haveCOD, haveQCD, haveSOT; |
8 | Guint precinctSize, style; |
9 | ! Guint segLen, capabilities, comp, i, j, r; |
10 | |
11 | //----- main header |
12 | haveSIZ = haveCOD = haveQCD = haveSOT = gFalse; |
13 | --- 783,789 ---- |
14 | int segType; |
15 | GBool haveSIZ, haveCOD, haveQCD, haveSOT; |
16 | Guint precinctSize, style; |
17 | ! Guint segLen, capabilities, nTiles, comp, i, j, r; |
18 | |
19 | //----- main header |
20 | haveSIZ = haveCOD = haveQCD = haveSOT = gFalse; |
21 | *************** |
22 | *** 818,825 **** |
23 | / img.xTileSize; |
24 | img.nYTiles = (img.ySize - img.yTileOffset + img.yTileSize - 1) |
25 | / img.yTileSize; |
26 | ! img.tiles = (JPXTile *)gmallocn(img.nXTiles * img.nYTiles, |
27 | ! sizeof(JPXTile)); |
28 | for (i = 0; i < img.nXTiles * img.nYTiles; ++i) { |
29 | img.tiles[i].tileComps = (JPXTileComp *)gmallocn(img.nComps, |
30 | sizeof(JPXTileComp)); |
31 | --- 818,830 ---- |
32 | / img.xTileSize; |
33 | img.nYTiles = (img.ySize - img.yTileOffset + img.yTileSize - 1) |
34 | / img.yTileSize; |
35 | ! nTiles = img.nXTiles * img.nYTiles; |
36 | ! // check for overflow before allocating memory |
37 | ! if (nTiles == 0 || nTiles / img.nXTiles != img.nYTiles) { |
38 | ! error(getPos(), "Bad tile count in JPX SIZ marker segment"); |
39 | ! return gFalse; |
40 | ! } |
41 | ! img.tiles = (JPXTile *)gmallocn(nTiles, sizeof(JPXTile)); |
42 | for (i = 0; i < img.nXTiles * img.nYTiles; ++i) { |
43 | img.tiles[i].tileComps = (JPXTileComp *)gmallocn(img.nComps, |
44 | sizeof(JPXTileComp)); |
45 | diff -c -r xpdf-3.01-orig/xpdf/Stream.cc xpdf-3.01/xpdf/Stream.cc |
46 | *** xpdf-3.01-orig/xpdf/Stream.cc Tue Aug 16 22:34:31 2005 |
47 | --- xpdf-3.01/xpdf/Stream.cc Thu Nov 3 16:50:39 2005 |
48 | *************** |
49 | *** 401,418 **** |
50 | |
51 | StreamPredictor::StreamPredictor(Stream *strA, int predictorA, |
52 | int widthA, int nCompsA, int nBitsA) { |
53 | str = strA; |
54 | predictor = predictorA; |
55 | width = widthA; |
56 | nComps = nCompsA; |
57 | nBits = nBitsA; |
58 | |
59 | nVals = width * nComps; |
60 | pixBytes = (nComps * nBits + 7) >> 3; |
61 | ! rowBytes = ((nVals * nBits + 7) >> 3) + pixBytes; |
62 | predLine = (Guchar *)gmalloc(rowBytes); |
63 | memset(predLine, 0, rowBytes); |
64 | predIdx = rowBytes; |
65 | } |
66 | |
67 | StreamPredictor::~StreamPredictor() { |
68 | --- 401,433 ---- |
69 | |
70 | StreamPredictor::StreamPredictor(Stream *strA, int predictorA, |
71 | int widthA, int nCompsA, int nBitsA) { |
72 | + int totalBits; |
73 | + |
74 | str = strA; |
75 | predictor = predictorA; |
76 | width = widthA; |
77 | nComps = nCompsA; |
78 | nBits = nBitsA; |
79 | + predLine = NULL; |
80 | + ok = gFalse; |
81 | |
82 | nVals = width * nComps; |
83 | + totalBits = nVals * nBits; |
84 | + if (totalBits == 0 || |
85 | + (totalBits / nBits) / nComps != width || |
86 | + totalBits + 7 < 0) { |
87 | + return; |
88 | + } |
89 | pixBytes = (nComps * nBits + 7) >> 3; |
90 | ! rowBytes = ((totalBits + 7) >> 3) + pixBytes; |
91 | ! if (rowBytes < 0) { |
92 | ! return; |
93 | ! } |
94 | predLine = (Guchar *)gmalloc(rowBytes); |
95 | memset(predLine, 0, rowBytes); |
96 | predIdx = rowBytes; |
97 | + |
98 | + ok = gTrue; |
99 | } |
100 | |
101 | StreamPredictor::~StreamPredictor() { |
102 | *************** |
103 | *** 1004,1009 **** |
104 | --- 1019,1028 ---- |
105 | FilterStream(strA) { |
106 | if (predictor != 1) { |
107 | pred = new StreamPredictor(this, predictor, columns, colors, bits); |
108 | + if (!pred->isOk()) { |
109 | + delete pred; |
110 | + pred = NULL; |
111 | + } |
112 | } else { |
113 | pred = NULL; |
114 | } |
115 | *************** |
116 | *** 2899,2904 **** |
117 | --- 2918,2931 ---- |
118 | height = read16(); |
119 | width = read16(); |
120 | numComps = str->getChar(); |
121 | + if (numComps <= 0 || numComps > 4) { |
122 | + error(getPos(), "Bad number of components in DCT stream", prec); |
123 | + return gFalse; |
124 | + } |
125 | + if (numComps <= 0 || numComps > 4) { |
126 | + error(getPos(), "Bad number of components in DCT stream", prec); |
127 | + return gFalse; |
128 | + } |
129 | if (prec != 8) { |
130 | error(getPos(), "Bad DCT precision %d", prec); |
131 | return gFalse; |
132 | *************** |
133 | *** 3827,3832 **** |
134 | --- 3854,3863 ---- |
135 | FilterStream(strA) { |
136 | if (predictor != 1) { |
137 | pred = new StreamPredictor(this, predictor, columns, colors, bits); |
138 | + if (!pred->isOk()) { |
139 | + delete pred; |
140 | + pred = NULL; |
141 | + } |
142 | } else { |
143 | pred = NULL; |
144 | } |
145 | diff -c -r xpdf-3.01-orig/xpdf/Stream.h xpdf-3.01/xpdf/Stream.h |
146 | *** xpdf-3.01-orig/xpdf/Stream.h Tue Aug 16 22:34:31 2005 |
147 | --- xpdf-3.01/xpdf/Stream.h Thu Nov 3 16:50:39 2005 |
148 | *************** |
149 | *** 232,237 **** |
150 | --- 232,239 ---- |
151 | |
152 | ~StreamPredictor(); |
153 | |
154 | + GBool isOk() { return ok; } |
155 | + |
156 | int lookChar(); |
157 | int getChar(); |
158 | |
159 | *************** |
160 | *** 249,254 **** |
161 | --- 251,257 ---- |
162 | int rowBytes; // bytes per line |
163 | Guchar *predLine; // line buffer |
164 | int predIdx; // current index in predLine |
165 | + GBool ok; |
166 | }; |
167 | |
168 | //------------------------------------------------------------------------ |