[poppler] poppler/GfxState.cc
Albert Astals Cid
aacid at kemper.freedesktop.org
Sat Nov 20 09:21:51 PST 2010
poppler/GfxState.cc | 32 ++++++++++++++++++++++----------
1 file changed, 22 insertions(+), 10 deletions(-)
New commits:
commit 22e8cebaa15adb4b19c9556cdca43cc3e77832b7
Author: Albert Astals Cid <aacid at kde.org>
Date: Sat Nov 20 17:20:34 2010 +0000
Ensure the obj are num before reading them
diff --git a/poppler/GfxState.cc b/poppler/GfxState.cc
index c750d2d..25b6f32 100644
--- a/poppler/GfxState.cc
+++ b/poppler/GfxState.cc
@@ -2748,14 +2748,21 @@ GfxAxialShading *GfxAxialShading::parse(Dict *dict, Gfx *gfx) {
x0A = y0A = x1A = y1A = 0;
if (dict->lookup("Coords", &obj1)->isArray() &&
obj1.arrayGetLength() == 4) {
- x0A = obj1.arrayGet(0, &obj2)->getNum();
- obj2.free();
- y0A = obj1.arrayGet(1, &obj2)->getNum();
- obj2.free();
- x1A = obj1.arrayGet(2, &obj2)->getNum();
- obj2.free();
- y1A = obj1.arrayGet(3, &obj2)->getNum();
+ Object obj3, obj4, obj5;
+ obj1.arrayGet(0, &obj2);
+ obj1.arrayGet(1, &obj3);
+ obj1.arrayGet(2, &obj4);
+ obj1.arrayGet(3, &obj5);
+ if (obj2.isNum() && obj3.isNum() && obj4.isNum() && obj5.isNum()) {
+ x0A = obj2.getNum();
+ y0A = obj3.getNum();
+ x1A = obj4.getNum();
+ y1A = obj5.getNum();
+ }
obj2.free();
+ obj3.free();
+ obj4.free();
+ obj5.free();
} else {
error(-1, "Missing or invalid Coords in shading dictionary");
goto err1;
@@ -2766,10 +2773,15 @@ GfxAxialShading *GfxAxialShading::parse(Dict *dict, Gfx *gfx) {
t1A = 1;
if (dict->lookup("Domain", &obj1)->isArray() &&
obj1.arrayGetLength() == 2) {
- t0A = obj1.arrayGet(0, &obj2)->getNum();
- obj2.free();
- t1A = obj1.arrayGet(1, &obj2)->getNum();
+ Object obj3;
+ obj1.arrayGet(0, &obj2);
+ obj1.arrayGet(1, &obj3);
+ if (obj2.isNum() && obj3.isNum()) {
+ t0A = obj2.getNum();
+ t1A = obj3.getNum();
+ }
obj2.free();
+ obj3.free();
}
obj1.free();
More information about the poppler
mailing list