summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Kerr <jk@ozlabs.org>2013-12-10 08:54:17 +0800
committerJeremy Kerr <jk@ozlabs.org>2013-12-10 09:03:43 +0800
commit32e2eac76dcdc7b54454c9f3731496f8947cdbbc (patch)
tree000d05f7e139fde7a39d1a59781878ab8e601d32
parent6c40be15d13765c004e3568cd50b543e1fb74648 (diff)
downloadtalos-petitboot-32e2eac76dcdc7b54454c9f3731496f8947cdbbc.zip
talos-petitboot-32e2eac76dcdc7b54454c9f3731496f8947cdbbc.tar.gz
discover/yaboot: Fix assertion failure on empty yaboot files
yaboot configuration files with no option will cause an assertion failure (or segfault), as we unconditionally call yaboot_finish(). Check for the presence of an option in yaboot_finish() instead of asserting. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
-rw-r--r--discover/yaboot-parser.c3
-rw-r--r--test/parser/Makefile.am1
-rw-r--r--test/parser/test-yaboot-empty.c12
3 files changed, 15 insertions, 1 deletions
diff --git a/discover/yaboot-parser.c b/discover/yaboot-parser.c
index e52187f..f16ac72 100644
--- a/discover/yaboot-parser.c
+++ b/discover/yaboot-parser.c
@@ -102,7 +102,8 @@ static void yaboot_finish(struct conf_context *conf)
const char *default_label;
struct boot_option *opt;
- assert(state->opt);
+ if (!state->opt)
+ return;
opt = state->opt->option;
assert(opt);
diff --git a/test/parser/Makefile.am b/test/parser/Makefile.am
index 46f87ce..abc95bb 100644
--- a/test/parser/Makefile.am
+++ b/test/parser/Makefile.am
@@ -42,6 +42,7 @@ TESTS = \
test-grub2-lexer-error \
test-grub2-parser-error \
test-kboot-single \
+ test-yaboot-empty \
test-yaboot-single \
test-yaboot-partition \
test-yaboot-partition-override \
diff --git a/test/parser/test-yaboot-empty.c b/test/parser/test-yaboot-empty.c
new file mode 100644
index 0000000..00d08ad
--- /dev/null
+++ b/test/parser/test-yaboot-empty.c
@@ -0,0 +1,12 @@
+#include "parser-test.h"
+
+static const char empty[] = "";
+
+void run_test(struct parser_test *test)
+{
+ test_read_conf_data(test, "/etc/yaboot.conf", empty);
+
+ test_run_parser(test, "yaboot");
+
+ check_boot_option_count(test->ctx, 0);
+}
OpenPOWER on IntegriCloud