diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 383cf299f9e..10ffe34e9ef 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,6 +1,9 @@
 2015-01-06  Nick Clifton  <nickc@redhat.com>
 
 	PR binutils/17512
+	* mach-o.c (bfd_mach_o_read_symtab_strtab): Zero terminate the
+	string table.
+
 	* reloc.c (bfd_get_reloc_size): Handle a reloc size of -1.
 	(bfd_perform_relocation): Include the size of the reloc in the
 	test for an out of range relocation.
diff --git a/bfd/mach-o.c b/bfd/mach-o.c
index 5dd6250f9d6..44b12b5047f 100644
--- a/bfd/mach-o.c
+++ b/bfd/mach-o.c
@@ -3675,7 +3675,7 @@ bfd_mach_o_read_symtab_strtab (bfd *abfd)
     }
   else
     {
-      sym->strtab = bfd_alloc (abfd, sym->strsize);
+      sym->strtab = bfd_alloc (abfd, sym->strsize + 1);
       if (sym->strtab == NULL)
         return FALSE;
 
@@ -3688,6 +3688,8 @@ bfd_mach_o_read_symtab_strtab (bfd *abfd)
           bfd_set_error (bfd_error_file_truncated);
           return FALSE;
         }
+      /* Zero terminate the string table.  */
+      sym->strtab[sym->strsize] = 0;
     }
 
   return TRUE;