[poppler] poppler/Annot.cc poppler/Link.cc poppler/Sound.cc
Albert Astals Cid
aacid at kemper.freedesktop.org
Tue Jun 30 14:07:56 PDT 2009
poppler/Annot.cc | 7 ++++---
poppler/Link.cc | 30 +++++++++++++++++-------------
poppler/Sound.cc | 8 +++++---
3 files changed, 26 insertions(+), 19 deletions(-)
New commits:
commit 6ef83414ab55294cf46b6b05813927bb04066986
Author: Albert Astals Cid <aacid at kde.org>
Date: Tue Jun 30 23:07:00 2009 +0200
Check getFileSpecNameForPlatform succeeded before using it's return value
Fixes crash on bug 22551
diff --git a/poppler/Annot.cc b/poppler/Annot.cc
index 4bba3b5..99c3731 100644
--- a/poppler/Annot.cc
+++ b/poppler/Annot.cc
@@ -3528,9 +3528,10 @@ void AnnotMovie::initialize(XRef *xrefA, Catalog *catalog, Dict* dict) {
if (dict->lookup("Movie", &movieDict)->isDict()) {
Object obj2;
- getFileSpecNameForPlatform(movieDict.dictLookup("F", &obj1), &obj2);
- fileName = obj2.getString()->copy();
- obj2.free();
+ if (getFileSpecNameForPlatform(movieDict.dictLookup("F", &obj1), &obj2)) {
+ fileName = obj2.getString()->copy();
+ obj2.free();
+ }
obj1.free();
if (movieDict.dictLookup("Aspect", &obj1)->isArray()) {
diff --git a/poppler/Link.cc b/poppler/Link.cc
index 61f05b7..7cb7aeb 100644
--- a/poppler/Link.cc
+++ b/poppler/Link.cc
@@ -16,7 +16,7 @@
// Copyright (C) 2006, 2008 Pino Toscano <pino at kde.org>
// Copyright (C) 2007 Carlos Garcia Campos <carlosgc at gnome.org>
// Copyright (C) 2008 Hugo Mercier <hmercier31 at gmail.com>
-// Copyright (C) 2008 Albert Astals Cid <aacid at kde.org>
+// Copyright (C) 2008, 2009 Albert Astals Cid <aacid at kde.org>
//
// To see a description of the changes please see the Changelog file that
// came with your tarball or type make ChangeLog if you are building from git
@@ -423,9 +423,10 @@ LinkGoToR::LinkGoToR(Object *fileSpecObj, Object *destObj) {
// get file name
Object obj1;
- getFileSpecNameForPlatform (fileSpecObj, &obj1);
- fileName = obj1.getString()->copy();
- obj1.free();
+ if (getFileSpecNameForPlatform (fileSpecObj, &obj1)) {
+ fileName = obj1.getString()->copy();
+ obj1.free();
+ }
// named destination
if (destObj->isName()) {
@@ -469,17 +470,19 @@ LinkLaunch::LinkLaunch(Object *actionObj) {
if (actionObj->isDict()) {
if (!actionObj->dictLookup("F", &obj1)->isNull()) {
- getFileSpecNameForPlatform (&obj1, &obj3);
- fileName = obj3.getString()->copy();
- obj3.free();
+ if (getFileSpecNameForPlatform (&obj1, &obj3)) {
+ fileName = obj3.getString()->copy();
+ obj3.free();
+ }
} else {
obj1.free();
#ifdef WIN32
if (actionObj->dictLookup("Win", &obj1)->isDict()) {
obj1.dictLookup("F", &obj2);
- getFileSpecNameForPlatform (&obj2, &obj3);
- fileName = obj3.getString()->copy();
- obj3.free();
+ if (getFileSpecNameForPlatform (&obj2, &obj3)) {
+ fileName = obj3.getString()->copy();
+ obj3.free();
+ }
obj2.free();
if (obj1.dictLookup("P", &obj2)->isString()) {
params = obj2.getString()->copy();
@@ -493,9 +496,10 @@ LinkLaunch::LinkLaunch(Object *actionObj) {
//~ just like the Win dictionary until they say otherwise.
if (actionObj->dictLookup("Unix", &obj1)->isDict()) {
obj1.dictLookup("F", &obj2);
- getFileSpecNameForPlatform (&obj2, &obj3);
- fileName = obj3.getString()->copy();
- obj3.free();
+ if (getFileSpecNameForPlatform (&obj2, &obj3)) {
+ fileName = obj3.getString()->copy();
+ obj3.free();
+ }
obj2.free();
if (obj1.dictLookup("P", &obj2)->isString()) {
params = obj2.getString()->copy();
diff --git a/poppler/Sound.cc b/poppler/Sound.cc
index 0dec645..6129fdc 100644
--- a/poppler/Sound.cc
+++ b/poppler/Sound.cc
@@ -1,5 +1,6 @@
/* Sound.cc - an object that holds the sound structure
* Copyright (C) 2006-2007, Pino Toscano <pino at kde.org>
+ * Copyright (C) 2009, Albert Astals Cid <aacid at kde.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -68,9 +69,10 @@ Sound::Sound(Object *obj, bool readAttrs)
Object obj1;
// valid 'F' key -> external file
kind = soundExternal;
- getFileSpecNameForPlatform (&tmp, &obj1);
- fileName = obj1.getString()->copy();
- obj1.free();
+ if (getFileSpecNameForPlatform (&tmp, &obj1)) {
+ fileName = obj1.getString()->copy();
+ obj1.free();
+ }
} else {
// no file specification, then the sound data have to be
// extracted from the stream
More information about the poppler
mailing list