tlv_eeprom: make sure key exist when deleting it
authorHugo Villeneuve <hvilleneuve@dimonoff.com>
Wed, 5 Nov 2025 16:50:16 +0000 (11:50 -0500)
committerHugo Villeneuve <hvilleneuve@dimonoff.com>
Mon, 17 Nov 2025 15:36:11 +0000 (10:36 -0500)
Signed-off-by: Hugo Villeneuve <hvilleneuve@dimonoff.com>
src/tlv_eeprom.c

index 7ceae37..a1a5d96 100644 (file)
@@ -438,20 +438,23 @@ bool tlvinfo_delete_tlv(u8 *eeprom, u8 code)
        struct tlvinfo_tlv *eeprom_tlv;
 
        // Find the TLV and then move all following TLVs "forward"
-       if (tlvinfo_find_tlv(eeprom, code, &eeprom_index)) {
-               eeprom_tlv = to_entry(&eeprom[eeprom_index]);
-               tlength = ENT_SIZE + eeprom_tlv->length;
-               memcpy(&eeprom[eeprom_index], &eeprom[eeprom_index + tlength],
-                      HDR_SIZE +
-                      be16_to_cpu(eeprom_hdr->totallen) - eeprom_index -
-                      tlength);
-               eeprom_hdr->totallen =
-                       cpu_to_be16(be16_to_cpu(eeprom_hdr->totallen) -
-                                   tlength);
-               update_crc(eeprom);
-               return true;
+       if (!tlvinfo_find_tlv(eeprom, code, &eeprom_index)) {
+               printf("ERROR: missing TLV key: $%02X\n", code);
+               return false;
        }
-       return false;
+
+       eeprom_tlv = to_entry(&eeprom[eeprom_index]);
+       tlength = ENT_SIZE + eeprom_tlv->length;
+       memcpy(&eeprom[eeprom_index], &eeprom[eeprom_index + tlength],
+              HDR_SIZE +
+              be16_to_cpu(eeprom_hdr->totallen) - eeprom_index -
+              tlength);
+       eeprom_hdr->totallen =
+               cpu_to_be16(be16_to_cpu(eeprom_hdr->totallen) -
+                           tlength);
+       update_crc(eeprom);
+
+       return true;
 }
 
 /**