changeset 530:65c2085e0398

Don't rely on undefined memory before start of instab When encountering a symbol on a line by itself, cl->insn was used to index into the instab array. Unfortunately, in that case, cl->insn will be -1 which will refer to memory before the start of instab. Depending on the compiler and linker, that could be anything. This would only have a visible effect on the OS9 target which has separate data and code address counters. On other targets, the two counters are kept in sync. This patch should short circuit that unfortunate code issue.
author William Astle <lost@l-w.ca>
date Wed, 09 Mar 2022 15:56:03 -0700
parents 428039e88a0b
children a812bb4d3a51
files lwasm/pass1.c
diffstat 1 files changed, 1 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/lwasm/pass1.c	Wed Feb 09 21:44:28 2022 -0700
+++ b/lwasm/pass1.c	Wed Mar 09 15:56:03 2022 -0700
@@ -430,7 +430,7 @@
 				debug_message(as, 50, "Register symbol %s: %s", cl -> sym, lw_expr_print(cl -> addr));
 	
 				// register symbol at line address
-				if (instab[cl -> insn].flags & lwasm_insn_setdata)
+				if ((cl -> insn >= 0) && (instab[cl -> insn].flags & lwasm_insn_setdata))
 				{
 					if (!register_symbol(as, cl, cl -> sym, cl -> daddr, symbol_flag_none))
 					{