summaryrefslogtreecommitdiffstats
path: root/print.c
diff options
context:
space:
mode:
authorAlexander Goncharov <chat@joursoir.net>2023-02-14 19:31:44 +0400
committerAnastasia Klimchuk <aklm@chromium.org>2023-04-24 13:30:12 +0000
commit5affc221f3074be4e7239ba2a0683cae06b525fd (patch)
tree49b9d01b929279a5803507d0a83e157c667c9be0 /print.c
parent590a621e164a09b9a435e12ef14800f55cf4805e (diff)
downloadflashrom-5affc221f3074be4e7239ba2a0683cae06b525fd.tar.gz
flashrom-5affc221f3074be4e7239ba2a0683cae06b525fd.tar.bz2
flashrom-5affc221f3074be4e7239ba2a0683cae06b525fd.zip
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 <chat@joursoir.net> Ticket: https://ticket.coreboot.org/issues/408 Reviewed-on: https://review.coreboot.org/c/flashrom/+/73039 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Anastasia Klimchuk <aklm@chromium.org>
Diffstat (limited to 'print.c')
-rw-r--r--print.c10
1 files changed, 10 insertions, 0 deletions
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(" ");