PR 15657
authorNick Clifton <nickc@redhat.com>
Mon, 24 Jun 2013 14:28:17 +0000 (14:28 +0000)
committerNick Clifton <nickc@redhat.com>
Mon, 24 Jun 2013 14:28:17 +0000 (14:28 +0000)
* hash.c (_bfd_stringtab_add): Copy the string if COPY is true.

bfd/ChangeLog
bfd/hash.c

index f80ccefdc5f99891bc591188becdaa36f2d0a3b7..19c4c5fc053cb227c39e3c6d03c0e86f56369a2e 100644 (file)
@@ -1,3 +1,8 @@
+2013-06-24  Wawa  <caojinyu@msn.com>
+
+       PR 15657
+       * hash.c (_bfd_stringtab_add): Copy the string if COPY is true.
+
 2013-06-23  Richard Sandiford  <rdsandiford@googlemail.com>
 
        * Makefile.am (BFD32_BACKENDS, BFD32_BACKENDS_CFILES): Move MIPS ELF
index f2dce4cd18df2a5869239789b6dbaa636ebb4905..82e711aff5bacc1b4d3b860aa9a7efc61c8da351 100644 (file)
@@ -808,7 +808,8 @@ _bfd_stringtab_free (struct bfd_strtab_hash *table)
 
 /* Get the index of a string in a strtab, adding it if it is not
    already present.  If HASH is FALSE, we don't really use the hash
-   table, and we don't eliminate duplicate strings.  */
+   table, and we don't eliminate duplicate strings.  If COPY is true
+   then store a copy of STR if creating a new entry.  */
 
 bfd_size_type
 _bfd_stringtab_add (struct bfd_strtab_hash *tab,
@@ -834,11 +835,13 @@ _bfd_stringtab_add (struct bfd_strtab_hash *tab,
        entry->root.string = str;
       else
        {
+         size_t len = strlen (str) + 1;
          char *n;
 
-         n = (char *) bfd_hash_allocate (&tab->table, strlen (str) + 1);
+         n = (char *) bfd_hash_allocate (&tab->table, len);
          if (n == NULL)
            return (bfd_size_type) -1;
+          memcpy (n, str, len);
          entry->root.string = n;
        }
       entry->index = (bfd_size_type) -1;