Security Advisories (3)
CVE-2007-4769 (2008-01-09)

The regular expression parser in TCL before 8.4.17, as used in PostgreSQL 8.2 before 8.2.6, 8.1 before 8.1.11, 8.0 before 8.0.15, and 7.4 before 7.4.19, allows remote authenticated users to cause a denial of service (backend crash) via an out-of-bounds backref number.

CVE-2018-25032 (2022-03-25)

zlib before 1.2.12 allows memory corruption when deflating (i.e., when compressing) if the input has many distant matches.

CVE-2011-3045 (2012-03-22)

Integer signedness error in the png_inflate function in pngrutil.c in libpng before 1.4.10beta01, as used in Google Chrome before 17.0.963.83 and other products, allows remote attackers to cause a denial of service (application crash) or possibly execute arbitrary code via a crafted PNG file, a different vulnerability than CVE-2011-3026.

NAME

Tk::Event - ToolKit for Events

SYNOPSIS

use Tk::Event;

Tk::Event->fileevent(\*FH, 'readable' => callback);

Tk::Event->lineavail(\*FH, callback);

use Tk::Event::Signal qw(INT);

$SIG{'INT'} = callback;

use Tk::Event::process;

Tk::Event->proc($pid, callback);

QueueEvent(callback [, position])

DESCRIPTION

That is better than nothing but still hard to use. Most scripts want higher level result (a line, a "block" of data etc.)

So it has occured to me that we could use new-ish TIEHANDLE thus:

my $obj = tie SOMEHANDLE,Tk::Event::IO;

while (<SOMEHANDLE>)
 {
 }

Then the READLINE routine registers a callback and looks something like:

sub READLINE
 {
  my $obj = shift;
  Event->io(*$obj,'readable',sub { sysread(*$obj,${*$obj},1,length(${*$obj}) });
  my $pos;
  while (($pos = index(${*$obj},$/) < 0)
   {
    DoOneEvent();
   }
  Event->io(*$obj,'readable',''); # unregister
  $pos += length($/);
  my $result = substr(${*$obj},0,$pos);
  substr(${*$obj},0,$pos) = '';
  return $result;
 }

This is using the scalar part of the glob representing the _inner_ IO as a buffer in which to accumulate chars.