changeset 2476:aaf7bb58ffca

Fix bug in Gen/MD serialize routine that could cause a use-after free in some cases
author Michael Pavone <pavone@retrodev.com>
date Sun, 03 Mar 2024 13:47:59 -0800
parents a634985b1df3
children 2972a8e16ed2
files genesis.c
diffstat 1 files changed, 9 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/genesis.c	Sat Mar 02 15:33:14 2024 -0800
+++ b/genesis.c	Sun Mar 03 13:47:59 2024 -0800
@@ -139,13 +139,19 @@
 	genesis_context *gen = (genesis_context *)sys;
 	uint32_t address;
 	if (gen->m68k->resume_pc) {
-		gen->m68k->target_cycle = gen->m68k->current_cycle;
+		
 		gen->header.save_state = SERIALIZE_SLOT+1;
-		resume_68k(gen->m68k);
+		while (!gen->serialize_tmp)
+		{
+			gen->m68k->target_cycle = gen->m68k->current_cycle + 1;
+			resume_68k(gen->m68k);
+		}
 		if (size_out) {
 			*size_out = gen->serialize_size;
 		}
-		return gen->serialize_tmp;
+		uint8_t *ret = gen->serialize_tmp;
+		gen->serialize_tmp = NULL;
+		return ret;
 	} else {
 		serialize_buffer state;
 		init_serialize(&state);