From 5affc221f3074be4e7239ba2a0683cae06b525fd Mon Sep 17 00:00:00 2001 From: Alexander Goncharov Date: Tue, 14 Feb 2023 19:31:44 +0400 Subject: flashrom: rewrite flashbuses_to_text() The previous implementation had no error handling, as a result the flashrom could crash if the computer ran out of memory. The new version returns NULL in such cases. Also, rewrite lots of `if` conditions to one cycle, store a name of buses and `enum chipbustype` in an array by using a custom struct. The caller always expected a non-null value, so change its behavior to handle a possible null value or use the `?` symbol. As far as `free()` can handle null pointers, do nothing with such callers. TEST=ninja test Change-Id: I59b9044c99b4ba6c00d8c97f1e91af09d70dce2c Signed-off-by: Alexander Goncharov Ticket: https://ticket.coreboot.org/issues/408 Reviewed-on: https://review.coreboot.org/c/flashrom/+/73039 Tested-by: build bot (Jenkins) Reviewed-by: Anastasia Klimchuk --- print.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'print.c') diff --git a/print.c b/print.c index 98d31094e..0caa0da74 100644 --- a/print.c +++ b/print.c @@ -103,6 +103,10 @@ static int print_supported_chips(void) } while (1); s = flashbuses_to_text(chip->bustype); + if (s == NULL) { + msg_gerr("Out of memory!\n"); + return 1; + } maxtypelen = max(maxtypelen, strlen(s)); free(s); } @@ -265,6 +269,12 @@ static int print_supported_chips(void) msg_ginfo(" "); s = flashbuses_to_text(chip->bustype); + if (s == NULL) { + msg_gerr("Out of memory!\n"); + free(ven); + free(dev); + return 1; + } msg_ginfo("%s", s); for (i = strlen(s); i < maxtypelen; i++) msg_ginfo(" "); -- cgit v1.2.3