summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/pdfclean.c20
-rw-r--r--test/pdfdebug.c18
2 files changed, 36 insertions, 2 deletions
diff --git a/test/pdfclean.c b/test/pdfclean.c
index c6af657b..69c51590 100644
--- a/test/pdfclean.c
+++ b/test/pdfclean.c
@@ -18,6 +18,23 @@ void usage()
exit(1);
}
+void preloadobjstms(pdf_xref *xref)
+{
+ fz_error *error;
+ fz_obj *obj;
+ int i;
+
+ for (i = 0; i < xref->size; i++)
+ {
+ if (xref->table[i].type == 'o')
+ {
+ error = pdf_loadobject0(&obj, xref, i, 0, nil);
+ if (error) fz_abort(error);
+ fz_dropobj(obj);
+ }
+ }
+}
+
void expandstreams(pdf_xref *xref)
{
fz_error *error;
@@ -140,7 +157,10 @@ int main(int argc, char **argv)
expandstreams(xref);
if (dogc)
+ {
+ preloadobjstms(xref);
pdf_garbagecollect(xref);
+ }
error = pdf_savepdf(xref, outfile, encrypt);
if (error)
diff --git a/test/pdfdebug.c b/test/pdfdebug.c
index ddc10dff..1009849f 100644
--- a/test/pdfdebug.c
+++ b/test/pdfdebug.c
@@ -5,10 +5,11 @@ static char *password = "";
static int dodecode = 0;
static int dorepair = 0;
static int doprintxref = 0;
+static int dosave = 0;
void usage()
{
- fprintf(stderr, "usage: pdfdebug [-drx] [-u password] file.pdf [oid ...]\n");
+ fprintf(stderr, "usage: pdfdebug [-drxs] [-u password] file.pdf [oid ...]\n");
exit(1);
}
@@ -43,9 +44,13 @@ void printsafe(unsigned char *buf, int n)
void decodestream(pdf_xref *xref, fz_obj *stream, int oid, int gid, int ofs)
{
+ FILE *copy;
fz_error *error;
unsigned char buf[512];
+ if (dosave)
+ copy = fopen("/tmp/dump.stm", "wb");
+
safecol = 0;
error = pdf_openstream0(xref, stream, oid, gid, ofs);
@@ -59,8 +64,14 @@ void decodestream(pdf_xref *xref, fz_obj *stream, int oid, int gid, int ofs)
if (n < 0)
fz_abort(fz_ferror(xref->file));
printsafe(buf, n);
+
+ if (dosave)
+ fwrite(buf, 1, n, copy);
}
+ if (dosave)
+ fclose(copy);
+
pdf_closestream(xref);
}
@@ -133,10 +144,13 @@ int main(int argc, char **argv)
pdf_xref *xref;
int c;
- while ((c = getopt(argc, argv, "drxopu:")) != -1)
+ while ((c = getopt(argc, argv, "drxsopu:")) != -1)
{
switch (c)
{
+ case 's':
+ dodecode ++;
+ dosave ++;
case 'd':
dodecode ++;
break;