summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pdf/pdf_gstate.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/pdf/pdf_gstate.c b/pdf/pdf_gstate.c
index 7801ee681..c1444b4b5 100644
--- a/pdf/pdf_gstate.c
+++ b/pdf/pdf_gstate.c
@@ -875,6 +875,11 @@ static int pdfi_set_all_transfers(pdf_context *ctx, pdf_array *a, pdf_dict *page
pdfi_countdown(o);
goto exit;
}
+ if (pfn[i]->params.m != 1 || pfn[i]->params.n != 1) {
+ pdfi_countdown(o);
+ code = gs_note_error(gs_error_rangecheck);
+ goto exit;
+ }
} else {
pdfi_countdown(o);
code = gs_note_error(gs_error_typecheck);
@@ -938,7 +943,6 @@ static int pdfi_set_all_transfers(pdf_context *ctx, pdf_array *a, pdf_dict *page
}
}
exit:
-// (void)pdfi_seek(ctx, ctx->main_stream, saved_stream_offset, SEEK_SET);
for (i = 0; i < 4; i++) {
pdfi_free_function(ctx, pfn[i]);
}
@@ -957,6 +961,11 @@ static int pdfi_set_gray_transfer(pdf_context *ctx, pdf_obj *tr_obj, pdf_dict *p
if (code < 0)
return code;
+ if (pfn->params.m != 1 || pfn->params.n != 1) {
+ (void)pdfi_free_function(ctx, pfn);
+ return_error(gs_error_rangecheck);
+ }
+
gs_settransfer_remap(ctx->pgs, gs_mapped_transfer, false);
for (i = 0; i < transfer_map_size; i++) {
float v, f;