__wt_realloc with clear memory flag requires knowledge of old size

XMLWordPrintableJSON

    • Type: Bug
    • Resolution: Fixed
    • Priority: Major - P3
    • WT11.1.0, 6.2.0-rc0
    • Affects Version/s: None
    • Component/s: None

      When wt_realloc is called with bytes_allocated_ret set to NULL, then it assumes that the bytes previous allocated is 0.  But this value is used to determine how much memory to clear if the "clear_memory" flag is on.  The effect is that if we call:

      __wt_realloc(session, NULL, 10, &p);
      strncpy(p, "hello", 6);
      __wt_realloc(session, NULL, 20, &p);

      then the bytes stored at "p" will be cleared.  __wt_realloc is a macro that calls __wt_realloc_func with clear_memory set to true.

      Currently _wt_realloc is hardly used directly, most often it is called via _wt_realloc_def, which requires the previous size to be stored.

      We should probably raise an error if bytes_allocated is NULL and clear_memory is on as an unsupported combination: the caller should either use __wt_realloc_noclear or pass the current size.

      There are a couple spots that this should trigger, that will need to be fixed:

      src/cursor/cur_json.c:    WT_RET(__wt_realloc(session, NULL, needed + 1, json_bufp));
      src/cursor/cur_stat.c:    WT_RET(__wt_realloc(session, NULL, len, &cst->desc_buf)); 

      I think these are the only places that call __wt_realloc directly with a NULL second argument.

              Assignee:
              Monica Ng
              Reporter:
              Donald Anderson
              Ruby Chen
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

                Created:
                Updated:
                Resolved: