This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
fileno might return negative.
authorJarkko Hietaniemi <jhi@iki.fi>
Mon, 22 Jun 2015 11:25:27 +0000 (07:25 -0400)
committerJarkko Hietaniemi <jhi@iki.fi>
Sat, 27 Jun 2015 03:09:39 +0000 (23:09 -0400)
(Coverity CID 104853)

Also rewrite the fstat call to test for zero (success) explicitly,
instead of the sneaky bang-negation.

sv.c

diff --git a/sv.c b/sv.c
index 7896e18..b7fb41d 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -8306,7 +8306,8 @@ Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
           the size we read (e.g. CRLF or a gzip layer).
         */
        Stat_t st;
-       if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode))  {
+        int fd = PerlIO_fileno(fp);
+       if (fd >= 0 && (PerlLIO_fstat(fd, &st) == 0) && S_ISREG(st.st_mode))  {
            const Off_t offset = PerlIO_tell(fp);
            if (offset != (Off_t) -1 && st.st_size + append > offset) {
 #ifdef PERL_NEW_COPY_ON_WRITE