From: Yegor Yefremov <yegorsli...@googlemail.com> User area begins after the serial number string. Hence, use free_end to specify the end of the necessary data like producer, serial number strings as also PNP bits.
Treat both generated data area and strings area violations as errors. --- src/ftdi.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/ftdi.c b/src/ftdi.c index eca122c..aa14f7b 100644 --- a/src/ftdi.c +++ b/src/ftdi.c @@ -3074,7 +3074,6 @@ int ftdi_eeprom_build(struct ftdi_context *ftdi) } /* Wrap around 0x80 for 128 byte EEPROMS (Internale and 93x46) */ eeprom_size_mask = eeprom->size -1; - free_end = i & eeprom_size_mask; // Addr 0E: Offset of the manufacturer string + 0x80, calculated later // Addr 0F: Length of manufacturer string @@ -3474,15 +3473,19 @@ int ftdi_eeprom_build(struct ftdi_context *ftdi) free_start += 0x14; } + free_end = i & eeprom_size_mask; + /* Arbitrary user data */ if (eeprom->user_data_size > 0) { + if (!eeprom->user_data_addr) + eeprom->user_data_addr = free_end; if (eeprom->user_data_addr < free_start) - fprintf(stderr,"Warning, user data starts inside the generated data!\n"); - if (eeprom->user_data_addr + eeprom->user_data_size >= free_end) - fprintf(stderr,"Warning, user data overlaps the strings area!\n"); - if (eeprom->user_data_addr + eeprom->user_data_size > eeprom->size) - ftdi_error_return(-1,"eeprom size exceeded"); + ftdi_error_return(-1, "user data starts inside the generated data"); + if (eeprom->user_data_addr < free_end) + ftdi_error_return(-1 , "user data overlaps the strings area"); + if (eeprom->user_data_addr + eeprom->user_data_size > eeprom->size - 2) + ftdi_error_return(-1, "eeprom size exceeded"); memcpy(output + eeprom->user_data_addr, eeprom->user_data, eeprom->user_data_size); } -- 2.34.1 -- libftdi - see http://www.intra2net.com/en/developer/libftdi for details. To unsubscribe send a mail to libftdi+unsubscr...@developer.intra2net.com