Print this page
Address Robert's feedback
@@ -209,25 +209,25 @@
res = sysdemangle(name + prefixlen, dmp->dm_lang, &mdb_dem_demops);
if (res == NULL && errno != EINVAL)
mdb_warn("Error while demangling");
- mdb_free(dmp->dm_buf, dmp->dm_len);
- dmp->dm_dem = NULL;
- dmp->dm_len = 0;
-
reslen = (res != NULL) ? strlen(res) : 0;
reslen += prefixlen;
reslen += 1;
+ if (reslen > dmp->dm_len) {
+ mdb_free(dmp->dm_buf, dmp->dm_len);
+
dmp->dm_buf = mdb_zalloc(reslen, UM_SLEEP);
if (dmp->dm_buf == NULL) {
+ dmp->dm_len = 0;
mdb_warn("Unable to allocate memory for demangling");
return (-1);
}
-
dmp->dm_len = reslen;
+ }
if (prefixlen > 0)
(void) strlcpy(dmp->dm_buf, name, prefixlen);
if (res != NULL)
(void) strlcat(dmp->dm_buf, res, dmp->dm_len);