Bug#1016369: IO::Handle ->error does not work, always saying "fine"

Niko Tyni ntyni at debian.org
Sun Aug 7 19:01:03 BST 2022


On Sat, Aug 06, 2022 at 08:44:18PM +0100, Ian Jackson wrote:

> > The second issue (writing to /dev/full) is indeed fixed in sid / Perl
> > 5.34.  It was https://github.com/Perl/perl5/issues/6799 and reportedly
> > only affects things like character devices (including /dev/full) and
> > sockets. I've verified that trying to write to a normal file on a full
> > filesystem does set the error() flag on stable / Perl 5.32.
> 
> I wonder what is different about plain files.  I suspect the fact that
> it "works" (correctly returning errors) for you in this case may be
> due to luck (the precise series of calls).

You might want to read the bug then, particularly Tony Cook's comment at

  https://github.com/Perl/perl5/issues/6799#issuecomment-626511037

Quoting:

    Perl's I/O objects (that is the IO SV , not PerlIO) can have both an
    input (PerlIO) file handle and an output file handle. For files that
    output handle is the same as the input handle [...] For a character
    device (like /dev/full) or a socket, perl creates a second PerlIO
    object on the same fd to use as the output handle, and that causes
    the behaviour this ticket documents.

So I don't think luck has anything to do with it.

> > Downgrading the severity, but let me know what you think based on the above.
> 
> I still think this is a data loss bug.  (Two bugs.)

I think it's at most one but whatever.

I've just reported https://github.com/Perl/perl5/issues/20060 about the
read errors. You might want to do your convincing there if needed :)
Obviously it's not going to be fixed on Debian side without upstream
involvement, whatever the severity.

> >     while ( ! eof($fh) ) {
> >         defined( $_ = readline $fh ) or die "readline failed: $!";
> >         ...
> >     }
> 
> I don't find this particularly convincing.  This argument seems to be
> saying "never use <> to read lines" which is pretty strange.  Surely
> it should be possible to use "<>" in its line-reading mode, without
> data loss.

Yeah, I agree.
-- 
Niko




More information about the Perl-maintainers mailing list