Print this page
Address Robert's feedback

*** 209,233 **** 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; dmp->dm_buf = mdb_zalloc(reslen, UM_SLEEP); if (dmp->dm_buf == NULL) { 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); --- 209,233 ---- res = sysdemangle(name + prefixlen, dmp->dm_lang, &mdb_dem_demops); if (res == NULL && errno != EINVAL) mdb_warn("Error while demangling"); 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);