From ed3655c4c7f9692340f7b54054d35f24a0cc3f68 Mon Sep 17 00:00:00 2001 From: Tom N Harris <tnharris@whoopdedo.org> Date: Fri, 16 Jan 2009 01:15:47 +0100 Subject: [PATCH] Avoid zero-byte reads darcs-hash:20090116001547-6942e-b5bc401c0ef4c36b1b7b8ca7ef708587953ec017.gz --- inc/HTTPClient.php | 8 +++++--- inc/JpegMeta.php | 9 ++++++--- inc/changelog.php | 4 ++-- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/inc/HTTPClient.php b/inc/HTTPClient.php index 2385b1edd..71844b847 100644 --- a/inc/HTTPClient.php +++ b/inc/HTTPClient.php @@ -333,9 +333,11 @@ class HTTPClient { $byte = fread($socket,1); // readtrailing \n $chunk_size = hexdec($chunk_size); - $this_chunk = fread($socket,$chunk_size); - $r_body .= $this_chunk; - if ($chunk_size) $byte = fread($socket,2); // read trailing \r\n + if ($chunk_size) { + $this_chunk = fread($socket,$chunk_size); + $r_body .= $this_chunk; + $byte = fread($socket,2); // read trailing \r\n + } if($this->max_bodysize && strlen($r_body) > $this->max_bodysize){ $this->error = 'Allowed response size exceeded'; diff --git a/inc/JpegMeta.php b/inc/JpegMeta.php index 41e6e0803..cb1d7d694 100644 --- a/inc/JpegMeta.php +++ b/inc/JpegMeta.php @@ -995,7 +995,10 @@ class JpegMeta $this->_markers[$count]['length'] = $length; if ($capture) { - $this->_markers[$count]['data'] =& fread($this->_fp, $length); + if ($length) + $this->_markers[$count]['data'] =& fread($this->_fp, $length); + else + $this->_markers[$count]['data'] = ""; } elseif (!$done) { $result = @fseek($this->_fp, $length, SEEK_CUR); @@ -1213,12 +1216,12 @@ class JpegMeta else { if ($marker == 0xDA) { // Copy until EOF while (!feof($this->_fp)) { - $data =& fread($this->_fp, 1024 * 16); + $data = fread($this->_fp, 1024 * 16); fputs($this->_fpout, $data, strlen($data)); } } else { // Copy only $length bytes - $data =& fread($this->_fp, $length); + $data = @fread($this->_fp, $length); fputs($this->_fpout, $data, $length); } } diff --git a/inc/changelog.php b/inc/changelog.php index def785f43..f60b487db 100644 --- a/inc/changelog.php +++ b/inc/changelog.php @@ -250,7 +250,7 @@ function getRevisionInfo($id, $rev, $chunk_size=8192) { $got = 0; fseek($fp, $head); while ($got<$chunk_size && !feof($fp)) { - $tmp = fread($fp, max($chunk_size-$got, 0)); + $tmp = @fread($fp, max($chunk_size-$got, 0)); if ($tmp===false) { break; } //error state $got += strlen($tmp); $chunk .= $tmp; @@ -335,7 +335,7 @@ function getRevisions($id, $first, $num, $chunk_size=8192) { $read_size = max($tail-$finger, 0); // found chunk size $got = 0; while ($got<$read_size && !feof($fp)) { - $tmp = fread($fp, max($read_size-$got, 0)); + $tmp = @fread($fp, max($read_size-$got, 0)); if ($tmp===false) { break; } //error state $got += strlen($tmp); $chunk .= $tmp; -- GitLab