diff options
author | Tor Andersson <tor@ghostscript.com> | 2008-03-27 14:42:36 +0100 |
---|---|---|
committer | Tor Andersson <tor@ghostscript.com> | 2008-03-27 14:42:36 +0100 |
commit | 3909e66a925d8981cce45f4fb64dffb43eb97549 (patch) | |
tree | cf5c9ef72eef151ea766ea7dfc1090e5dc07652b | |
parent | 9d6fdc1b0616715498bb9dfbdb65a984a9191f8e (diff) | |
download | mupdf-3909e66a925d8981cce45f4fb64dffb43eb97549.tar.xz |
Chain error messages in more files.
-rw-r--r-- | mupdf/pdf_annot.c | 25 | ||||
-rw-r--r-- | mupdf/pdf_build.c | 2 | ||||
-rw-r--r-- | mupdf/pdf_cmap.c | 42 | ||||
-rw-r--r-- | mupdf/pdf_colorspace1.c | 40 | ||||
-rw-r--r-- | mupdf/pdf_doctor.c | 6 | ||||
-rw-r--r-- | mupdf/pdf_font.c | 27 | ||||
-rw-r--r-- | mupdf/pdf_interpret.c | 4 | ||||
-rw-r--r-- | mupdf/pdf_nametree.c | 32 | ||||
-rw-r--r-- | mupdf/pdf_open.c | 51 | ||||
-rw-r--r-- | mupdf/pdf_outline.c | 18 | ||||
-rw-r--r-- | mupdf/pdf_page.c | 2 | ||||
-rw-r--r-- | mupdf/pdf_pagetree.c | 2 | ||||
-rw-r--r-- | mupdf/pdf_pattern.c | 2 | ||||
-rw-r--r-- | mupdf/pdf_repair.c | 2 | ||||
-rw-r--r-- | mupdf/pdf_save.c | 24 | ||||
-rw-r--r-- | mupdf/pdf_stream.c | 2 | ||||
-rw-r--r-- | mupdf/pdf_type3.c | 6 | ||||
-rw-r--r-- | mupdf/pdf_unicode.c | 51 | ||||
-rw-r--r-- | mupdf/pdf_xref.c | 2 | ||||
-rw-r--r-- | stream/obj_dict.c | 7 | ||||
-rw-r--r-- | stream/obj_parse.c | 10 | ||||
-rw-r--r-- | stream/stm_write.c | 12 | ||||
-rw-r--r-- | world/node_optimize.c | 10 |
23 files changed, 198 insertions, 181 deletions
diff --git a/mupdf/pdf_annot.c b/mupdf/pdf_annot.c index a2839f6e..df40091b 100644 --- a/mupdf/pdf_annot.c +++ b/mupdf/pdf_annot.c @@ -101,7 +101,7 @@ pdf_loadlink(pdf_link **linkp, pdf_xref *xref, fz_obj *dict) { error = pdf_resolve(&obj, xref); if (error) - return error; + return fz_rethrow(error, "cannot resolve /Dest"); dest = resolvedest(xref, obj); pdf_logpage("dest %d %d R\n", fz_tonum(dest), fz_togen(dest)); fz_dropobj(obj); @@ -112,7 +112,7 @@ pdf_loadlink(pdf_link **linkp, pdf_xref *xref, fz_obj *dict) { error = pdf_resolve(&action, xref); if (error) - return error; + return fz_rethrow(error, "cannot resolve /A"); obj = fz_dictgets(action, "S"); if (!strcmp(fz_toname(obj), "GoTo")) @@ -137,7 +137,7 @@ pdf_loadlink(pdf_link **linkp, pdf_xref *xref, fz_obj *dict) { error = pdf_newlink(&link, bbox, dest); if (error) - return error; + return fz_rethrow(error, "cannot create link"); *linkp = link; } @@ -164,7 +164,10 @@ pdf_loadannots(pdf_comment **cp, pdf_link **lp, pdf_xref *xref, fz_obj *annots) obj = fz_arrayget(annots, i); error = pdf_resolve(&obj, xref); if (error) - goto cleanup; + { + pdf_droplink(link); + return fz_rethrow(error, "cannot resolve annotation"); + } subtype = fz_dictgets(obj, "Subtype"); if (!strcmp(fz_toname(subtype), "Link")) @@ -174,7 +177,10 @@ pdf_loadannots(pdf_comment **cp, pdf_link **lp, pdf_xref *xref, fz_obj *annots) error = pdf_loadlink(&temp, xref, obj); fz_dropobj(obj); if (error) - goto cleanup; + { + pdf_droplink(link); + return fz_rethrow(error, "cannot load annotation link"); + } if (temp) { @@ -187,7 +193,10 @@ pdf_loadannots(pdf_comment **cp, pdf_link **lp, pdf_xref *xref, fz_obj *annots) error = loadcomment(&comment, xref, obj); fz_dropobj(obj); if (error) - goto cleanup; + { + pdf_droplink(link); + return fz_rethrow(error, "cannot load annotation comment"); + } } } @@ -196,9 +205,5 @@ pdf_loadannots(pdf_comment **cp, pdf_link **lp, pdf_xref *xref, fz_obj *annots) *cp = comment; *lp = link; return nil; - -cleanup: - pdf_droplink(link); - return error; } diff --git a/mupdf/pdf_build.c b/mupdf/pdf_build.c index 87748d95..e62ebd0d 100644 --- a/mupdf/pdf_build.c +++ b/mupdf/pdf_build.c @@ -673,7 +673,7 @@ pdf_showpath(pdf_csi *csi, { error = fz_clonepathnode(&clip, csi->path); if (error) - return error; + return fz_rethrow(error, "cannot copy path node for clip mask"); } if (dofill && dostroke) diff --git a/mupdf/pdf_cmap.c b/mupdf/pdf_cmap.c index 9031aeb6..20337eed 100644 --- a/mupdf/pdf_cmap.c +++ b/mupdf/pdf_cmap.c @@ -597,13 +597,13 @@ static int codefromstring(unsigned char *buf, int len) return a; } -static fz_error *mylex(int *token, fz_stream *file, char *buf, int n, int *sl) +static fz_error *lexcmap(int *token, fz_stream *file, char *buf, int n, int *sl) { fz_error *error; error = pdf_lex(token, file, buf, n, sl); if (!error && *token == PDF_TKEYWORD) *token = tokenfromkeyword(buf); - return error; + return fz_rethrow(error, "cannot parse cmap token"); } static fz_error *parsecmapname(pdf_cmap *cmap, fz_stream *file) @@ -613,7 +613,7 @@ static fz_error *parsecmapname(pdf_cmap *cmap, fz_stream *file) int token; int len; - error = mylex(&token, file, buf, sizeof buf, &len); + error = lexcmap(&token, file, buf, sizeof buf, &len); if (error) return fz_rethrow(error, "syntaxerror in cmap"); @@ -633,7 +633,7 @@ static fz_error *parsewmode(pdf_cmap *cmap, fz_stream *file) int token; int len; - error = mylex(&token, file, buf, sizeof buf, &len); + error = lexcmap(&token, file, buf, sizeof buf, &len); if (error) return fz_rethrow(error, "syntaxerror in cmap"); @@ -656,7 +656,7 @@ static fz_error *parsecodespacerange(pdf_cmap *cmap, fz_stream *file) while (1) { - error = mylex(&token, file, buf, sizeof buf, &len); + error = lexcmap(&token, file, buf, sizeof buf, &len); if (error) return fz_rethrow(error, "syntaxerror in cmap"); @@ -666,7 +666,7 @@ static fz_error *parsecodespacerange(pdf_cmap *cmap, fz_stream *file) else if (token == PDF_TSTRING) { lo = codefromstring(buf, len); - error = mylex(&token, file, buf, sizeof buf, &len); + error = lexcmap(&token, file, buf, sizeof buf, &len); if (error) return fz_rethrow(error, "syntaxerror in cmap"); if (token == PDF_TSTRING) @@ -695,7 +695,7 @@ static fz_error *parsecidrange(pdf_cmap *cmap, fz_stream *file) while (1) { - error = mylex(&token, file, buf, sizeof buf, &len); + error = lexcmap(&token, file, buf, sizeof buf, &len); if (error) return fz_rethrow(error, "syntaxerror in cmap"); @@ -707,7 +707,7 @@ static fz_error *parsecidrange(pdf_cmap *cmap, fz_stream *file) lo = codefromstring(buf, len); - error = mylex(&token, file, buf, sizeof buf, &len); + error = lexcmap(&token, file, buf, sizeof buf, &len); if (error) return fz_rethrow(error, "syntaxerror in cmap"); if (token != PDF_TSTRING) @@ -715,7 +715,7 @@ static fz_error *parsecidrange(pdf_cmap *cmap, fz_stream *file) hi = codefromstring(buf, len); - error = mylex(&token, file, buf, sizeof buf, &len); + error = lexcmap(&token, file, buf, sizeof buf, &len); if (error) return fz_rethrow(error, "syntaxerror in cmap"); if (token != PDF_TINT) @@ -739,7 +739,7 @@ static fz_error *parsecidchar(pdf_cmap *cmap, fz_stream *file) while (1) { - error = mylex(&token, file, buf, sizeof buf, &len); + error = lexcmap(&token, file, buf, sizeof buf, &len); if (error) return fz_rethrow(error, "syntaxerror in cmap"); @@ -751,7 +751,7 @@ static fz_error *parsecidchar(pdf_cmap *cmap, fz_stream *file) src = codefromstring(buf, len); - error = mylex(&token, file, buf, sizeof buf, &len); + error = lexcmap(&token, file, buf, sizeof buf, &len); if (error) return fz_rethrow(error, "syntaxerror in cmap"); if (token != PDF_TINT) @@ -776,7 +776,7 @@ static fz_error *parsebfrangearray(pdf_cmap *cmap, fz_stream *file, int lo, int while (1) { - error = mylex(&token, file, buf, sizeof buf, &len); + error = lexcmap(&token, file, buf, sizeof buf, &len); if (error) return fz_rethrow(error, "syntaxerror in cmap"); @@ -811,7 +811,7 @@ static fz_error *parsebfrange(pdf_cmap *cmap, fz_stream *file) while (1) { - error = mylex(&token, file, buf, sizeof buf, &len); + error = lexcmap(&token, file, buf, sizeof buf, &len); if (error) return fz_rethrow(error, "syntaxerror in cmap"); @@ -823,7 +823,7 @@ static fz_error *parsebfrange(pdf_cmap *cmap, fz_stream *file) lo = codefromstring(buf, len); - error = mylex(&token, file, buf, sizeof buf, &len); + error = lexcmap(&token, file, buf, sizeof buf, &len); if (error) return fz_rethrow(error, "syntaxerror in cmap"); if (token != PDF_TSTRING) @@ -831,7 +831,7 @@ static fz_error *parsebfrange(pdf_cmap *cmap, fz_stream *file) hi = codefromstring(buf, len); - error = mylex(&token, file, buf, sizeof buf, &len); + error = lexcmap(&token, file, buf, sizeof buf, &len); if (error) return fz_rethrow(error, "syntaxerror in cmap"); @@ -892,7 +892,7 @@ static fz_error *parsebfchar(pdf_cmap *cmap, fz_stream *file) while (1) { - error = mylex(&token, file, buf, sizeof buf, &len); + error = lexcmap(&token, file, buf, sizeof buf, &len); if (error) return fz_rethrow(error, "syntaxerror in cmap"); @@ -904,7 +904,7 @@ static fz_error *parsebfchar(pdf_cmap *cmap, fz_stream *file) src = codefromstring(buf, len); - error = mylex(&token, file, buf, sizeof buf, &len); + error = lexcmap(&token, file, buf, sizeof buf, &len); if (error) return fz_rethrow(error, "syntaxerror in cmap"); /* Note: does not handle /dstName */ @@ -941,7 +941,7 @@ pdf_parsecmap(pdf_cmap **cmapp, fz_stream *file) while (1) { - error = mylex(&token, file, buf, sizeof buf, &len); + error = lexcmap(&token, file, buf, sizeof buf, &len); if (error) { error = fz_rethrow(error, "syntaxerror in cmap"); @@ -1045,7 +1045,7 @@ pdf_parsecmap(pdf_cmap **cmapp, fz_stream *file) cleanup: pdf_dropcmap(cmap); - return error; + return error; /* already rethrown */ } /* @@ -1141,7 +1141,7 @@ cleanup: if (cmap) pdf_dropcmap(cmap); fz_dropobj(stmobj); - return error; + return error; /* already rethrown */ } /* @@ -1211,7 +1211,7 @@ cleanup: pdf_dropcmap(cmap); if (file) fz_dropstream(file); - return error; + return error; /* already rethrown */ } /* diff --git a/mupdf/pdf_colorspace1.c b/mupdf/pdf_colorspace1.c index 7c79f79a..9d7c740b 100644 --- a/mupdf/pdf_colorspace1.c +++ b/mupdf/pdf_colorspace1.c @@ -233,11 +233,11 @@ loadcalgray(fz_colorspace **csp, pdf_xref *xref, fz_obj *dict) error = pdf_resolve(&dict, xref); if (error) - return error; + return fz_rethrow(error, "cannot find colorspace"); cs = fz_malloc(sizeof(struct calgray)); if (!cs) - return fz_outofmem; + return fz_throw("outofmem: gray colorspace struct"); pdf_logrsrc("load CalGray\n"); @@ -289,11 +289,11 @@ loadcalrgb(fz_colorspace **csp, pdf_xref *xref, fz_obj *dict) error = pdf_resolve(&dict, xref); if (error) - return error; + return fz_rethrow(error, "cannot find colorspace"); cs = fz_malloc(sizeof(struct calrgb)); if (!cs) - return fz_outofmem; + return fz_throw("outofmem: RGB colorspace struct"); pdf_logrsrc("load CalRGB\n"); @@ -363,11 +363,11 @@ loadlab(fz_colorspace **csp, pdf_xref *xref, fz_obj *dict) error = pdf_resolve(&dict, xref); if (error) - return error; + return fz_rethrow(error, "cannot find colorspace"); cs = fz_malloc(sizeof(struct cielab)); if (!cs) - return fz_outofmem; + return fz_throw("outofmem: L*a*b colorspace struct"); pdf_logrsrc("load Lab\n"); @@ -434,7 +434,7 @@ loadiccbased(fz_colorspace **csp, pdf_xref *xref, fz_obj *ref) error = pdf_loadindirect(&dict, xref, ref); if (error) - return error; + return fz_rethrow(error, "cannot find colorspace"); n = fz_toint(fz_dictgets(dict, "N")); @@ -512,17 +512,18 @@ loadseparation(fz_colorspace **csp, pdf_xref *xref, fz_obj *array) error = pdf_resolve(&baseobj, xref); if (error) - return error; + return fz_rethrow(error, "cannot find colorspace"); + error = pdf_loadcolorspace(&base, xref, baseobj); fz_dropobj(baseobj); if (error) - return error; + return fz_rethrow(error, "cannot load base colorspace"); error = pdf_loadfunction(&tint, xref, tintobj); if (error) { fz_dropcolorspace(base); - return error; + return fz_rethrow(error, "cannot load tint function"); } cs = fz_malloc(sizeof(struct separation)); @@ -530,7 +531,7 @@ loadseparation(fz_colorspace **csp, pdf_xref *xref, fz_obj *array) { pdf_dropfunction(tint); fz_dropcolorspace(base); - return fz_outofmem; + return fz_throw("outofmem: separation colorspace struct"); } initcs((fz_colorspace*)cs, @@ -588,11 +589,12 @@ loadindexed(fz_colorspace **csp, pdf_xref *xref, fz_obj *array) error = pdf_resolve(&baseobj, xref); if (error) - return error; + return fz_rethrow(error, "cannot find colorspace"); + error = pdf_loadcolorspace(&base, xref, baseobj); fz_dropobj(baseobj); if (error) - return error; + return fz_rethrow(error, "cannot load base colorspace"); pdf_logrsrc("base %s\n", base->name); @@ -600,7 +602,7 @@ loadindexed(fz_colorspace **csp, pdf_xref *xref, fz_obj *array) if (!cs) { fz_dropcolorspace(base); - return fz_outofmem; + return fz_throw("outofmem: indexed colorspace struct"); } initcs((fz_colorspace*)cs, "Indexed", 1, nil, nil, dropindexed); @@ -614,7 +616,7 @@ loadindexed(fz_colorspace **csp, pdf_xref *xref, fz_obj *array) if (!cs->lookup) { fz_dropcolorspace((fz_colorspace*)cs); - return fz_outofmem; + return fz_throw("outofmem: indexed colorspace lookup table (%d entries)", n); } if (fz_isstring(lookup) && fz_tostrlen(lookup) == n) @@ -640,7 +642,7 @@ loadindexed(fz_colorspace **csp, pdf_xref *xref, fz_obj *array) if (error) { fz_dropcolorspace((fz_colorspace*)cs); - return error; + return fz_rethrow(error, "cannot load colorpsace lookup table"); } for (i = 0; i < n && i < (buf->wp - buf->rp); i++) @@ -737,10 +739,12 @@ pdf_loadcolorspace(fz_colorspace **csp, pdf_xref *xref, fz_obj *obj) error = pdf_resolve(&obj, xref); if (error) - return error; + return fz_rethrow(error, "cannot find pattern"); + error = pdf_loadcolorspace(csp, xref, obj); fz_dropobj(obj); - return error; + if (error) + return fz_rethrow(error, "cannot load pattern"); } else diff --git a/mupdf/pdf_doctor.c b/mupdf/pdf_doctor.c index deb33af3..f9e56957 100644 --- a/mupdf/pdf_doctor.c +++ b/mupdf/pdf_doctor.c @@ -21,7 +21,7 @@ sweepobj(pdf_xref *xref, fz_obj *obj) { error = sweepobj(xref, fz_dictgetval(obj, i)); if (error) - return error; + return error; /* too deeply nested for rethrow */ } } @@ -31,7 +31,7 @@ sweepobj(pdf_xref *xref, fz_obj *obj) { error = sweepobj(xref, fz_arrayget(obj, i)); if (error) - return error; + return error; /* too deeply nested for rethrow */ } } @@ -66,7 +66,7 @@ sweepref(pdf_xref *xref, fz_obj *ref) if (error) { fz_dropobj(obj); - return error; + return error; /* too deeply nested for rethrow */ } fz_dropobj(obj); diff --git a/mupdf/pdf_font.c b/mupdf/pdf_font.c index a2386fed..6e5fd083 100644 --- a/mupdf/pdf_font.c +++ b/mupdf/pdf_font.c @@ -577,7 +577,7 @@ cleanup: if (widths) fz_dropobj(widths); fz_dropfont((fz_font*)font); - return error; + return fz_rethrow(error, "cannot load simple font"); } /* @@ -614,7 +614,7 @@ loadcidfont(pdf_font **fontp, pdf_xref *xref, fz_obj *dict, fz_obj *ref, fz_obj error = pdf_resolve(&cidinfo, xref); if (error) - return error; + return fz_rethrow(error, "cannot find CIDSystemInfo"); obj = fz_dictgets(cidinfo, "Registry"); tmplen = MIN(sizeof tmpstr - 1, fz_tostrlen(obj)); @@ -759,7 +759,7 @@ loadcidfont(pdf_font **fontp, pdf_xref *xref, fz_obj *dict, fz_obj *ref, fz_obj error = nil; if (error) - return error; + return fz_rethrow(error, "cannot load system cmap %s", collection); } } @@ -891,7 +891,7 @@ cleanup: if (widths) fz_dropobj(widths); fz_dropfont((fz_font*)font); - return error; + return fz_rethrow(error, "cannot load cid font"); } static fz_error * @@ -907,12 +907,15 @@ loadtype0(pdf_font **fontp, pdf_xref *xref, fz_obj *dict, fz_obj *ref) dfonts = fz_dictgets(dict, "DescendantFonts"); error = pdf_resolve(&dfonts, xref); if (error) - return error; + return fz_rethrow(error, "cannot find DescendantFonts"); dfont = fz_arrayget(dfonts, 0); error = pdf_resolve(&dfont, xref); if (error) - return fz_dropobj(dfonts), error; + { + fz_dropobj(dfonts); + return fz_rethrow(error, "cannot find descendant font"); + } subtype = fz_dictgets(dfont, "Subtype"); encoding = fz_dictgets(dict, "Encoding"); @@ -929,7 +932,7 @@ loadtype0(pdf_font **fontp, pdf_xref *xref, fz_obj *dict, fz_obj *ref) fz_dropobj(dfonts); if (error) - return error; + return fz_rethrow(error, "cannot load descendant font"); return nil; } @@ -948,7 +951,7 @@ pdf_loadfontdescriptor(pdf_font *font, pdf_xref *xref, fz_obj *desc, char *colle error = pdf_resolve(&desc, xref); if (error) - return error; + return fz_rethrow(error, "cannot find font descriptor"); pdf_logfont("load fontdescriptor {\n"); @@ -1000,7 +1003,7 @@ pdf_loadfontdescriptor(pdf_font *font, pdf_xref *xref, fz_obj *desc, char *colle cleanup: fz_dropobj(desc); - return error; + return fz_rethrow(error, "cannot load font descriptor"); } fz_error * @@ -1025,14 +1028,14 @@ pdf_loadfont(pdf_font **fontp, pdf_xref *xref, fz_obj *dict, fz_obj *ref) else if (!strcmp(subtype, "Type3")) error = pdf_loadtype3font(fontp, xref, dict, ref); else - error = fz_throw("unimplemented: %s fonts", subtype); + return fz_throw("cannot recognize font format %s", subtype); if (error) - return error; + return fz_rethrow(error, "cannot load font"); error = pdf_storeitem(xref->store, PDF_KFONT, ref, *fontp); if (error) - return error; + return fz_rethrow(error, "cannot store font resource"); return nil; } diff --git a/mupdf/pdf_interpret.c b/mupdf/pdf_interpret.c index 52619720..700b5c8f 100644 --- a/mupdf/pdf_interpret.c +++ b/mupdf/pdf_interpret.c @@ -165,7 +165,7 @@ runxobject(pdf_csi *csi, pdf_xref *xref, pdf_xobject *xobj, int istransparency) /* gsave */ error = gsave(csi); if (error) - return error; + return fz_rethrow(error, "cannot push graphics state"); /* reset alpha to 1.0 when starting a new Transparency group */ if (istransparency) { @@ -205,7 +205,7 @@ runxobject(pdf_csi *csi, pdf_xref *xref, pdf_xobject *xobj, int istransparency) /* grestore */ error = grestore(csi); if (error) - return fz_rethrow(error, "cannot grestore"); + return fz_rethrow(error, "cannot pop graphics state"); return fz_okay; } diff --git a/mupdf/pdf_nametree.c b/mupdf/pdf_nametree.c index 706c0e50..49396c50 100644 --- a/mupdf/pdf_nametree.c +++ b/mupdf/pdf_nametree.c @@ -13,14 +13,17 @@ loadnametreenode(fz_obj *tree, pdf_xref *xref, fz_obj *node) error = pdf_resolve(&node, xref); if (error) - return error; + return fz_rethrow(error, "cannot resolve name tree"); names = fz_dictgets(node, "Names"); if (names) { error = pdf_resolve(&names, xref); if (error) - goto cleanup; + { + fz_dropobj(node); + return fz_rethrow(error, "cannot resolve /Names"); + } len = fz_arraylen(names) / 2; @@ -32,7 +35,8 @@ loadnametreenode(fz_obj *tree, pdf_xref *xref, fz_obj *node) if (error) { fz_dropobj(names); - goto cleanup; + fz_dropobj(node); + return fz_rethrow(error, "cannot insert name tree entry"); } } @@ -44,7 +48,10 @@ loadnametreenode(fz_obj *tree, pdf_xref *xref, fz_obj *node) { error = pdf_resolve(&kids, xref); if (error) - goto cleanup; + { + fz_dropobj(node); + return fz_rethrow(error, "cannot resolve /Kids"); + } len = fz_arraylen(kids); for (i = 0; i < len; ++i) @@ -53,7 +60,8 @@ loadnametreenode(fz_obj *tree, pdf_xref *xref, fz_obj *node) if (error) { fz_dropobj(kids); - goto cleanup; + fz_dropobj(node); + return fz_rethrow(error, "cannot load name tree node"); } } @@ -62,10 +70,6 @@ loadnametreenode(fz_obj *tree, pdf_xref *xref, fz_obj *node) fz_dropobj(node); return nil; - -cleanup: - fz_dropobj(node); - return error; } fz_error * @@ -76,13 +80,13 @@ pdf_loadnametree(fz_obj **dictp, pdf_xref *xref, fz_obj *root) error = fz_newdict(&tree, 128); if (error) - return error; + return fz_rethrow(error, "cannot create name tree dictionary"); error = loadnametreenode(tree, xref, root); if (error) { fz_dropobj(tree); - return error; + return fz_rethrow(error, "cannot load name tree"); } fz_sortdict(tree); @@ -104,7 +108,7 @@ pdf_loadnametrees(pdf_xref *xref) { error = pdf_resolve(&dests, xref); if (error) - return error; + return fz_rethrow(error, "cannot resolve /Dests"); xref->dests = dests; return nil; } @@ -115,7 +119,7 @@ pdf_loadnametrees(pdf_xref *xref) { error = pdf_resolve(&names, xref); if (error) - return error; + return fz_rethrow(error, "cannot resolve /Names"); dests = fz_dictgets(names, "Dests"); if (dests) { @@ -123,7 +127,7 @@ pdf_loadnametrees(pdf_xref *xref) if (error) { fz_dropobj(names); - return error; + return fz_rethrow(error, "cannot load name tree"); } } fz_dropobj(names); diff --git a/mupdf/pdf_open.c b/mupdf/pdf_open.c index e9facef4..9b7dfeb5 100644 --- a/mupdf/pdf_open.c +++ b/mupdf/pdf_open.c @@ -292,8 +292,8 @@ readnewxref(fz_obj **trailerp, pdf_xref *xref, char *buf, int cap) if (oid < 0 || oid >= xref->len) { - error = fz_throw("object id out of range"); - goto cleanup; + fz_dropobj(trailer); + return fz_throw("object id out of range"); } xref->table[oid].type = 'n'; @@ -304,15 +304,15 @@ readnewxref(fz_obj **trailerp, pdf_xref *xref, char *buf, int cap) obj = fz_dictgets(trailer, "Size"); if (!obj) { - error = fz_throw("xref stream missing Size entry"); - goto cleanup; + fz_dropobj(trailer); + return fz_throw("xref stream missing Size entry"); } size = fz_toint(obj); obj = fz_dictgets(trailer, "W"); if (!obj) { - error = fz_throw("xref stream missing W entry"); - goto cleanup; + fz_dropobj(trailer); + return fz_throw("xref stream missing W entry"); } w0 = fz_toint(fz_arrayget(obj, 0)); w1 = fz_toint(fz_arrayget(obj, 1)); @@ -329,15 +329,15 @@ readnewxref(fz_obj **trailerp, pdf_xref *xref, char *buf, int cap) } if (i0 < 0 || i1 > xref->len) { - error = fz_throw("xref stream has too many entries"); - goto cleanup; + fz_dropobj(trailer); + return fz_throw("xref stream has too many entries"); } error = pdf_openstream(&stm, xref, oid, gen); if (error) { - error = fz_rethrow(error, "cannot open compressed xref stream"); - goto cleanup; + fz_dropobj(trailer); + return fz_rethrow(error, "cannot open compressed xref stream"); } for (i = i0; i < i0 + i1; i++) @@ -348,13 +348,12 @@ readnewxref(fz_obj **trailerp, pdf_xref *xref, char *buf, int cap) if (fz_peekbyte(stm) == EOF) { + fz_dropstream(stm); + fz_dropobj(trailer); error = fz_readerror(stm); if (error) - error = fz_rethrow(error, "truncated xref stream"); - else - error = fz_throw("truncated xref stream"); - fz_dropstream(stm); - goto cleanup; + return fz_rethrow(error, "truncated xref stream"); + return fz_throw("truncated xref stream"); } for (n = 0; n < w0; n++) @@ -367,9 +366,9 @@ readnewxref(fz_obj **trailerp, pdf_xref *xref, char *buf, int cap) error = fz_readerror(stm); if (error) { - error = fz_rethrow(error, "truncated xref stream"); fz_dropstream(stm); - goto cleanup; + fz_dropobj(trailer); + return fz_rethrow(error, "truncated xref stream"); } if (!xref->table[i].type) @@ -386,10 +385,6 @@ readnewxref(fz_obj **trailerp, pdf_xref *xref, char *buf, int cap) *trailerp = trailer; return nil; - -cleanup: - fz_dropobj(trailer); - return error; } static fz_error * @@ -447,8 +442,8 @@ readxrefsections(pdf_xref *xref, int ofs, char *buf, int cap) error = readxrefsections(xref, fz_toint(xrefstm), buf, cap); if (error) { - error = fz_rethrow(error, "cannot read /XrefStm xref section"); - goto cleanup; + fz_dropobj(trailer); + return fz_rethrow(error, "cannot read /XrefStm xref section"); } } @@ -459,17 +454,13 @@ readxrefsections(pdf_xref *xref, int ofs, char *buf, int cap) error = readxrefsections(xref, fz_toint(prev), buf, cap); if (error) { - error = fz_rethrow(error, "cannot read /Prev xref section"); - goto cleanup; + fz_dropobj(trailer); + return fz_rethrow(error, "cannot read /Prev xref section"); } } fz_dropobj(trailer); return nil; - -cleanup: - fz_dropobj(trailer); - return error; } /* @@ -584,7 +575,7 @@ cleanupoid: fz_free(oidbuf); cleanupobj: fz_dropobj(objstm); - return error; + return error; /* already rethrown */ } /* diff --git a/mupdf/pdf_outline.c b/mupdf/pdf_outline.c index c41d96f5..7bd47e51 100644 --- a/mupdf/pdf_outline.c +++ b/mupdf/pdf_outline.c @@ -21,7 +21,7 @@ loadoutline(pdf_outline **nodep, pdf_xref *xref, fz_obj *dict) { error = pdf_toutf8(&node->title, obj); if (error) - return error; + return fz_rethrow(error, "cannot convert Title to UTF-8"); pdf_logpage("title %s\n", node->title); } @@ -29,7 +29,7 @@ loadoutline(pdf_outline **nodep, pdf_xref *xref, fz_obj *dict) { error = pdf_loadlink(&node->link, xref, dict); if (error) - return error; + return fz_rethrow(error, "cannot load link"); } obj = fz_dictgets(dict, "First"); @@ -37,11 +37,11 @@ loadoutline(pdf_outline **nodep, pdf_xref *xref, fz_obj *dict) { error = pdf_resolve(&obj, xref); if (error) - return error; + return fz_rethrow(error, "cannot resolve /First"); error = loadoutline(&node->child, xref, obj); fz_dropobj(obj); if (error) - return error; + return fz_rethrow(error, "cannot load outline"); } pdf_logpage("}\n"); @@ -51,11 +51,11 @@ loadoutline(pdf_outline **nodep, pdf_xref *xref, fz_obj *dict) { error = pdf_resolve(&obj, xref); if (error) - return error; + return fz_rethrow(error, "cannot resolve /Next"); error = loadoutline(&node->next, xref, obj); fz_dropobj(obj); if (error) - return error; + return fz_rethrow(error, "cannot load outline"); } *nodep = node; @@ -79,7 +79,7 @@ pdf_loadoutline(pdf_outline **nodep, pdf_xref *xref) { error = pdf_resolve(&obj, xref); if (error) - return error; + return fz_rethrow(error, "cannot resolve /Outlines"); first = fz_dictgets(obj, "First"); if (first) @@ -87,11 +87,11 @@ pdf_loadoutline(pdf_outline **nodep, pdf_xref *xref) error = pdf_resolve(&first, xref); fz_dropobj(obj); if (error) - return error; + return fz_rethrow(error, "cannot resolve /First"); error = loadoutline(&node, xref, first); fz_dropobj(first); if (error) - return error; + return fz_rethrow(error, "cannot load outline"); } else fz_dropobj(obj); diff --git a/mupdf/pdf_page.c b/mupdf/pdf_page.c index f509737b..1d9f9879 100644 --- a/mupdf/pdf_page.c +++ b/mupdf/pdf_page.c @@ -103,7 +103,7 @@ cleanupstm: fz_dropstream(file); cleanupbuf: fz_dropbuffer(big); - return error; + return error; /* already rethrown */ } static fz_error * diff --git a/mupdf/pdf_pagetree.c b/mupdf/pdf_pagetree.c index 47c0362b..eb02c1ed 100644 --- a/mupdf/pdf_pagetree.c +++ b/mupdf/pdf_pagetree.c @@ -177,7 +177,7 @@ cleanup: fz_free(p->pobj); fz_free(p); } - return error; + return error; /* already rethrown */ } int diff --git a/mupdf/pdf_pattern.c b/mupdf/pdf_pattern.c index c5668884..854bcf22 100644 --- a/mupdf/pdf_pattern.c +++ b/mupdf/pdf_pattern.c @@ -156,6 +156,6 @@ cleanupcsi: pdf_dropcsi(csi); cleanup: pdf_droppattern(pat); - return error; + return error; /* already rethrown */ } diff --git a/mupdf/pdf_repair.c b/mupdf/pdf_repair.c index ffced0e0..ecdbf530 100644 --- a/mupdf/pdf_repair.c +++ b/mupdf/pdf_repair.c @@ -366,6 +366,6 @@ pdf_repairxref(pdf_xref *xref, char *filename) cleanup: fz_dropstream(file); fz_free(list); - return error; + return error; /* already rethrown */ } diff --git a/mupdf/pdf_save.c b/mupdf/pdf_save.c index 1338493d..75c02e11 100644 --- a/mupdf/pdf_save.c +++ b/mupdf/pdf_save.c @@ -70,7 +70,7 @@ cleanupsrc: fz_dropstream(srcstm); cleanupdst: fz_dropstream(dststm); - return error; + return error; /* already rethrown */ } static fz_error * @@ -140,8 +140,8 @@ pdf_updatexref(pdf_xref *xref, char *path) error = writeobject(out, xref, xref->crypt, oid, xref->table[oid].gen); if (error) { - error = fz_rethrow(error, "cannot write object (oid=%d)", oid); - goto cleanup; + fz_dropstream(out); + return fz_rethrow(error, "cannot write object (oid=%d)", oid); } } } @@ -212,12 +212,10 @@ pdf_updatexref(pdf_xref *xref, char *path) xref->startxref = startxref; - fz_dropstream(out); - return fz_okay; + /* TODO: check for write errors */ -cleanup: fz_dropstream(out); - return error; + return fz_okay; } fz_error * @@ -272,8 +270,9 @@ pdf_savexref(pdf_xref *xref, char *path, pdf_crypt *encrypt) error = writeobject(out, xref, encrypt, oid, x->type == 'o' ? 0 : x->gen); if (error) { - error = fz_rethrow(error, "cannot write object (oid=%d)", oid); - goto cleanup; + if (ofsbuf) fz_free(ofsbuf); + fz_dropstream(out); + return fz_rethrow(error, "cannot write object (oid=%d)", oid); } } else @@ -325,13 +324,10 @@ pdf_savexref(pdf_xref *xref, char *path, pdf_crypt *encrypt) xref->startxref = startxref; + /* TODO: check for write errors */ + if(ofsbuf) fz_free(ofsbuf); fz_dropstream(out); return fz_okay; - -cleanup: - if (ofsbuf) fz_free(ofsbuf); - fz_dropstream(out); - return error; } diff --git a/mupdf/pdf_stream.c b/mupdf/pdf_stream.c index a6cf696c..24d3d11b 100644 --- a/mupdf/pdf_stream.c +++ b/mupdf/pdf_stream.c @@ -346,7 +346,7 @@ cleanup1: fz_dropobj(filters); cleanup0: fz_dropfilter(base); - return error; + return error; /* already rethrown */ } /* diff --git a/mupdf/pdf_type3.c b/mupdf/pdf_type3.c index 27ecfa3a..66537d2d 100644 --- a/mupdf/pdf_type3.c +++ b/mupdf/pdf_type3.c @@ -46,11 +46,11 @@ t3render(fz_glyph *glyph, fz_font *fzfont, int cid, fz_matrix trm) error = fz_newrenderer(&gc, pdf_devicegray, 1, GCMEM); if (error) - return error; + return fz_rethrow(error, "cannot create renderer"); error = fz_rendertree(&pixmap, gc, tree, ctm, bbox, 0); fz_droprenderer(gc); if (error) - return error; + return fz_rethrow(error, "cannot render glyph"); assert(pixmap->n == 1); @@ -316,6 +316,6 @@ cleanup2: fz_dropobj(resources); cleanup: fz_dropfont((fz_font*)font); - return error; + return fz_rethrow(error, "cannot load type3 font"); } diff --git a/mupdf/pdf_unicode.c b/mupdf/pdf_unicode.c index 2fb82233..dcb4e573 100644 --- a/mupdf/pdf_unicode.c +++ b/mupdf/pdf_unicode.c @@ -21,11 +21,14 @@ pdf_loadtounicode(pdf_font *font, pdf_xref *xref, error = pdf_loadembeddedcmap(&cmap, xref, cmapstm); if (error) - return error; + return fz_rethrow(error, "cannot load embedded cmap"); error = pdf_newcmap(&font->tounicode); if (error) - goto cleanup; + { + pdf_dropcmap(cmap); + return fz_rethrow(error, "cannot create tounicode cmap"); + } for (i = 0; i < (strings ? 256 : 65536); i++) { @@ -37,18 +40,23 @@ pdf_loadtounicode(pdf_font *font, pdf_xref *xref, { error = pdf_maprangetorange(font->tounicode, cid, cid, ucs); if (error) - goto cleanup; + { + pdf_dropcmap(cmap); + return fz_rethrow(error, "cannot create tounicode mapping"); + } } } } error = pdf_sortcmap(font->tounicode); if (error) - goto cleanup; + { + pdf_dropcmap(cmap); + return fz_rethrow(error, "cannot sort tounicode mappings"); + } - cleanup: pdf_dropcmap(cmap); - return error; + return nil; } else if (collection) @@ -56,15 +64,18 @@ pdf_loadtounicode(pdf_font *font, pdf_xref *xref, pdf_logfont("tounicode cid collection\n"); if (!strcmp(collection, "Adobe-CNS1")) - return pdf_loadsystemcmap(&font->tounicode, "Adobe-CNS1-UCS2"); + error = pdf_loadsystemcmap(&font->tounicode, "Adobe-CNS1-UCS2"); else if (!strcmp(collection, "Adobe-GB1")) - return pdf_loadsystemcmap(&font->tounicode, "Adobe-GB1-UCS2"); + error = pdf_loadsystemcmap(&font->tounicode, "Adobe-GB1-UCS2"); else if (!strcmp(collection, "Adobe-Japan1")) - return pdf_loadsystemcmap(&font->tounicode, "Adobe-Japan1-UCS2"); + error = pdf_loadsystemcmap(&font->tounicode, "Adobe-Japan1-UCS2"); else if (!strcmp(collection, "Adobe-Japan2")) - return pdf_loadsystemcmap(&font->tounicode, "Adobe-Japan2-UCS2"); + error = pdf_loadsystemcmap(&font->tounicode, "Adobe-Japan2-UCS2"); else if (!strcmp(collection, "Adobe-Korea1")) - return pdf_loadsystemcmap(&font->tounicode, "Adobe-Korea1-UCS2"); + error = pdf_loadsystemcmap(&font->tounicode, "Adobe-Korea1-UCS2"); + + if (error) + return fz_rethrow(error, "cannot load tounicode system cmap %s-UCS2", collection); } if (strings) @@ -76,7 +87,7 @@ pdf_loadtounicode(pdf_font *font, pdf_xref *xref, font->ncidtoucs = 256; font->cidtoucs = fz_malloc(256 * sizeof(unsigned short)); if (!font->cidtoucs) - return fz_outofmem; + return fz_throw("outofmem: tounicode cidtoucs table"); for (i = 0; i < 256; i++) { @@ -111,7 +122,7 @@ pdf_newtextline(pdf_textline **linep) pdf_textline *line; line = *linep = fz_malloc(sizeof(pdf_textline)); if (!line) - return fz_outofmem; + return fz_throw("outofmem: textline struct"); line->len = 0; line->cap = 0; line->text = nil; @@ -139,7 +150,7 @@ addtextchar(pdf_textline *line, fz_irect bbox, int c) newcap = line->cap ? line->cap * 2 : 80; newtext = fz_realloc(line->text, sizeof(pdf_textchar) * newcap); if (!newtext) - return fz_outofmem; + return fz_throw("outofmem: textline buffer resize"); line->cap = newcap; line->text = newtext; } @@ -219,7 +230,7 @@ extracttext(pdf_textline **line, fz_node *node, fz_matrix ctm) pdf_textline *newline; error = pdf_newtextline(&newline); if (error) - return error; + return fz_rethrow(error, "cannot create new text line"); (*line)->next = newline; *line = newline; } @@ -229,7 +240,7 @@ extracttext(pdf_textline **line, fz_node *node, fz_matrix ctm) box.y0 = y; box.y1 = y; error = addtextchar(*line, box, ' '); if (error) - return error; + return fz_rethrow(error, "cannot add character to text line"); } vx = fz_transformpoint(trm, vx); @@ -248,7 +259,7 @@ extracttext(pdf_textline **line, fz_node *node, fz_matrix ctm) error = addtextchar(*line, box, c); if (error) - return error; + return fz_rethrow(error, "cannot add character to text line"); } } @@ -259,7 +270,7 @@ extracttext(pdf_textline **line, fz_node *node, fz_matrix ctm) { error = extracttext(line, node, ctm); if (error) - return error; + return fz_rethrow(error, "cannot extract text from display node"); } return nil; @@ -277,7 +288,7 @@ pdf_loadtextfromtree(pdf_textline **outp, fz_tree *tree, fz_matrix ctm) error = pdf_newtextline(&root); if (error) - return error; + return fz_rethrow(error, "cannot create new text line"); line = root; @@ -285,7 +296,7 @@ pdf_loadtextfromtree(pdf_textline **outp, fz_tree *tree, fz_matrix ctm) if (error) { pdf_droptextline(root); - return error; + return fz_rethrow(error, "cannot extract text from display tree"); } *outp = root; diff --git a/mupdf/pdf_xref.c b/mupdf/pdf_xref.c index c9245bf0..7564855e 100644 --- a/mupdf/pdf_xref.c +++ b/mupdf/pdf_xref.c @@ -161,7 +161,7 @@ pdf_decryptxref(pdf_xref *xref) { error = pdf_resolve(&encrypt, xref); if (error) - return error; + return fz_rethrow(error, "cannot resolve /Encrypt object"); if (fz_isnull(encrypt)) { diff --git a/stream/obj_dict.c b/stream/obj_dict.c index a93ae1bd..a3366170 100644 --- a/stream/obj_dict.c +++ b/stream/obj_dict.c @@ -325,10 +325,13 @@ fz_dictputs(fz_obj *obj, char *key, fz_obj *val) fz_error *error; fz_obj *keyobj; error = fz_newname(&keyobj, key); - if (error) return error; + if (error) + return fz_rethrow(error, "cannot create dict key"); error = fz_dictput(obj, keyobj, val); fz_dropobj(keyobj); - return error; + if (error) + return fz_rethrow(error, "cannot insert dict entry"); + return nil; } fz_error * diff --git a/stream/obj_parse.c b/stream/obj_parse.c index 316e8ad4..8f43a064 100644 --- a/stream/obj_parse.c +++ b/stream/obj_parse.c @@ -181,7 +181,7 @@ cleanup: if (dict) fz_dropobj(dict); *obj = nil; *sp = s; - return error; + return error; /* already rethrown */ } static fz_error *parsearray(fz_obj **obj, char **sp, struct vap *v) @@ -462,7 +462,7 @@ static fz_error *parseobj(fz_obj **obj, char **sp, struct vap *v) error = fz_throw("syntax error: unknown byte 0x%d", *s); *sp = s; - return error; + return error; /* already rethrown */ } fz_error * @@ -476,12 +476,12 @@ fz_packobj(fz_obj **op, char *fmt, ...) va_copy(v.ap, ap); error = parseobj(op, &fmt, &v); - if (error) - error = fz_rethrow(error, "cannot parse object"); va_end(ap); - return error; + if (error) + return fz_rethrow(error, "cannot parse object"); + return nil; } fz_error * diff --git a/stream/stm_write.c b/stream/stm_write.c index 23b268d9..9f136292 100644 --- a/stream/stm_write.c +++ b/stream/stm_write.c @@ -266,10 +266,10 @@ fz_printobj(fz_stream *file, fz_obj *obj, int tight) return fz_throw("outofmem: scratch buffer"); fz_sprintobj(ptr, n, obj, tight); error = fz_write(file, ptr, n); - if (error) - error = fz_rethrow(error, "cannot write buffer"); fz_free(ptr); - return error; + if (error) + return fz_rethrow(error, "cannot write buffer"); + return fz_okay; } } @@ -303,11 +303,11 @@ fz_print(fz_stream *stm, char *fmt, ...) va_end(ap); error = fz_write(stm, p, n); - if (error) - error = fz_rethrow(error, "cannot write buffer"); fz_free(p); - return error; + if (error) + return fz_rethrow(error, "cannot write buffer"); + return fz_okay; } diff --git a/world/node_optimize.c b/world/node_optimize.c index 69ca59cc..d284ce08 100644 --- a/world/node_optimize.c +++ b/world/node_optimize.c @@ -253,11 +253,11 @@ static fz_error *clean1x1(fz_node *node) { error = fz_newpixmap(&pix, 0, 0, 1, 1, image->n + 1); if (error) - return error; + return fz_rethrow(error, "cannot create 1x1 pixmap"); error = image->loadtile(image, pix); if (error) - return error; + return fz_rethrow(error, "cannot load pixmap tile"); for (i = 0; i < image->n; i++) v[i] = pix->samples[i + 1] / 255.0; @@ -266,10 +266,10 @@ static fz_error *clean1x1(fz_node *node) error = fz_newsolidnode(&color, 1.0, image->cs, image->n, v); if (error) - return error; + return fz_rethrow(error, "cannot create color node"); error = fz_newmasknode(&mask); if (error) - return error; + return fz_rethrow(error, "cannot create mask node"); fz_insertnodeafter(current, mask); fz_insertnodelast(mask, (fz_node*)rect); @@ -290,7 +290,7 @@ static fz_error *clean1x1(fz_node *node) error = clean1x1(current); if (error) - return error; + return fz_rethrow(error, "cannot perform clean1x1 optimization"); } return nil; |