From: Chip Salzenberg Date: Tue, 4 Feb 1997 16:37:26 +0000 (+1200) Subject: Fix core dump on IO::Seekable::setpos($fh, undef) X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=fefb19804f3b755117d0936d5a943a08ec9f6cab;p=p5sagit%2Fp5-mst-13.2.git Fix core dump on IO::Seekable::setpos($fh, undef) --- diff --git a/ext/IO/IO.xs b/ext/IO/IO.xs index 5efbf24..2eb16f4 100644 --- a/ext/IO/IO.xs +++ b/ext/IO/IO.xs @@ -106,11 +106,12 @@ fsetpos(handle, pos) InputStream handle SV * pos CODE: - if (handle) + char *p; + if (handle && (p = SvPVx(pos, na)) && na == sizeof(Fpos_t)) #ifdef PerlIO - RETVAL = PerlIO_setpos(handle, (Fpos_t*)SvPVX(pos)); + RETVAL = PerlIO_setpos(handle, (Fpos_t*)p); #else - RETVAL = fsetpos(handle, (Fpos_t*)SvPVX(pos)); + RETVAL = fsetpos(handle, (Fpos_t*)p); #endif else { RETVAL = -1; diff --git a/t/lib/io_xs.t b/t/lib/io_xs.t index 3426ebe..1a6fd38 100755 --- a/t/lib/io_xs.t +++ b/t/lib/io_xs.t @@ -21,10 +21,22 @@ BEGIN { use IO::File; use IO::Seekable; -print "1..2\n"; -use IO::File; +print "1..4\n"; + $x = new_tmpfile IO::File or print "not "; print "ok 1\n"; print $x "ok 2\n"; $x->seek(0,SEEK_SET); print <$x>; + +$x->seek(0,SEEK_SET); +print $x "not ok 3\n"; +$p = $x->getpos; +print $x "ok 3\n"; +$x->flush; +$x->setpos($p); +print scalar <$x>; + +$! = 0; +$x->setpos(undef); +print $! ? "ok 4 # $!\n" : "not ok 4\n";