Annotation of /trunk/xpdf/patches/xpdf-3.01pl1.patch
Parent Directory | Revision Log
Revision 153 -
(hide 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 | niro | 153 | 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 | //------------------------------------------------------------------------ |