Cyrus reviews
Ken Murchison
murch at andrew.cmu.edu
Tue Jan 24 09:40:10 EST 2012
Ken Murchison wrote:
> Greg Banks wrote:
>> This code
>>
>> + newdest = buf_release(&buf);
>>
>> will leak the string, as newdest is never free()d (and indeed in some
>> other branches
>> of the logic, cannot be). A better solution would be
>>
>> const char *newdest = NULL;
>> ...
>> newdest = buf_cstring(&buf);
>> ...
>> buf_free(&buf);
>> }
>
> I thought the same thing when I looked as what was already in master
> when I began my forward port:
>
> replyto = buf_release(&buf);
> if (body) {
> /* replace the existing header */
> spool_replace_header(xstrdup("Reply-To"), replyto,
> m->hdrcache);
> } else {
> /* add the new header to the cache */
> spool_cache_header(xstrdup("Reply-To"), replyto,
> m->hdrcache);
> }
> } else {
> /* no newspostuser, use original replyto */
> replyto = (char *) body[0];
> }
>
> Was this also incorrect?
Actually, looking at your changes to spool.c (using strarray_t) and
nntpd.c (using struct buf), I think that we DO want to use buf_release()
because spool_cache_header() and spool_replace_header() both use
strarray_appendm() to assign the existing pointer into the strarray
(rather than making a copy) which is later free'd with strrarray_free()
via spool_free_hdrcache().
Am I missing something?
--
Kenneth Murchison
Principal Systems Software Engineer
Carnegie Mellon University
More information about the Cyrus-devel
mailing list