Reading using the low-speed read command returns 32K bytes when asked for 0. This is handy to use, but we should handle a request for 0 by returning without a read. --- src/cochran_commander.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
diff --git a/src/cochran_commander.c b/src/cochran_commander.c index 068fd04..9670aea 100644 --- a/src/cochran_commander.c +++ b/src/cochran_commander.c @@ -500,6 +500,16 @@ cochran_commander_read (cochran_commander_device_t *device, dc_event_progress_t case 24: // Commander uses 24 byte addressing if (device->layout->baudrate == 9600) { + // This read command will return 32K bytes if asked to + // read 0 bytes. So we can allow a size of up to + // 0x10000 but if the user asks for 0 bytes we + // should just return success otherwise we'll end + // end up running past the buffer. + if (size > 0x10000) + return DC_STATUS_INVALIDARGS; + if (size == 0) + return DC_STATUS_SUCCESS; + // Older commander, use low-speed read command command[0] = 0x05; command[1] = (address ) & 0xff;