Fix an illegal memory access when parsing a corrupt assembler file.

	PR 27355
	* dwarf2dbg.c (allocate_filename_to_slot): Allocate the dirs array
	if it has not already been created.
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 3d55c7f..83b2721 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,9 @@
+2021-02-08  Nick Clifton  <nickc@redhat.com>
+
+	PR 27355
+	* dwarf2dbg.c (allocate_filename_to_slot): Allocate the dirs array
+	if it has not already been created.
+
 2021-02-04  Nelson Chu  <nelson.chu@sifive.com>
 
 	* config/tc-riscv.c (riscv_multi_subset_supports): Removed
diff --git a/gas/dwarf2dbg.c b/gas/dwarf2dbg.c
index 4fbd1e3..f0cdc23 100644
--- a/gas/dwarf2dbg.c
+++ b/gas/dwarf2dbg.c
@@ -769,7 +769,7 @@
     {
       const char * dir = NULL;
 
-      if (dirs)
+      if (dirs != NULL)
 	dir = dirs[files[num].dir];
 
       if (with_md5
@@ -787,7 +787,15 @@
 	  /* If the filenames match, but the directory table entry was
 	     empty, then fill it with the provided directory name.  */
 	  if (dir == NULL)
-	    dirs[files[num].dir] = xmemdup0 (dirname, strlen (dirname));
+	    {
+	      if (dirs == NULL)
+		{
+		  dirs_allocated = files[num].dir + 32;
+		  dirs = XCNEWVEC (char *, dirs_allocated);
+		}
+	      
+	      dirs[files[num].dir] = xmemdup0 (dirname, strlen (dirname));
+	    }
 	    
 	  return TRUE;
 	}