|
|
| |
// trailer is ok - read the xref table | // trailer is ok - read the xref table |
} else { | } else { |
|
if (size*sizeof(XRefEntry)/sizeof(XRefEntry) != size) { |
|
error(-1, "Invalid 'size' inside xref table."); |
|
ok = gFalse; |
|
errCode = errDamaged; |
|
return; |
|
} |
entries = (XRefEntry *)gmalloc(size * sizeof(XRefEntry)); | entries = (XRefEntry *)gmalloc(size * sizeof(XRefEntry)); |
for (i = 0; i < size; ++i) { | for (i = 0; i < size; ++i) { |
entries[i].offset = 0xffffffff; | entries[i].offset = 0xffffffff; |
|
|
// table size | // table size |
if (first + n > size) { | if (first + n > size) { |
newSize = size + 256; | newSize = size + 256; |
|
if (newSize*sizeof(XRefEntry)/sizeof(XRefEntry) != newSize) { |
|
error(-1, "Invalid 'newSize'"); |
|
goto err2; |
|
} |
entries = (XRefEntry *)grealloc(entries, newSize * sizeof(XRefEntry)); | entries = (XRefEntry *)grealloc(entries, newSize * sizeof(XRefEntry)); |
for (i = size; i < newSize; ++i) { | for (i = size; i < newSize; ++i) { |
entries[i].offset = 0xffffffff; | entries[i].offset = 0xffffffff; |
|
|
if (!strncmp(p, "obj", 3)) { | if (!strncmp(p, "obj", 3)) { |
if (num >= size) { | if (num >= size) { |
newSize = (num + 1 + 255) & ~255; | newSize = (num + 1 + 255) & ~255; |
|
if (newSize*sizeof(XRefEntry)/sizeof(XRefEntry) != newSize) { |
|
error(-1, "Invalid 'obj' parameters."); |
|
return gFalse; |
|
} |
entries = (XRefEntry *) | entries = (XRefEntry *) |
grealloc(entries, newSize * sizeof(XRefEntry)); | grealloc(entries, newSize * sizeof(XRefEntry)); |
for (i = size; i < newSize; ++i) { | for (i = size; i < newSize; ++i) { |
|
|
} else if (!strncmp(p, "endstream", 9)) { | } else if (!strncmp(p, "endstream", 9)) { |
if (streamEndsLen == streamEndsSize) { | if (streamEndsLen == streamEndsSize) { |
streamEndsSize += 64; | streamEndsSize += 64; |
|
if (streamEndsSize*sizeof(int)/sizeof(int) != streamEndsSize) { |
|
error(-1, "Invalid 'endstream' parameter."); |
|
return gFalse; |
|
} |
|
|
streamEnds = (Guint *)grealloc(streamEnds, | streamEnds = (Guint *)grealloc(streamEnds, |
streamEndsSize * sizeof(int)); | streamEndsSize * sizeof(int)); |
} | } |
|
|
} | } |
pagesSize = numPages0 = obj.getInt(); | pagesSize = numPages0 = obj.getInt(); |
obj.free(); | obj.free(); |
|
if (pagesSize*sizeof(Page *)/sizeof(Page *) != pagesSize || |
|
pagesSize*sizeof(Ref)/sizeof(Ref) != pagesSize) { |
|
error(-1, "Invalid 'pagesSize'"); |
|
ok = gFalse; |
|
return; |
|
} |
pages = (Page **)gmalloc(pagesSize * sizeof(Page *)); | pages = (Page **)gmalloc(pagesSize * sizeof(Page *)); |
pageRefs = (Ref *)gmalloc(pagesSize * sizeof(Ref)); | pageRefs = (Ref *)gmalloc(pagesSize * sizeof(Ref)); |
for (i = 0; i < pagesSize; ++i) { | for (i = 0; i < pagesSize; ++i) { |
|
|
} | } |
if (start >= pagesSize) { | if (start >= pagesSize) { |
pagesSize += 32; | pagesSize += 32; |
|
if (pagesSize*sizeof(Page *)/sizeof(Page *) != pagesSize || |
|
pagesSize*sizeof(Ref)/sizeof(Ref) != pagesSize) { |
|
error(-1, "Invalid 'pagesSize' parameter."); |
|
goto err3; |
|
} |
pages = (Page **)grealloc(pages, pagesSize * sizeof(Page *)); | pages = (Page **)grealloc(pages, pagesSize * sizeof(Page *)); |
pageRefs = (Ref *)grealloc(pageRefs, pagesSize * sizeof(Ref)); | pageRefs = (Ref *)grealloc(pageRefs, pagesSize * sizeof(Ref)); |
for (j = pagesSize - 32; j < pagesSize; ++j) { | for (j = pagesSize - 32; j < pagesSize; ++j) { |