Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4603)

Unified Diff: WebCore/platform/image-decoders/gif/GIFImageReader.cpp

Issue 521039: Merge 52833 - Public GIF decoder should stop decoding when allocation fails... (Closed) Base URL: svn://chrome-svn/chrome/branches/WebKit/249/
Patch Set: Created 10 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « WebCore/platform/image-decoders/gif/GIFImageReader.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: WebCore/platform/image-decoders/gif/GIFImageReader.cpp
===================================================================
--- WebCore/platform/image-decoders/gif/GIFImageReader.cpp (revision 35612)
+++ WebCore/platform/image-decoders/gif/GIFImageReader.cpp (working copy)
@@ -104,7 +104,7 @@
//******************************************************************************
// Send the data to the display front-end.
-void GIFImageReader::output_row()
+bool GIFImageReader::output_row()
{
GIFFrameReader* gs = frame_reader;
@@ -154,13 +154,14 @@
/* Protect against too much image data */
if ((unsigned)drow_start >= gs->height)
- return;
+ return true;
// CALLBACK: Let the client know we have decoded a row.
- if (clientptr && frame_reader)
- clientptr->haveDecodedRow(images_count - 1, frame_reader->rowbuf, frame_reader->rowend,
- drow_start, drow_end - drow_start + 1,
- gs->progressive_display && gs->interlaced && gs->ipass > 1);
+ if (clientptr && frame_reader &&
+ !clientptr->haveDecodedRow(images_count - 1, frame_reader->rowbuf, frame_reader->rowend,
+ drow_start, drow_end - drow_start + 1,
+ gs->progressive_display && gs->interlaced && gs->ipass > 1))
+ return false;
gs->rowp = gs->rowbuf;
@@ -207,15 +208,17 @@
}
} while (gs->irow > (gs->height - 1));
}
+
+ return true;
}
//******************************************************************************
/* Perform Lempel-Ziv-Welch decoding */
-int GIFImageReader::do_lzw(const unsigned char *q)
+bool GIFImageReader::do_lzw(const unsigned char *q)
{
GIFFrameReader* gs = frame_reader;
if (!gs)
- return 0;
+ return true;
int code;
int incode;
@@ -249,11 +252,12 @@
unsigned rows_remaining = gs->rows_remaining;
if (rowp == rowend)
- return 0;
+ return true;
#define OUTPUT_ROW \
PR_BEGIN_MACRO \
- output_row(); \
+ if (!output_row()) \
+ return false; \
rows_remaining--; \
rowp = frame_reader->rowp; \
if (!rows_remaining) \
@@ -286,9 +290,7 @@
/* Check for explicit end-of-stream code */
if (code == (clear_code + 1)) {
/* end-of-stream should only appear after all image data */
- if (rows_remaining != 0)
- return -1;
- return 0;
+ return rows_remaining == 0;
}
if (oldcode == -1) {
@@ -306,13 +308,13 @@
code = oldcode;
if (stackp == stack + MAX_BITS)
- return -1;
+ return false;
}
while (code >= clear_code)
{
if (code >= MAX_BITS || code == prefix[code])
- return -1;
+ return false;
// Even though suffix[] only holds characters through suffix[avail - 1],
// allowing code >= avail here lets us be more tolerant of malformed
@@ -322,7 +324,7 @@
code = prefix[code];
if (stackp == stack + MAX_BITS)
- return -1;
+ return false;
}
*stackp++ = firstchar = suffix[code];
@@ -369,7 +371,7 @@
gs->rowp = rowp;
gs->rows_remaining = rows_remaining;
- return 0;
+ return true;
}
@@ -438,7 +440,7 @@
switch (state)
{
case gif_lzw:
- if (do_lzw(q) < 0) {
+ if (!do_lzw(q)) {
state = gif_error;
break;
}
« no previous file with comments | « WebCore/platform/image-decoders/gif/GIFImageReader.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698