summaryrefslogtreecommitdiff
path: root/mupdf/pdf_function.c
diff options
context:
space:
mode:
Diffstat (limited to 'mupdf/pdf_function.c')
-rw-r--r--mupdf/pdf_function.c58
1 files changed, 9 insertions, 49 deletions
diff --git a/mupdf/pdf_function.c b/mupdf/pdf_function.c
index 82baf1b6..ec9a0b4c 100644
--- a/mupdf/pdf_function.c
+++ b/mupdf/pdf_function.c
@@ -306,20 +306,14 @@ pspop(psstack *st)
return fz_okay;
}
-static fz_error
+static void
resizecode(pdf_function *func, int newsize)
{
if (newsize >= func->u.p.cap)
{
- int newcodecap = func->u.p.cap + 64;
- psobj *newcode;
- newcode = fz_realloc(func->u.p.code, newcodecap * sizeof(psobj));
- if (!newcode)
- return fz_rethrow(-1, "out of memory: calculator function code");
- func->u.p.cap = newcodecap;
- func->u.p.code = newcode;
+ func->u.p.cap = func->u.p.cap + 64;
+ func->u.p.code = fz_realloc(func->u.p.code, func->u.p.cap * sizeof(psobj));
}
- return fz_okay;
}
static fz_error
@@ -346,18 +340,14 @@ parsecode(pdf_function *func, fz_stream *stream, int *codeptr)
return fz_throw("truncated calculator function");
case PDF_TINT:
- error = resizecode(func, *codeptr);
- if (error)
- return fz_rethrow(error, "resize calculator function code");
+ resizecode(func, *codeptr);
func->u.p.code[*codeptr].type = PSINT;
func->u.p.code[*codeptr].u.i = atoi(buf);
++*codeptr;
break;
case PDF_TREAL:
- error = resizecode(func, *codeptr);
- if (error)
- return fz_rethrow(error, "resize calculator function code");
+ resizecode(func, *codeptr);
func->u.p.code[*codeptr].type = PSREAL;
func->u.p.code[*codeptr].u.f = atof(buf);
++*codeptr;
@@ -367,9 +357,7 @@ parsecode(pdf_function *func, fz_stream *stream, int *codeptr)
opptr = *codeptr;
*codeptr += 3;
- error = resizecode(func, opptr + 2);
- if (error)
- return fz_rethrow(error, "resize calculator function code");
+ resizecode(func, opptr + 2);
error = parsecode(func, stream, codeptr);
if (error)
@@ -429,9 +417,7 @@ parsecode(pdf_function *func, fz_stream *stream, int *codeptr)
break;
case PDF_TCBRACE:
- error = resizecode(func, *codeptr);
- if (error)
- return fz_rethrow(error, "resize calculator function code");
+ resizecode(func, *codeptr);
func->u.p.code[*codeptr].type = PSOPERATOR;
func->u.p.code[*codeptr].u.op = PSORETURN;
++*codeptr;
@@ -455,10 +441,7 @@ parsecode(pdf_function *func, fz_stream *stream, int *codeptr)
if (cmp != 0)
return fz_throw("unknown operator: '%s'", buf);
- error = resizecode(func, *codeptr);
- if (error)
- return fz_rethrow(error, "resize calculator function code");
-
+ resizecode(func, *codeptr);
func->u.p.code[*codeptr].type = PSOPERATOR;
func->u.p.code[*codeptr].u.op = a;
++*codeptr;
@@ -1009,8 +992,6 @@ loadsamplefunc(pdf_function *func, pdf_xref *xref, fz_obj *dict, int oid, int ge
pdf_logrsrc("samplecount %d\n", samplecount);
func->u.sa.samples = fz_malloc(samplecount * sizeof(int));
- if (!func->u.sa.samples)
- return fz_rethrow(-1, "out of memory: samples");
error = pdf_openstream(&stream, xref, oid, gen);
if (error)
@@ -1101,8 +1082,6 @@ evalsamplefunc(pdf_function *func, float *in, float *out)
{
s0 = fz_malloc((1 << func->m) * 2 * sizeof(float));
s1 = s0 + (1 << func->m);
- if (!s0)
- return fz_rethrow(-1, "out of memory: scratch buffer");
}
/* FIXME i think this is wrong... test with 2 samples it gets wrong idxs */
@@ -1254,24 +1233,9 @@ loadstitchingfunc(pdf_function *func, pdf_xref *xref, fz_obj *dict)
pdf_logrsrc("k %d\n", func->u.st.k);
func->u.st.funcs = fz_malloc(func->u.st.k * sizeof (pdf_function));
- if (!func->u.st.funcs)
- return fz_throw("out of memory");
- funcs = func->u.st.funcs;
-
func->u.st.bounds = fz_malloc((func->u.st.k - 1) * sizeof (float));
- if (!func->u.st.bounds)
- {
- fz_free(func->u.st.funcs);
- return fz_throw("out of memory");
- }
-
func->u.st.encode = fz_malloc(func->u.st.k * 2 * sizeof (float));
- if (!func->u.st.encode)
- {
- fz_free(func->u.st.funcs);
- fz_free(func->u.st.bounds);
- return fz_throw("out of memory");
- }
+ funcs = func->u.st.funcs;
for (i = 0; i < k; ++i)
{
@@ -1317,7 +1281,6 @@ loadstitchingfunc(pdf_function *func, pdf_xref *xref, fz_obj *dict)
{
if (!fz_isarray(obj) || fz_arraylen(obj) != k * 2)
return fz_throw("malformed /Encode");
-
for (i = 0; i < k; ++i)
{
func->u.st.encode[i*2+0] = fz_toreal(fz_arrayget(obj, i*2+0));
@@ -1434,9 +1397,6 @@ pdf_loadfunction(pdf_function **funcp, pdf_xref *xref, fz_obj *ref)
pdf_logrsrc("load function (%d %d R) {\n", fz_tonum(ref), fz_togen(ref));
func = fz_malloc(sizeof(pdf_function));
- if (!func)
- return fz_rethrow(-1, "out of memory: function struct");
-
memset(func, 0, sizeof(pdf_function));
func->refs = 1;