changeset 2346:0111c8344477

Fix some issues identified by asan/ubsan
author Michael Pavone <pavone@retrodev.com>
date Sat, 07 Oct 2023 18:04:35 -0700
parents c76c81c21ae5
children 047253715fd8
files 68kinst.c hash.c m68k_core.c m68k_core.h png.c render_sdl.c zip.c
diffstat 7 files changed, 11 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/68kinst.c	Fri Oct 06 00:20:37 2023 -0700
+++ b/68kinst.c	Sat Oct 07 18:04:35 2023 -0700
@@ -150,7 +150,7 @@
 			dst->addr_mode = MODE_ABSOLUTE;
 			ext = fetch(address, data);
 			address += 2;
-			dst->params.immed = ext << 16 | fetch(address, data);
+			dst->params.immed = ((uint32_t)ext) << 16 | fetch(address, data);
 			address += 2;
 			break;
 		case 3:
@@ -268,7 +268,7 @@
 				dst->params.immed = ext;
 				break;
 			case OPSIZE_LONG:
-				dst->params.immed = ext << 16 | fetch(address, data);
+				dst->params.immed = ((uint32_t)ext) << 16 | fetch(address, data);
 				address += 2;
 				break;
 			}
--- a/hash.c	Fri Oct 06 00:20:37 2023 -0700
+++ b/hash.c	Sat Oct 07 18:04:35 2023 -0700
@@ -26,7 +26,7 @@
 	memcpy(state, hash, sizeof(state));
 	for (uint32_t src = 0; src < 64; src += 4)
 	{
-		w[src >> 2] = chunk[src] << 24 | chunk[src+1] << 16 | chunk[src+2] << 8 | chunk[src+3];
+		w[src >> 2] = ((uint32_t)chunk[src]) << 24 | chunk[src+1] << 16 | chunk[src+2] << 8 | chunk[src+3];
 	}
 	for (uint32_t cur = 16; cur < 80; cur++)
 	{
--- a/m68k_core.c	Fri Oct 06 00:20:37 2023 -0700
+++ b/m68k_core.c	Sat Oct 07 18:04:35 2023 -0700
@@ -1221,8 +1221,8 @@
 		context->aregs[8] = context->aregs[7];
 	}
 	context->status = 0x27;
-	context->aregs[7] = reset_vec[0] << 16 | reset_vec[1];
-	uint32_t address = reset_vec[2] << 16 | reset_vec[3];
+	context->aregs[7] = ((uint32_t)reset_vec[0]) << 16 | reset_vec[1];
+	uint32_t address = ((uint32_t)reset_vec[2]) << 16 | reset_vec[3];
 	//interrupt mask may have changed so force a sync
 	context->options->sync_components(context, address);
 	start_68k_context(context, address);
--- a/m68k_core.h	Fri Oct 06 00:20:37 2023 -0700
+++ b/m68k_core.h	Sat Oct 07 18:04:35 2023 -0700
@@ -40,7 +40,7 @@
 	cpu_options     gen;
 
 	int8_t          dregs[8];
-	int8_t          aregs[8];
+	int8_t          aregs[9];
 	int8_t			flag_regs[5];
 	FILE            *address_log;
 	code_ptr        read_16;
--- a/png.c	Fri Oct 06 00:20:37 2023 -0700
+++ b/png.c	Sat Oct 07 18:04:35 2023 -0700
@@ -337,7 +337,7 @@
 	if (*last) {
 		(*last)++;
 	}
-	return alpha << 24 | red << 16 | green << 8 | blue;
+	return ((uint32_t)alpha) << 24 | red << 16 | green << 8 | blue;
 }
 
 static filter_fun filters[] = {filter_none, filter_sub, filter_up, filter_avg, filter_paeth};
--- a/render_sdl.c	Fri Oct 06 00:20:37 2023 -0700
+++ b/render_sdl.c	Sat Oct 07 18:04:35 2023 -0700
@@ -279,9 +279,9 @@
 uint32_t render_map_color(uint8_t r, uint8_t g, uint8_t b)
 {
 #ifdef USE_GLES
-	return 255 << 24 | b << 16 | g << 8 | r;
+	return 255UL << 24 | b << 16 | g << 8 | r;
 #else
-	return 255 << 24 | r << 16 | g << 8 | b;
+	return 255UL << 24 | r << 16 | g << 8 | b;
 #endif
 }
 
@@ -425,7 +425,7 @@
 			//TODO: Fixme for PAL + invalid display mode
 			glTexImage2D(GL_TEXTURE_2D, 0, INTERNAL_FORMAT, tex_width, tex_height, 0, SRC_FORMAT, GL_UNSIGNED_BYTE, texture_buf);
 		} else {
-			uint32_t blank = 255 << 24;
+			uint32_t blank = 255UL << 24;
 			glTexImage2D(GL_TEXTURE_2D, 0, INTERNAL_FORMAT, 1, 1, 0, SRC_FORMAT, GL_UNSIGNED_BYTE, &blank);
 		}
 	}
--- a/zip.c	Fri Oct 06 00:20:37 2023 -0700
+++ b/zip.c	Sat Oct 07 18:04:35 2023 -0700
@@ -106,6 +106,7 @@
 	z->entries = entries;
 	z->file = f;
 	z->num_entries = cur_entry - entries;
+	free(buf);
 	return z;
 	
 fail_entries: