diff --git a/libbacktrace/ChangeLog b/libbacktrace/ChangeLog
index e7fdfd8e9403a44a8eae79f25842577d6debbca8..8894446a75b953d85421685ba338080f47ddbb37 100644
--- a/libbacktrace/ChangeLog
+++ b/libbacktrace/ChangeLog
@@ -1,3 +1,8 @@
+2018-11-28  Tom de Vries  <tdevries@suse.de>
+
+	* dwarf.c (read_abbrevs): Fix handling of abbrevs->abbrevs allocation
+	failure.
+
 2018-11-27  Tom de Vries  <tdevries@suse.de>
 
 	* mmap.c (backtrace_vector_release): Same.
diff --git a/libbacktrace/dwarf.c b/libbacktrace/dwarf.c
index 4e93f120820448314b585493119ec9d1015c5885..34543747c8fa7cacdb3c5e035f34b5fa7be25106 100644
--- a/libbacktrace/dwarf.c
+++ b/libbacktrace/dwarf.c
@@ -1105,13 +1105,13 @@ read_abbrevs (struct backtrace_state *state, uint64_t abbrev_offset,
   if (num_abbrevs == 0)
     return 1;
 
-  abbrevs->num_abbrevs = num_abbrevs;
   abbrevs->abbrevs = ((struct abbrev *)
 		      backtrace_alloc (state,
 				       num_abbrevs * sizeof (struct abbrev),
 				       error_callback, data));
   if (abbrevs->abbrevs == NULL)
     return 0;
+  abbrevs->num_abbrevs = num_abbrevs;
   memset (abbrevs->abbrevs, 0, num_abbrevs * sizeof (struct abbrev));
 
   num_abbrevs = 0;