Magellan Linux

Contents of /trunk/xpdf/patches/xpdf-3.01pl1.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 153 - (show annotations) (download)
Tue May 8 20:52:56 2007 UTC (17 years 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 //------------------------------------------------------------------------