summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2021-10-31 15:15:21 +0000
committerMichael Drake <tlsa@netsurf-browser.org>2021-10-31 16:19:08 +0000
commit12580f6d6737c7a549f465cd76183798cb6539bc (patch)
tree5c12d3472408878bf0f510c69139b20240bbe95a
parent6344f78d4faac7f141edd2ecb21223f95988f582 (diff)
downloadlibnsgif-12580f6d6737c7a549f465cd76183798cb6539bc.tar.gz
libnsgif-12580f6d6737c7a549f465cd76183798cb6539bc.tar.bz2
GIF: Clean up block skipping in frame extension skip.
-rw-r--r--src/libnsgif.c12
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;
}