ini: Do not crash on incorrect property value
authorDodji Seketeli <dodji@redhat.com>
Wed, 26 Apr 2023 20:19:35 +0000 (22:19 +0200)
committerDodji Seketeli <dodji@redhat.com>
Wed, 26 Apr 2023 20:32:42 +0000 (22:32 +0200)
When the value of the 'name_regexp' property is incorrect, the ini
parser can crash.

Pancake, of Radare2 fame, reported this one by email.

Fixed thus.

* src/abg-ini.cc (read_context::read_property_value): Do not
dereference a null pointer to list property value.
* tests/data/test-ini/test02-buggy-property-value.abignore: New
test input.
* tests/data/test-ini/test02-buggy-property-value.abignore.expected:
Likewise.
* tests/data/Makefile.am: Add the two new test inputs to source
distribution.
* tests/test-ini.cc (in_out_spec): Add the new test input pair to
this test harness.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
src/abg-ini.cc
tests/data/Makefile.am
tests/data/test-ini/test02-buggy-property-value.abignore [new file with mode: 0644]
tests/data/test-ini/test02-buggy-property-value.abignore.expected [new file with mode: 0644]
tests/test-ini.cc

index db04196280083ae096889d6ab61e5297561ff971..830b3ab83d9c071ec01a8a09ecb6f62304407de3 100644 (file)
@@ -1353,7 +1353,7 @@ public:
       }
 
     list_property_value_sptr list = read_list_property_value();
-    if (list->get_content().size() == 1)
+    if (list && list->get_content().size() == 1)
       result.reset(new string_property_value(list->get_content()[0]));
     else
       result = list;
index 4c472697283d00b9d70407a1b3de5382826fb98d..ce791ad44fcd702166035a3377516bdb4d056d46 100644 (file)
@@ -2328,6 +2328,8 @@ test-fedabipkgdiff/nss-util/nss-util-3.24.0-2.0.fc25.x86_64.rpm \
 \
 test-ini/test01-equal-in-property-string.abignore.expected \
 test-ini/test01-equal-in-property-string.abignore \
+test-ini/test02-buggy-property-value.abignore \
+test-ini/test02-buggy-property-value.abignore.expected \
 \
 test-kmi-whitelist/whitelist-with-single-entry \
 test-kmi-whitelist/whitelist-with-another-single-entry \
diff --git a/tests/data/test-ini/test02-buggy-property-value.abignore b/tests/data/test-ini/test02-buggy-property-value.abignore
new file mode 100644 (file)
index 0000000..de1f1eb
--- /dev/null
@@ -0,0 +1,2 @@
+[suppress_function]
+  name_regexp = [
\ No newline at end of file
diff --git a/tests/data/test-ini/test02-buggy-property-value.abignore.expected b/tests/data/test-ini/test02-buggy-property-value.abignore.expected
new file mode 100644 (file)
index 0000000..e69de29
index 24968e8c6df9785899220da71aa4f76fd1670e69..9676acf29027ab826da96539126da52155c81593 100644 (file)
@@ -48,6 +48,12 @@ InOutSpec in_out_specs[] =
     "output/test-ini/test01-equal-in-property-string.abignore",
     ""
   }
+  {
+    "data/test-ini/test02-buggy-property-value.abignore",
+    "data/test-ini/test02-buggy-property-value.abignore.expected",
+    "output/test-ini/test02-buggy-property-value.abignore",
+    ""
+  }
   ,
   // This one must always remain the last one.
   {0, 0, 0, 0}