From bf55881e40bed7c55e4aa8e7b354a2added4f3cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E4=B9=94=E5=BC=82?= Date: Mon, 29 Jul 2024 10:42:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=BC=96=E7=A0=81=E6=BC=8F?= =?UTF-8?q?=E6=B4=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 陈乔异 --- Source/stb_image.h | 18 ++++++++++++------ Source/tinyexr.h | 2 +- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/Source/stb_image.h b/Source/stb_image.h index 5e807a0..be014b2 100644 --- a/Source/stb_image.h +++ b/Source/stb_image.h @@ -1446,7 +1446,7 @@ STBIDEF stbi_uc *stbi_load_gif_from_memory(stbi_uc const *buffer, int len, int * stbi__start_mem(&s,buffer,len); result = (unsigned char*) stbi__load_gif_main(&s, delays, x, y, z, comp, req_comp); - if (stbi__vertically_flip_on_load) { + if (stbi__vertically_flip_on_load && result) { stbi__vertical_flip_slices( result, *x, *y, *z, *comp ); } @@ -6991,8 +6991,11 @@ static void *stbi__load_gif_main(stbi__context *s, int **delays, int *x, int *y, if (out) { void *tmp = (stbi_uc*) STBI_REALLOC_SIZED( out, out_size, layers * stride ); - if (!tmp) - return stbi__load_gif_main_outofmem(&g, out, delays); + if (!tmp) { + void *ret = stbi__load_gif_main_outofmem(&g, out, delays); + if (delays && *delays) *delays = 0; + return ret; + } else { out = (stbi_uc*) tmp; out_size = layers * stride; @@ -7007,8 +7010,11 @@ static void *stbi__load_gif_main(stbi__context *s, int **delays, int *x, int *y, } } else { out = (stbi_uc*)stbi__malloc( layers * stride ); - if (!out) - return stbi__load_gif_main_outofmem(&g, out, delays); + if (!out) { + void *ret = stbi__load_gif_main_outofmem(&g, out, delays); + if (delays && *delays) *delays = 0; + return ret; + } out_size = layers * stride; if (delays) { *delays = (int*) stbi__malloc( layers * sizeof(int) ); @@ -7019,7 +7025,7 @@ static void *stbi__load_gif_main(stbi__context *s, int **delays, int *x, int *y, } memcpy( out + ((layers - 1) * stride), u, stride ); if (layers >= 2) { - two_back = out - 2 * stride; + two_back = out + (layers - 2) * stride; } if (delays) { diff --git a/Source/tinyexr.h b/Source/tinyexr.h index 3e0aba9..e3e6c32 100644 --- a/Source/tinyexr.h +++ b/Source/tinyexr.h @@ -7764,7 +7764,7 @@ static int rleUncompress(int inLength, int maxLength, const signed char in[], int count = *in++; inLength -= 2; - if (0 > (maxLength -= count + 1)) return 0; + if (0 > (maxLength -= count + 1) || inLength < 0) return 0; memset(out, *reinterpret_cast(in), count + 1); out += count + 1; -- Gitee