# HG changeset patch # User Michael Pavone # Date 1696727075 25200 # Node ID 0111c8344477728ef3d85cd876b6fae181d14f51 # Parent c76c81c21ae5f16f47458546de91325f9954d79a Fix some issues identified by asan/ubsan diff -r c76c81c21ae5 -r 0111c8344477 68kinst.c --- 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; } diff -r c76c81c21ae5 -r 0111c8344477 hash.c --- 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++) { diff -r c76c81c21ae5 -r 0111c8344477 m68k_core.c --- 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); diff -r c76c81c21ae5 -r 0111c8344477 m68k_core.h --- 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; diff -r c76c81c21ae5 -r 0111c8344477 png.c --- 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}; diff -r c76c81c21ae5 -r 0111c8344477 render_sdl.c --- 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); } } diff -r c76c81c21ae5 -r 0111c8344477 zip.c --- 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: