[poppler] poppler/poppler: DCTStream.cc,1.3,1.4
Albert Astals Cid
aacid at freedesktop.org
Thu Jan 5 15:53:35 PST 2006
Update of /cvs/poppler/poppler/poppler
In directory gabe:/tmp/cvs-serv30132/poppler
Modified Files:
DCTStream.cc
Log Message:
* poppler/DCTStream.cc: Fix handling of malformed jpeg streams like
the one at http://bugs.kde.org/show_bug.cgi?id=119569
Might be worth backporting to 0.4.x
Index: DCTStream.cc
===================================================================
RCS file: /cvs/poppler/poppler/poppler/DCTStream.cc,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- DCTStream.cc 1 Aug 2005 19:15:40 -0000 1.3
+++ DCTStream.cc 5 Jan 2006 23:53:33 -0000 1.4
@@ -14,19 +14,25 @@
static boolean str_fill_input_buffer(j_decompress_ptr cinfo)
{
+ int c;
struct str_src_mgr * src = (struct str_src_mgr *)cinfo->src;
if (src->index == 0) {
- src->buffer = 0xFF;
+ c = 0xFF;
src->index++;
}
else if (src->index == 1) {
- src->buffer = 0xD8;
+ c = 0xD8;
src->index++;
}
- else src->buffer = src->str->getChar();
- src->pub.next_input_byte = &src->buffer;
- src->pub.bytes_in_buffer = 1;
- return TRUE;
+ else c = src->str->getChar();
+ if (c != EOF)
+ {
+ src->buffer = c;
+ src->pub.next_input_byte = &src->buffer;
+ src->pub.bytes_in_buffer = 1;
+ return TRUE;
+ }
+ else return FALSE;
}
static void str_skip_input_data(j_decompress_ptr cinfo, long num_bytes)
@@ -81,18 +87,17 @@
// the start marker...
bool startFound = false;
int c = 0, c2 = 0;
- int n = 0;
while (!startFound)
{
if (!c)
{
c = str->getChar();
- if (c != 0xFF) c = 0;
if (c == -1)
{
error(-1, "Could not find start of jpeg data");
exit(1);
}
+ if (c != 0xFF) c = 0;
}
else
{
@@ -104,7 +109,6 @@
}
else startFound = true;
}
- n++;
}
jpeg_read_header(&cinfo, TRUE);
@@ -119,7 +123,9 @@
if (x == 0) {
if (cinfo.output_scanline < cinfo.output_height)
- jpeg_read_scanlines(&cinfo, row_buffer, 1);
+ {
+ if (!jpeg_read_scanlines(&cinfo, row_buffer, 1)) return EOF;
+ }
else return EOF;
}
c = row_buffer[0][x];
More information about the poppler
mailing list