diff options
author | Nicholas Clark <nick@ccl4.org> | 2006-04-30 23:08:17 +0000 |
---|---|---|
committer | Nicholas Clark <nick@ccl4.org> | 2006-04-30 23:08:17 +0000 |
commit | 4b0c4b6fb611d776b6e7507f70c235f361e01815 (patch) | |
tree | 45fa63c8de31e3bf3b7473505a39a556c2908b2b | |
parent | 15b8f96d46c4164722f0c24dfb7e92d280880305 (diff) | |
download | perl-4b0c4b6fb611d776b6e7507f70c235f361e01815.tar.gz |
Fix two errors found by Coverity.
p4raw-id: //depot/perl@28034
-rw-r--r-- | pp_sys.c | 19 |
1 files changed, 14 insertions, 5 deletions
@@ -1885,18 +1885,24 @@ PP(pp_send) #else length = (Size_t)SvIVx(*++MARK); #endif - if ((SSize_t)length < 0) + if ((SSize_t)length < 0) { + Safefree(tmpbuf); DIE(aTHX_ "Negative length"); + } } if (MARK < SP) { offset = SvIVx(*++MARK); if (offset < 0) { - if (-offset > (IV)blen_chars) + if (-offset > (IV)blen_chars) { + Safefree(tmpbuf); DIE(aTHX_ "Offset outside string"); + } offset += blen_chars; - } else if (offset >= (IV)blen_chars && blen_chars > 0) + } else if (offset >= (IV)blen_chars && blen_chars > 0) { + Safefree(tmpbuf); DIE(aTHX_ "Offset outside string"); + } } else offset = 0; if (length > blen_chars - offset) @@ -1959,14 +1965,15 @@ PP(pp_send) else DIE(aTHX_ PL_no_sock_func, "send"); #endif - if (tmpbuf) - Safefree(tmpbuf); if (retval < 0) goto say_undef; SP = ORIGMARK; if (doing_utf8) retval = utf8_length((U8*)buffer, (U8*)buffer + retval); + + if (tmpbuf) + Safefree(tmpbuf); #if Size_t_size > IVSIZE PUSHn(retval); #else @@ -1975,6 +1982,8 @@ PP(pp_send) RETURN; say_undef: + if (tmpbuf) + Safefree(tmpbuf); SP = ORIGMARK; RETPUSHUNDEF; } |