On Wednesday, April 27, 2011 17:40:11 E R wrote:
> What's the proper way to read in the posted content from a request?
> 
> Using this Google code search:
> 
> http://www.google.com/codesearch?q=lang%3Aperl+%5C%24r-%3Eread.*length
> &hl=en
> 
> I see instances of:
> 
>   $r->read($line, $r->headers_in->get('Content-length'));
> 
> and also loops like:
> 
>     while ( $r->read( $buffer, $content_length ) ) {
>         $content .= $buffer;
>     }
> 
> What's the best/proper way to slurp in all of the POST content?

At first, there is a bug in $r->read in 2.0.4 that prevents loops like

  my $buf='';
  1 while $r->read($buf, CHUNK_SIZE, length $buf);

In general I'd recommend to read up to the end of the stream. Apache 
knows when it is reached. Relying on the Content-Length input header only 
is bad because the request may not contain that field.

Also, think twice before implementing something similar unless you have a 
really controlled environment. It is quite simple for an attacker to send 
an infinite stream of data.

Torsten Förtsch

-- 
Need professional modperl support? Hire me! (http://foertsch.name)

Like fantasy? http://kabatinte.net

Reply via email to