[fd5b1fe] | 1 | *** XRef.cc.orig Thu Jul 22 11:04:22 2004
|
---|
| 2 | --- XRef.cc Thu Jul 22 11:04:31 2004
|
---|
| 3 | ***************
|
---|
| 4 | *** 96,102 ****
|
---|
| 5 | }
|
---|
| 6 | nObjects = obj1.getInt();
|
---|
| 7 | obj1.free();
|
---|
| 8 | ! if (nObjects == 0) {
|
---|
| 9 | goto err1;
|
---|
| 10 | }
|
---|
| 11 |
|
---|
| 12 | --- 96,102 ----
|
---|
| 13 | }
|
---|
| 14 | nObjects = obj1.getInt();
|
---|
| 15 | obj1.free();
|
---|
| 16 | ! if (nObjects <= 0) {
|
---|
| 17 | goto err1;
|
---|
| 18 | }
|
---|
| 19 |
|
---|
| 20 | ***************
|
---|
| 21 | *** 106,111 ****
|
---|
| 22 | --- 106,114 ----
|
---|
| 23 | }
|
---|
| 24 | first = obj1.getInt();
|
---|
| 25 | obj1.free();
|
---|
| 26 | + if (first < 0) {
|
---|
| 27 | + goto err1;
|
---|
| 28 | + }
|
---|
| 29 |
|
---|
| 30 | objs = new Object[nObjects];
|
---|
| 31 | objNums = (int *)gmalloc(nObjects * sizeof(int));
|
---|
| 32 | ***************
|
---|
| 33 | *** 130,135 ****
|
---|
| 34 | --- 133,144 ----
|
---|
| 35 | offsets[i] = obj2.getInt();
|
---|
| 36 | obj1.free();
|
---|
| 37 | obj2.free();
|
---|
| 38 | + if (objNums[i] < 0 || offsets[i] < 0 ||
|
---|
| 39 | + (i > 0 && offsets[i] < offsets[i-1])) {
|
---|
| 40 | + delete parser;
|
---|
| 41 | + gfree(offsets);
|
---|
| 42 | + goto err1;
|
---|
| 43 | + }
|
---|
| 44 | }
|
---|
| 45 | while (str->getChar() != EOF) ;
|
---|
| 46 | delete parser;
|
---|
| 47 | ***************
|
---|
| 48 | *** 369,378 ****
|
---|
| 49 | }
|
---|
| 50 | n = obj.getInt();
|
---|
| 51 | obj.free();
|
---|
| 52 | if (first + n > size) {
|
---|
| 53 | for (newSize = size ? 2 * size : 1024;
|
---|
| 54 | ! first + n > newSize;
|
---|
| 55 | newSize <<= 1) ;
|
---|
| 56 | entries = (XRefEntry *)grealloc(entries, newSize * sizeof(XRefEntry));
|
---|
| 57 | for (i = size; i < newSize; ++i) {
|
---|
| 58 | entries[i].offset = 0xffffffff;
|
---|
| 59 | --- 378,393 ----
|
---|
| 60 | }
|
---|
| 61 | n = obj.getInt();
|
---|
| 62 | obj.free();
|
---|
| 63 | + if (first < 0 || n < 0 || first + n < 0) {
|
---|
| 64 | + goto err1;
|
---|
| 65 | + }
|
---|
| 66 | if (first + n > size) {
|
---|
| 67 | for (newSize = size ? 2 * size : 1024;
|
---|
| 68 | ! first + n > newSize && newSize > 0;
|
---|
| 69 | newSize <<= 1) ;
|
---|
| 70 | + if (newSize < 0) {
|
---|
| 71 | + goto err1;
|
---|
| 72 | + }
|
---|
| 73 | entries = (XRefEntry *)grealloc(entries, newSize * sizeof(XRefEntry));
|
---|
| 74 | for (i = size; i < newSize; ++i) {
|
---|
| 75 | entries[i].offset = 0xffffffff;
|
---|
| 76 | ***************
|
---|
| 77 | *** 443,449 ****
|
---|
| 78 |
|
---|
| 79 | // check for an 'XRefStm' key
|
---|
| 80 | if (obj.getDict()->lookup("XRefStm", &obj2)->isInt()) {
|
---|
| 81 | ! pos2 = obj2.getInt();
|
---|
| 82 | readXRef(&pos2);
|
---|
| 83 | if (!ok) {
|
---|
| 84 | goto err1;
|
---|
| 85 | --- 458,464 ----
|
---|
| 86 |
|
---|
| 87 | // check for an 'XRefStm' key
|
---|
| 88 | if (obj.getDict()->lookup("XRefStm", &obj2)->isInt()) {
|
---|
| 89 | ! pos2 = (Guint)obj2.getInt();
|
---|
| 90 | readXRef(&pos2);
|
---|
| 91 | if (!ok) {
|
---|
| 92 | goto err1;
|
---|
| 93 | ***************
|
---|
| 94 | *** 474,479 ****
|
---|
| 95 | --- 489,497 ----
|
---|
| 96 | }
|
---|
| 97 | newSize = obj.getInt();
|
---|
| 98 | obj.free();
|
---|
| 99 | + if (newSize < 0) {
|
---|
| 100 | + goto err1;
|
---|
| 101 | + }
|
---|
| 102 | if (newSize > size) {
|
---|
| 103 | entries = (XRefEntry *)grealloc(entries, newSize * sizeof(XRefEntry));
|
---|
| 104 | for (i = size; i < newSize; ++i) {
|
---|
| 105 | ***************
|
---|
| 106 | *** 494,499 ****
|
---|
| 107 | --- 512,520 ----
|
---|
| 108 | }
|
---|
| 109 | w[i] = obj2.getInt();
|
---|
| 110 | obj2.free();
|
---|
| 111 | + if (w[i] < 0 || w[i] > 4) {
|
---|
| 112 | + goto err1;
|
---|
| 113 | + }
|
---|
| 114 | }
|
---|
| 115 | obj.free();
|
---|
| 116 |
|
---|
| 117 | ***************
|
---|
| 118 | *** 513,525 ****
|
---|
| 119 | }
|
---|
| 120 | n = obj.getInt();
|
---|
| 121 | obj.free();
|
---|
| 122 | ! if (!readXRefStreamSection(xrefStr, w, first, n)) {
|
---|
| 123 | idx.free();
|
---|
| 124 | goto err0;
|
---|
| 125 | }
|
---|
| 126 | }
|
---|
| 127 | } else {
|
---|
| 128 | ! if (!readXRefStreamSection(xrefStr, w, 0, size)) {
|
---|
| 129 | idx.free();
|
---|
| 130 | goto err0;
|
---|
| 131 | }
|
---|
| 132 | --- 534,547 ----
|
---|
| 133 | }
|
---|
| 134 | n = obj.getInt();
|
---|
| 135 | obj.free();
|
---|
| 136 | ! if (first < 0 || n < 0 ||
|
---|
| 137 | ! !readXRefStreamSection(xrefStr, w, first, n)) {
|
---|
| 138 | idx.free();
|
---|
| 139 | goto err0;
|
---|
| 140 | }
|
---|
| 141 | }
|
---|
| 142 | } else {
|
---|
| 143 | ! if (!readXRefStreamSection(xrefStr, w, 0, newSize)) {
|
---|
| 144 | idx.free();
|
---|
| 145 | goto err0;
|
---|
| 146 | }
|
---|
| 147 | ***************
|
---|
| 148 | *** 551,560 ****
|
---|
| 149 | Guint offset;
|
---|
| 150 | int type, gen, c, newSize, i, j;
|
---|
| 151 |
|
---|
| 152 | if (first + n > size) {
|
---|
| 153 | for (newSize = size ? 2 * size : 1024;
|
---|
| 154 | ! first + n > newSize;
|
---|
| 155 | newSize <<= 1) ;
|
---|
| 156 | entries = (XRefEntry *)grealloc(entries, newSize * sizeof(XRefEntry));
|
---|
| 157 | for (i = size; i < newSize; ++i) {
|
---|
| 158 | entries[i].offset = 0xffffffff;
|
---|
| 159 | --- 573,588 ----
|
---|
| 160 | Guint offset;
|
---|
| 161 | int type, gen, c, newSize, i, j;
|
---|
| 162 |
|
---|
| 163 | + if (first + n < 0) {
|
---|
| 164 | + return gFalse;
|
---|
| 165 | + }
|
---|
| 166 | if (first + n > size) {
|
---|
| 167 | for (newSize = size ? 2 * size : 1024;
|
---|
| 168 | ! first + n > newSize && newSize > 0;
|
---|
| 169 | newSize <<= 1) ;
|
---|
| 170 | + if (newSize < 0) {
|
---|
| 171 | + return gFalse;
|
---|
| 172 | + }
|
---|
| 173 | entries = (XRefEntry *)grealloc(entries, newSize * sizeof(XRefEntry));
|
---|
| 174 | for (i = size; i < newSize; ++i) {
|
---|
| 175 | entries[i].offset = 0xffffffff;
|
---|
| 176 | ***************
|
---|
| 177 | *** 585,608 ****
|
---|
| 178 | }
|
---|
| 179 | gen = (gen << 8) + c;
|
---|
| 180 | }
|
---|
| 181 | ! switch (type) {
|
---|
| 182 | ! case 0:
|
---|
| 183 | ! entries[i].offset = offset;
|
---|
| 184 | ! entries[i].gen = gen;
|
---|
| 185 | ! entries[i].type = xrefEntryFree;
|
---|
| 186 | ! break;
|
---|
| 187 | ! case 1:
|
---|
| 188 | ! entries[i].offset = offset;
|
---|
| 189 | ! entries[i].gen = gen;
|
---|
| 190 | ! entries[i].type = xrefEntryUncompressed;
|
---|
| 191 | ! break;
|
---|
| 192 | ! case 2:
|
---|
| 193 | ! entries[i].offset = offset;
|
---|
| 194 | ! entries[i].gen = gen;
|
---|
| 195 | ! entries[i].type = xrefEntryCompressed;
|
---|
| 196 | ! break;
|
---|
| 197 | ! default:
|
---|
| 198 | ! return gFalse;
|
---|
| 199 | }
|
---|
| 200 | }
|
---|
| 201 |
|
---|
| 202 | --- 613,638 ----
|
---|
| 203 | }
|
---|
| 204 | gen = (gen << 8) + c;
|
---|
| 205 | }
|
---|
| 206 | ! if (entries[i].offset == 0xffffffff) {
|
---|
| 207 | ! switch (type) {
|
---|
| 208 | ! case 0:
|
---|
| 209 | ! entries[i].offset = offset;
|
---|
| 210 | ! entries[i].gen = gen;
|
---|
| 211 | ! entries[i].type = xrefEntryFree;
|
---|
| 212 | ! break;
|
---|
| 213 | ! case 1:
|
---|
| 214 | ! entries[i].offset = offset;
|
---|
| 215 | ! entries[i].gen = gen;
|
---|
| 216 | ! entries[i].type = xrefEntryUncompressed;
|
---|
| 217 | ! break;
|
---|
| 218 | ! case 2:
|
---|
| 219 | ! entries[i].offset = offset;
|
---|
| 220 | ! entries[i].gen = gen;
|
---|
| 221 | ! entries[i].type = xrefEntryCompressed;
|
---|
| 222 | ! break;
|
---|
| 223 | ! default:
|
---|
| 224 | ! return gFalse;
|
---|
| 225 | ! }
|
---|
| 226 | }
|
---|
| 227 | }
|
---|
| 228 |
|
---|
| 229 | ***************
|
---|
| 230 | *** 664,701 ****
|
---|
| 231 | // look for object
|
---|
| 232 | } else if (isdigit(*p)) {
|
---|
| 233 | num = atoi(p);
|
---|
| 234 | ! do {
|
---|
| 235 | ! ++p;
|
---|
| 236 | ! } while (*p && isdigit(*p));
|
---|
| 237 | ! if (isspace(*p)) {
|
---|
| 238 | do {
|
---|
| 239 | ++p;
|
---|
| 240 | ! } while (*p && isspace(*p));
|
---|
| 241 | ! if (isdigit(*p)) {
|
---|
| 242 | ! gen = atoi(p);
|
---|
| 243 | do {
|
---|
| 244 | ++p;
|
---|
| 245 | ! } while (*p && isdigit(*p));
|
---|
| 246 | ! if (isspace(*p)) {
|
---|
| 247 | do {
|
---|
| 248 | ++p;
|
---|
| 249 | ! } while (*p && isspace(*p));
|
---|
| 250 | ! if (!strncmp(p, "obj", 3)) {
|
---|
| 251 | ! if (num >= size) {
|
---|
| 252 | ! newSize = (num + 1 + 255) & ~255;
|
---|
| 253 | ! entries = (XRefEntry *)
|
---|
| 254 | ! grealloc(entries, newSize * sizeof(XRefEntry));
|
---|
| 255 | ! for (i = size; i < newSize; ++i) {
|
---|
| 256 | ! entries[i].offset = 0xffffffff;
|
---|
| 257 | ! entries[i].type = xrefEntryFree;
|
---|
| 258 | }
|
---|
| 259 | - size = newSize;
|
---|
| 260 | - }
|
---|
| 261 | - if (entries[num].type == xrefEntryFree ||
|
---|
| 262 | - gen >= entries[num].gen) {
|
---|
| 263 | - entries[num].offset = pos - start;
|
---|
| 264 | - entries[num].gen = gen;
|
---|
| 265 | - entries[num].type = xrefEntryUncompressed;
|
---|
| 266 | }
|
---|
| 267 | }
|
---|
| 268 | }
|
---|
| 269 | --- 694,737 ----
|
---|
| 270 | // look for object
|
---|
| 271 | } else if (isdigit(*p)) {
|
---|
| 272 | num = atoi(p);
|
---|
| 273 | ! if (num > 0) {
|
---|
| 274 | do {
|
---|
| 275 | ++p;
|
---|
| 276 | ! } while (*p && isdigit(*p));
|
---|
| 277 | ! if (isspace(*p)) {
|
---|
| 278 | do {
|
---|
| 279 | ++p;
|
---|
| 280 | ! } while (*p && isspace(*p));
|
---|
| 281 | ! if (isdigit(*p)) {
|
---|
| 282 | ! gen = atoi(p);
|
---|
| 283 | do {
|
---|
| 284 | ++p;
|
---|
| 285 | ! } while (*p && isdigit(*p));
|
---|
| 286 | ! if (isspace(*p)) {
|
---|
| 287 | ! do {
|
---|
| 288 | ! ++p;
|
---|
| 289 | ! } while (*p && isspace(*p));
|
---|
| 290 | ! if (!strncmp(p, "obj", 3)) {
|
---|
| 291 | ! if (num >= size) {
|
---|
| 292 | ! newSize = (num + 1 + 255) & ~255;
|
---|
| 293 | ! if (newSize < 0) {
|
---|
| 294 | ! error(-1, "Bad object number");
|
---|
| 295 | ! return gFalse;
|
---|
| 296 | ! }
|
---|
| 297 | ! entries = (XRefEntry *)
|
---|
| 298 | ! grealloc(entries, newSize * sizeof(XRefEntry));
|
---|
| 299 | ! for (i = size; i < newSize; ++i) {
|
---|
| 300 | ! entries[i].offset = 0xffffffff;
|
---|
| 301 | ! entries[i].type = xrefEntryFree;
|
---|
| 302 | ! }
|
---|
| 303 | ! size = newSize;
|
---|
| 304 | ! }
|
---|
| 305 | ! if (entries[num].type == xrefEntryFree ||
|
---|
| 306 | ! gen >= entries[num].gen) {
|
---|
| 307 | ! entries[num].offset = pos - start;
|
---|
| 308 | ! entries[num].gen = gen;
|
---|
| 309 | ! entries[num].type = xrefEntryUncompressed;
|
---|
| 310 | }
|
---|
| 311 | }
|
---|
| 312 | }
|
---|
| 313 | }
|
---|
| 314 |
|
---|
| 315 |
|
---|