git.asbjorn.biz
/
swftools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
added missing files
[swftools.git]
/
pdf2swf
/
xpdf
/
Parser.cc
diff --git
a/pdf2swf/xpdf/Parser.cc
b/pdf2swf/xpdf/Parser.cc
index
0aa66d3
..
af7c933
100644
(file)
--- a/
pdf2swf/xpdf/Parser.cc
+++ b/
pdf2swf/xpdf/Parser.cc
@@
-19,9
+19,7
@@
#include "Parser.h"
#include "XRef.h"
#include "Error.h"
#include "Parser.h"
#include "XRef.h"
#include "Error.h"
-#ifndef NO_DECRYPTION
#include "Decrypt.h"
#include "Decrypt.h"
-#endif
Parser::Parser(XRef *xrefA, Lexer *lexerA) {
xref = xrefA;
Parser::Parser(XRef *xrefA, Lexer *lexerA) {
xref = xrefA;
@@
-37,23
+35,17
@@
Parser::~Parser() {
delete lexer;
}
delete lexer;
}
-#ifndef NO_DECRYPTION
Object *Parser::getObj(Object *obj,
Guchar *fileKey, int keyLength,
int objNum, int objGen) {
Object *Parser::getObj(Object *obj,
Guchar *fileKey, int keyLength,
int objNum, int objGen) {
-#else
-Object *Parser::getObj(Object *obj) {
-#endif
char *key;
Stream *str;
Object obj2;
int num;
char *key;
Stream *str;
Object obj2;
int num;
-#ifndef NO_DECRYPTION
Decrypt *decrypt;
GString *s;
char *p;
int i;
Decrypt *decrypt;
GString *s;
char *p;
int i;
-#endif
// refill buffer after inline image data
if (inlineImg == 2) {
// refill buffer after inline image data
if (inlineImg == 2) {
@@
-69,11
+61,7
@@
Object *Parser::getObj(Object *obj) {
shift();
obj->initArray(xref);
while (!buf1.isCmd("]") && !buf1.isEOF())
shift();
obj->initArray(xref);
while (!buf1.isCmd("]") && !buf1.isEOF())
-#ifndef NO_DECRYPTION
obj->arrayAdd(getObj(&obj2, fileKey, keyLength, objNum, objGen));
obj->arrayAdd(getObj(&obj2, fileKey, keyLength, objNum, objGen));
-#else
- obj->arrayAdd(getObj(&obj2));
-#endif
if (buf1.isEOF())
error(getPos(), "End of file inside array");
shift();
if (buf1.isEOF())
error(getPos(), "End of file inside array");
shift();
@@
-93,11
+81,7
@@
Object *Parser::getObj(Object *obj) {
gfree(key);
break;
}
gfree(key);
break;
}
-#ifndef NO_DECRYPTION
obj->dictAdd(key, getObj(&obj2, fileKey, keyLength, objNum, objGen));
obj->dictAdd(key, getObj(&obj2, fileKey, keyLength, objNum, objGen));
-#else
- obj->dictAdd(key, getObj(&obj2));
-#endif
}
}
if (buf1.isEOF())
}
}
if (buf1.isEOF())
@@
-105,12
+89,10
@@
Object *Parser::getObj(Object *obj) {
if (buf2.isCmd("stream")) {
if ((str = makeStream(obj))) {
obj->initStream(str);
if (buf2.isCmd("stream")) {
if ((str = makeStream(obj))) {
obj->initStream(str);
-#ifndef NO_DECRYPTION
if (fileKey) {
str->getBaseStream()->doDecryption(fileKey, keyLength,
objNum, objGen);
}
if (fileKey) {
str->getBaseStream()->doDecryption(fileKey, keyLength,
objNum, objGen);
}
-#endif
} else {
obj->free();
obj->initError();
} else {
obj->free();
obj->initError();
@@
-131,7
+113,6
@@
Object *Parser::getObj(Object *obj) {
obj->initInt(num);
}
obj->initInt(num);
}
-#ifndef NO_DECRYPTION
// string
} else if (buf1.isString() && fileKey) {
buf1.copy(obj);
// string
} else if (buf1.isString() && fileKey) {
buf1.copy(obj);
@@
-144,7
+125,6
@@
Object *Parser::getObj(Object *obj) {
}
delete decrypt;
shift();
}
delete decrypt;
shift();
-#endif
// simple object
} else {
// simple object
} else {
@@
-157,6
+137,7
@@
Object *Parser::getObj(Object *obj) {
Stream *Parser::makeStream(Object *dict) {
Object obj;
Stream *Parser::makeStream(Object *dict) {
Object obj;
+ BaseStream *baseStr;
Stream *str;
Guint pos, endPos, length;
Stream *str;
Guint pos, endPos, length;
@@
-185,13
+166,7
@@
Stream *Parser::makeStream(Object *dict) {
if (!lexer->getStream()) {
return NULL;
}
if (!lexer->getStream()) {
return NULL;
}
-
- // make base stream
- str = lexer->getStream()->getBaseStream()->makeSubStream(pos, gTrue,
- length, dict);
-
- // get filters
- str = str->addFilters(dict);
+ baseStr = lexer->getStream()->getBaseStream();
// skip over stream data
lexer->setPos(pos + length);
// skip over stream data
lexer->setPos(pos + length);
@@
-203,9
+178,17
@@
Stream *Parser::makeStream(Object *dict) {
shift();
} else {
error(getPos(), "Missing 'endstream'");
shift();
} else {
error(getPos(), "Missing 'endstream'");
- str->ignoreLength();
+ // kludge for broken PDF files: just add 5k to the length, and
+ // hope its enough
+ length += 5000;
}
}
+ // make base stream
+ str = baseStr->makeSubStream(pos, gTrue, length, dict);
+
+ // get filters
+ str = str->addFilters(dict);
+
return str;
}
return str;
}