parent
3aae5268e0
commit
3de7e96196
@ -0,0 +1,45 @@
|
||||
From c2663e51238ec8256da7fc61ad580db891d9fe9a Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Rasmussen <sebras@gmail.com>
|
||||
Date: Mon, 25 Sep 2017 13:04:11 +0200
|
||||
Subject: [PATCH] Bug 698592: Mark variable fz_var(), avoiding optimization.
|
||||
|
||||
The change in 2707fa9e8e6d17d794330e719dec1b08161fb045
|
||||
in build_filter_chain() allows for the variable chain
|
||||
to reside in a register, which means that the bug is
|
||||
likely to only be visible if built under optimization.
|
||||
|
||||
First the chain variable is transferred to chain2, then
|
||||
set to NULL, then when an exception occurs in build_filter()
|
||||
the filter chain will be freed by build_filter(). Next
|
||||
the expectation is that execution proceeds to fz_catch()
|
||||
where fz_drop_stream() would be called with chain == NULL.
|
||||
|
||||
However due to the chain variable residing in a register,
|
||||
its value is not NULL as expected, but was reset to its
|
||||
original value upon the exception (since they use setjmp()),
|
||||
hence fz_drop_stream() is called with a non-NULL value.
|
||||
|
||||
Marking the chain variable with fz_var() prevents the
|
||||
compiler from allowing the chain variable to reside in
|
||||
a register and hence its value will remain NULL and
|
||||
never be reset.
|
||||
---
|
||||
source/pdf/pdf-stream.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/source/pdf/pdf-stream.c b/source/pdf/pdf-stream.c
|
||||
index baf9f0a..56592b0 100644
|
||||
--- a/source/pdf/pdf-stream.c
|
||||
+++ b/source/pdf/pdf-stream.c
|
||||
@@ -246,6 +246,8 @@ build_filter_chain(fz_context *ctx, fz_stream *chain, pdf_document *doc, pdf_obj
|
||||
pdf_obj *p;
|
||||
int i, n;
|
||||
|
||||
+ fz_var(chain);
|
||||
+
|
||||
fz_try(ctx)
|
||||
{
|
||||
n = pdf_array_len(ctx, fs);
|
||||
--
|
||||
2.9.1
|
||||
|
@ -0,0 +1,26 @@
|
||||
From 82df2631d7d0446b206ea6b434ea609b6c28b0e8 Mon Sep 17 00:00:00 2001
|
||||
From: Tor Andersson <tor.andersson@artifex.com>
|
||||
Date: Mon, 16 Oct 2017 13:14:25 +0200
|
||||
Subject: [PATCH] Check for integer overflow when validating new style xref
|
||||
Index.
|
||||
|
||||
---
|
||||
source/pdf/pdf-xref.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/source/pdf/pdf-xref.c b/source/pdf/pdf-xref.c
|
||||
index 66bd0ed..6292793 100644
|
||||
--- a/source/pdf/pdf-xref.c
|
||||
+++ b/source/pdf/pdf-xref.c
|
||||
@@ -924,7 +924,7 @@ pdf_read_new_xref_section(fz_context *ctx, pdf_document *doc, fz_stream *stm, fz
|
||||
pdf_xref_entry *table;
|
||||
int i, n;
|
||||
|
||||
- if (i0 < 0 || i1 < 0)
|
||||
+ if (i0 < 0 || i1 < 0 || (i0+i1) < 0)
|
||||
fz_throw(ctx, FZ_ERROR_GENERIC, "negative xref stream entry index");
|
||||
//if (i0 + i1 > pdf_xref_len(ctx, doc))
|
||||
// fz_throw(ctx, FZ_ERROR_GENERIC, "xref stream has too many entries");
|
||||
--
|
||||
2.9.1
|
||||
|
Loading…
Reference in new issue