diff options
author | Michael Drake <tlsa@netsurf-browser.org> | 2021-10-31 15:15:21 +0000 |
---|---|---|
committer | Michael Drake <tlsa@netsurf-browser.org> | 2021-10-31 16:19:08 +0000 |
commit | 12580f6d6737c7a549f465cd76183798cb6539bc (patch) | |
tree | 5c12d3472408878bf0f510c69139b20240bbe95a | |
parent | 6344f78d4faac7f141edd2ecb21223f95988f582 (diff) | |
download | libnsgif-12580f6d6737c7a549f465cd76183798cb6539bc.tar.gz libnsgif-12580f6d6737c7a549f465cd76183798cb6539bc.tar.bz2 |
GIF: Clean up block skipping in frame extension skip.
-rw-r--r-- | src/libnsgif.c | 12 |
1 files changed, 4 insertions, 8 deletions
diff --git a/src/libnsgif.c b/src/libnsgif.c index 0d84032..3678083 100644 --- a/src/libnsgif.c +++ b/src/libnsgif.c @@ -445,13 +445,10 @@ static gif_result gif_initialise_frame(gif_animation *gif) static gif_result gif_skip_frame_extensions(gif_animation *gif) { unsigned char *gif_data, *gif_end; - int gif_bytes; - unsigned int block_size; /* Get our buffer position etc. */ gif_data = (unsigned char *)(gif->gif_data + gif->buffer_position); gif_end = (unsigned char *)(gif->gif_data + gif->buffer_size); - gif_bytes = (gif_end - gif_data); /* Skip the extensions */ while (gif_data < gif_end && gif_data[0] == GIF_EXTENSION_INTRODUCER) { @@ -483,14 +480,13 @@ static gif_result gif_skip_frame_extensions(gif_animation *gif) /* Repeatedly skip blocks until we get a zero block or run out * of data This data is ignored by this gif decoder */ - gif_bytes = (gif_end - gif_data); - block_size = 0; while (gif_data < gif_end && gif_data[0] != GIF_BLOCK_TERMINATOR) { - block_size = gif_data[0] + 1; - if ((gif_bytes -= block_size) < 0) { + unsigned int block_size = gif_data[0] + 1; + + gif_data += block_size; + if (gif_data >= gif_end) { return GIF_INSUFFICIENT_FRAME_DATA; } - gif_data += block_size; } ++gif_data; } |