summaryrefslogtreecommitdiff
path: root/pdf/pdf_parse.c
diff options
context:
space:
mode:
authorRobin Watts <Robin.Watts@artifex.com>2011-05-31 15:49:39 +0100
committerTor Andersson <tor.andersson@artifex.com>2011-05-31 17:28:21 +0200
commit97b83d84e3d10ccd298f9c54713323a3e41ce7f3 (patch)
tree4877fbe7f4d2afff109b3bafa11bed6c013afd5b /pdf/pdf_parse.c
parent89bf9896bd9d05500ac6494452a1b9d9cf8a67cb (diff)
downloadmupdf-97b83d84e3d10ccd298f9c54713323a3e41ce7f3.tar.xz
Fix assert in scale: see Bug 692245.
Bug 692245 gives a file that produces a runtime assert in mupdf due to an extremely large ctm offset (unrepresentable in a float). We fix our code here so that such floats are always read as 1.0. In this particular case, the exact value read doesn't seem to matter. We match acrobat. We pick 1.0 rather than 0.0 as this is less likely to provoke division by 0 errors later on.
Diffstat (limited to 'pdf/pdf_parse.c')
-rw-r--r--pdf/pdf_parse.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/pdf/pdf_parse.c b/pdf/pdf_parse.c
index 31a2bd0c..d6497bc4 100644
--- a/pdf/pdf_parse.c
+++ b/pdf/pdf_parse.c
@@ -251,7 +251,7 @@ pdf_parse_array(fz_obj **op, pdf_xref *xref, fz_stream *file, char *buf, int cap
fz_drop_obj(obj);
break;
case PDF_TOK_REAL:
- obj = fz_new_real(atof(buf));
+ obj = fz_new_real(fz_atof(buf));
fz_array_push(ary, obj);
fz_drop_obj(obj);
break;
@@ -358,7 +358,7 @@ skip:
break;
case PDF_TOK_NAME: val = fz_new_name(buf); break;
- case PDF_TOK_REAL: val = fz_new_real(atof(buf)); break;
+ case PDF_TOK_REAL: val = fz_new_real(fz_atof(buf)); break;
case PDF_TOK_STRING: val = fz_new_string(buf, len); break;
case PDF_TOK_TRUE: val = fz_new_bool(1); break;
case PDF_TOK_FALSE: val = fz_new_bool(0); break;
@@ -439,7 +439,7 @@ pdf_parse_stm_obj(fz_obj **op, pdf_xref *xref, fz_stream *file, char *buf, int c
return fz_rethrow(error, "cannot parse object stream");
break;
case PDF_TOK_NAME: *op = fz_new_name(buf); break;
- case PDF_TOK_REAL: *op = fz_new_real(atof(buf)); break;
+ case PDF_TOK_REAL: *op = fz_new_real(fz_atof(buf)); break;
case PDF_TOK_STRING: *op = fz_new_string(buf, len); break;
case PDF_TOK_TRUE: *op = fz_new_bool(1); break;
case PDF_TOK_FALSE: *op = fz_new_bool(0); break;
@@ -502,7 +502,7 @@ pdf_parse_ind_obj(fz_obj **op, pdf_xref *xref,
break;
case PDF_TOK_NAME: obj = fz_new_name(buf); break;
- case PDF_TOK_REAL: obj = fz_new_real(atof(buf)); break;
+ case PDF_TOK_REAL: obj = fz_new_real(fz_atof(buf)); break;
case PDF_TOK_STRING: obj = fz_new_string(buf, len); break;
case PDF_TOK_TRUE: obj = fz_new_bool(1); break;
case PDF_TOK_FALSE: obj = fz_new_bool(0); break;