diff options
author | Ken Raeburn <raeburn@mit.edu> | 2007-06-26 22:58:46 +0000 |
---|---|---|
committer | Ken Raeburn <raeburn@mit.edu> | 2007-06-26 22:58:46 +0000 |
commit | 8325d6530500cf44fd75d7ddac0a02edd1a26cb2 (patch) | |
tree | 423583c918c5932bedfeef9d84e432cddfb3b0b1 /src/appl | |
parent | f4cb46135ebba2207ed299980da0bf4c45223e11 (diff) | |
download | krb5-8325d6530500cf44fd75d7ddac0a02edd1a26cb2.zip krb5-8325d6530500cf44fd75d7ddac0a02edd1a26cb2.tar.gz krb5-8325d6530500cf44fd75d7ddac0a02edd1a26cb2.tar.bz2 |
* v4rcp.c (kstream_write): Allocate buffer space if it hasn't been
allocated, in the encrypting case, even if outlen is zero. While I
don't believe this can ever happen, it requires careful examination of
lots of code paths to figure it out. This change doesn't fix a
serious bug, but makes the analysis simple. Also, don't bother with
separate code paths for malloc vs realloc depending on the previous
values; we can just use realloc always.
Thanks to Domagoj Babic for pointing out the (false but
understandable) null-pointer problem.
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@19641 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/appl')
-rw-r--r-- | src/appl/bsd/v4rcp.c | 13 |
1 files changed, 4 insertions, 9 deletions
diff --git a/src/appl/bsd/v4rcp.c b/src/appl/bsd/v4rcp.c index 44938db..788c1f5 100644 --- a/src/appl/bsd/v4rcp.c +++ b/src/appl/bsd/v4rcp.c @@ -251,16 +251,11 @@ static int kstream_write(krem, buf, len) int st; unsigned int outlen = (len + 7) & (~7U); - if (krem->writelen < outlen) { - if (krem->writelen == 0) { - krem->inbuf = (char*)malloc(outlen); - krem->outbuf = (char*)malloc(outlen+8); - } else { - krem->inbuf = (char*)realloc(krem->inbuf, outlen); + if (krem->writelen < outlen || krem->outbuf == 0) { + krem->inbuf = (char*)realloc(krem->inbuf, outlen ? outlen : 1); krem->outbuf = (char*)realloc(krem->outbuf, outlen+8); - } - if(!krem->inbuf || !krem->outbuf) { errno = ENOMEM; return -1; } - krem->writelen = outlen; + if(!krem->inbuf || !krem->outbuf) { errno = ENOMEM; return -1; } + krem->writelen = outlen; } outlen = (len + 7) & (~7U); |