Print this page
Address Robert's feedback

Split Close
Expand all
Collapse all
          --- old/usr/src/cmd/mdb/common/mdb/mdb_demangle.c
          +++ new/usr/src/cmd/mdb/common/mdb/mdb_demangle.c
↓ open down ↓ 203 lines elided ↑ open up ↑
 204  204  
 205  205          if (prefix) {
 206  206                  prefix++;               /* the ` is part of the prefix */
 207  207                  prefixlen = prefix - name;
 208  208          }
 209  209  
 210  210          res = sysdemangle(name + prefixlen, dmp->dm_lang, &mdb_dem_demops);
 211  211          if (res == NULL && errno != EINVAL)
 212  212                  mdb_warn("Error while demangling");
 213  213  
 214      -        mdb_free(dmp->dm_buf, dmp->dm_len);
 215      -        dmp->dm_dem = NULL;
 216      -        dmp->dm_len = 0;
 217      -
 218  214          reslen = (res != NULL) ? strlen(res) : 0;
 219  215          reslen += prefixlen;
 220  216          reslen += 1;
 221  217  
 222      -        dmp->dm_buf = mdb_zalloc(reslen, UM_SLEEP);
 223      -        if (dmp->dm_buf == NULL) {
 224      -                mdb_warn("Unable to allocate memory for demangling");
 225      -                return (-1);
      218 +        if (reslen > dmp->dm_len) {
      219 +                mdb_free(dmp->dm_buf, dmp->dm_len);
      220 +
      221 +                dmp->dm_buf = mdb_zalloc(reslen, UM_SLEEP);
      222 +                if (dmp->dm_buf == NULL) {
      223 +                        dmp->dm_len = 0;
      224 +                        mdb_warn("Unable to allocate memory for demangling");
      225 +                        return (-1);
      226 +                }
      227 +                dmp->dm_len = reslen;
 226  228          }
 227  229  
 228      -        dmp->dm_len = reslen;
 229      -
 230  230          if (prefixlen > 0)
 231  231                  (void) strlcpy(dmp->dm_buf, name, prefixlen);
 232  232          if (res != NULL)
 233  233                  (void) strlcat(dmp->dm_buf, res, dmp->dm_len);
 234  234  
 235  235          /*
 236  236           * Save the position of the demangled string for mdb_dem_filter()
 237  237           */
 238  238          dmp->dm_dem = dmp->dm_buf + prefixlen;
 239  239  
↓ open down ↓ 93 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX