fmaptool: Make sure strings are not destroyed on hdestroy()
On Mac OS X hdestroy seems to overwrite node->name. Hence duplicate the string before stuffing it into the hash search table. Change-Id: Ieac2025f5c960cdb8d509dde7e92ba0dd32644b0 Signed-off-by: Stefan Reinauer <stefan.reinauer@coreboot.org> Reviewed-on: https://review.coreboot.org/14443 Tested-by: build bot (Jenkins) Reviewed-by: Idwer Vollering <vidwer@gmail.com> Reviewed-by: Patrick Georgi <pgeorgi@google.com>
This commit is contained in:
parent
c6400e974e
commit
477a0d69e5
|
@ -48,10 +48,23 @@
|
||||||
* @return Whether the node is valid
|
* @return Whether the node is valid
|
||||||
*/
|
*/
|
||||||
static bool validate_descriptor_node(const struct flashmap_descriptor *node,
|
static bool validate_descriptor_node(const struct flashmap_descriptor *node,
|
||||||
struct unsigned_option start, struct unsigned_option end) {
|
struct unsigned_option start, struct unsigned_option end)
|
||||||
|
{
|
||||||
assert(node);
|
assert(node);
|
||||||
|
|
||||||
|
#if __GLIBC__
|
||||||
|
/* GLIBC is different than the BSD libc implementations:
|
||||||
|
* The hdestroy() [function does] not free the buffers pointed
|
||||||
|
* to by the key and data elements of the hash table entries.
|
||||||
|
* vs:
|
||||||
|
* The hdestroy() function calls free(3) for each comparison key in
|
||||||
|
* the search table but not the data item associated with the key.
|
||||||
|
*/
|
||||||
ENTRY search_key = {node->name, NULL};
|
ENTRY search_key = {node->name, NULL};
|
||||||
|
#else
|
||||||
|
ENTRY search_key = {strdup(node->name), NULL};
|
||||||
|
#endif
|
||||||
|
|
||||||
if (hsearch(search_key, FIND)) {
|
if (hsearch(search_key, FIND)) {
|
||||||
ERROR("Multiple sections with name '%s'\n", node->name);
|
ERROR("Multiple sections with name '%s'\n", node->name);
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Reference in New Issue