@@ -303,10 +303,10 @@ pub fn create_emu_state(
303
303
let expected_len = save_type. expected_len ( ) . unwrap ( ) ;
304
304
let save_contents = match save_contents {
305
305
Some ( save_contents) => {
306
- SaveContents :: Existing ( if save_contents. len ( ) = = expected_len {
306
+ SaveContents :: Existing ( if save_contents. len ( ) ! = expected_len {
307
307
let mut new_contents = BoxedByteSlice :: new_zeroed ( expected_len) ;
308
- new_contents [ .. save_contents. len ( ) ] . copy_from_slice ( & save_contents ) ;
309
- drop ( save_contents) ;
308
+ let copy_len = save_contents. len ( ) . min ( expected_len ) ;
309
+ new_contents [ ..copy_len ] . copy_from_slice ( & save_contents[ ..copy_len ] ) ;
310
310
new_contents
311
311
} else {
312
312
save_contents
@@ -322,6 +322,7 @@ pub fn create_emu_state(
322
322
#[ cfg( feature = "log" ) ]
323
323
logger. new ( slog:: o!( "ds_spi" => "eeprom_4k" ) ) ,
324
324
)
325
+ // NOTE: The save contents' size is ensured beforehand, this should never occur.
325
326
. expect ( "couldn't create 4 Kib EEPROM DS slot SPI device" )
326
327
. into ( ) ,
327
328
SaveType :: EepromFram64k | SaveType :: EepromFram512k | SaveType :: EepromFram1m => {
@@ -331,6 +332,7 @@ pub fn create_emu_state(
331
332
#[ cfg( feature = "log" ) ]
332
333
logger. new ( slog:: o!( "ds_spi" => "eeprom_fram" ) ) ,
333
334
)
335
+ // NOTE: The save contents' size is ensured beforehand, this should never occur.
334
336
. expect ( "couldn't create EEPROM/FRAM DS slot SPI device" )
335
337
. into ( )
336
338
}
@@ -342,6 +344,7 @@ pub fn create_emu_state(
342
344
#[ cfg( feature = "log" ) ]
343
345
logger. new ( slog:: o!( "ds_spi" => if has_ir { "flash" } else { "flash_ir" } ) ) ,
344
346
)
347
+ // NOTE: The save contents' size is ensured beforehand, this should never occur.
345
348
. expect ( "couldn't create FLASH DS slot SPI device" )
346
349
. into ( )
347
350
}
0 commit comments