libdw: Reject DW_OP_implicit_value in CFI.
authorMark Wielaard <mark@klomp.org>
Sat, 27 Apr 2019 21:58:57 +0000 (23:58 +0200)
committerMark Wielaard <mark@klomp.org>
Sat, 27 Apr 2019 22:03:13 +0000 (00:03 +0200)
When we encounter a DW_OP_implicit_value we call store_implicit_value ()
which will try to store the value as part of the Dwarf dbg. But if we are
examining CFI there will be no Dwarf dbg. And DW_OP_implicit_value should
not be part of CFI. So explicitly reject it in store_implicit_value if
dbg is NULL.

Signed-off-by: Mark Wielaard <mark@klomp.org>
libdw/ChangeLog
libdw/dwarf_getlocation.c

index aaa6296..22fdab3 100644 (file)
@@ -1,3 +1,8 @@
+2019-04-27  Mark Wielaard  <mark@klomp.org>
+
+       * dwarf_getlocation.c (store_implicit_value): Check dbg isn't
+       NULL.
+
 2019-02-02  Mark Wielaard  <mark@klomp.org>
 
        * dwarf_nextcu.c (__libdw_next_unit): Define bytes_end.
index fc59a2a..ae3f511 100644 (file)
@@ -125,6 +125,8 @@ loc_compare (const void *p1, const void *p2)
 static int
 store_implicit_value (Dwarf *dbg, void **cache, Dwarf_Op *op)
 {
+  if (dbg == NULL)
+    return -1;
   struct loc_block_s *block = libdw_alloc (dbg, struct loc_block_s,
                                           sizeof (struct loc_block_s), 1);
   const unsigned char *data = (const unsigned char *) (uintptr_t) op->number2;