From 5929b229b66c9dff2a3e6b1f6002b729a9baf3ab Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Thu, 20 Oct 2011 12:08:12 -0400 Subject: [PATCH] Fixed must-copy version of stringmap_insert(). Thanks to Sam Lantinga for pointing out the bug. --- mojoshader_common.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/mojoshader_common.c b/mojoshader_common.c index eac261e8..c9d82cb6 100644 --- a/mojoshader_common.c +++ b/mojoshader_common.c @@ -250,7 +250,17 @@ int stringmap_insert(StringMap *smap, const char *key, const char *value) int rc = -1; char *k = (char *) smap->m(strlen(key) + 1, smap->d); char *v = (char *) (value ? smap->m(strlen(value) + 1, smap->d) : NULL); - if ( (!k) || ((!v) && (value)) || ((rc = hash_insert(smap, k, v)) <= 0) ) + int failed = ( (!k) || ((!v) && (value)) ); + + if (!failed) + { + strcpy(k, key); + if (value != NULL) + strcpy(v, value); + failed = ((rc = hash_insert(smap, k, v)) <= 0); + } // if + + if (failed) { smap->f(k, smap->d); smap->f(v, smap->d);