### Eclipse Workspace Patch 1.0 #P ZF-STD-TRUNK Index: library/Zend/Amf/Util/BinaryStream.php =================================================================== --- library/Zend/Amf/Util/BinaryStream.php (revision 20102) +++ library/Zend/Amf/Util/BinaryStream.php (working copy) @@ -70,8 +70,7 @@ $this->_stream = $stream; $this->_needle = 0; $this->_streamLength = strlen($stream); - $testEndian = unpack("C*", pack("S*", 256)); - $this->_bigEndian = 1; + $this->_bigEndian = (pack('l', 1) === "\x00\x00\x00\x01"); } /** @@ -94,12 +93,12 @@ */ public function readBytes($length) { - if (($length + $this->_needle) > strlen($this->_stream)) { + if (($length + $this->_needle) > $this->_streamLength) { require_once 'Zend/Amf/Exception.php'; - throw new Zend_Amf_Exception("Buffer underrun at needle position: " . $this->_needle . " while requesting length: " . $length); + throw new Zend_Amf_Exception('Buffer underrun at needle position: ' . $this->_needle . ' while requesting length: ' . $length); } $bytes = substr($this->_stream, $this->_needle, $length); - $this->_needle += $length; + $this->_needle+= $length; return $bytes; } @@ -113,7 +112,7 @@ */ public function writeBytes($bytes) { - $this->_stream .= $bytes; + $this->_stream.= $bytes; return $this; } @@ -124,8 +123,12 @@ */ public function readByte() { - $byte = ord($this->_stream[$this->_needle++]); - return $byte; + if (($this->_needle + 1) > $this->_streamLength) { + require_once 'Zend/Amf/Exception.php'; + throw new Zend_Amf_Exception('Buffer underrun at needle position: ' . $this->_needle . ' while requesting length: ' . $length); + } + + return ord($this->_stream{$this->_needle++}); } /** @@ -136,7 +139,7 @@ */ public function writeByte($stream) { - $this->_stream .= pack("c",$stream); + $this->_stream.= pack('c', $stream); return $this; } @@ -147,8 +150,7 @@ */ public function readInt() { - $int = ($this->readByte() << 8) + $this->readByte(); - return $int; + return ($this->readByte() << 8) + $this->readByte(); } /** @@ -159,7 +161,7 @@ */ public function writeInt($stream) { - $this->_stream .= pack("n", $stream); + $this->_stream.= pack("n", $stream); return $this; } @@ -183,7 +185,7 @@ public function writeUtf($stream) { $this->writeInt(strlen($stream)); - $this->_stream .= $stream; + $this->_stream.= $stream; return $this; } @@ -208,7 +210,7 @@ public function writeLongUtf($stream) { $this->writeLong(strlen($stream)); - $this->_stream .= $stream; + $this->_stream.= $stream; } /** @@ -218,8 +220,7 @@ */ public function readLong() { - $long = ($this->readByte() << 24) + ($this->readByte() << 16) + ($this->readByte() << 8) + $this->readByte(); - return $long; + return ($this->readByte() << 24) + ($this->readByte() << 16) + ($this->readByte() << 8) + $this->readByte(); } /** @@ -230,7 +231,7 @@ */ public function writeLong($stream) { - $this->_stream .= pack("N",$stream); + $this->_stream.= pack('N', $stream); return $this; } @@ -244,8 +245,7 @@ { $byte1 = $this->readByte(); $byte2 = $this->readByte(); - $short = (($byte1 << 8) | $byte2); - return $short; + return (($byte1 << 8) | $byte2); } /** @@ -255,9 +255,14 @@ */ public function readDouble() { - $bytes = substr($this->_stream, $this->_needle, 8); - $this->_needle += 8; - $double = unpack("dflt", strrev($bytes)); + $bytes = substr($this->_stream, $this->_needle, 8); + $this->_needle+= 8; + + if (!$this->_bigEndian) { + $bytes = strrev($bytes); + } + + $double = unpack('dflt', $bytes); return $double['flt']; } @@ -269,11 +274,12 @@ */ public function writeDouble($stream) { - $stream = pack("d", $stream); - if ($this->_bigEndian) { + $stream = pack('d', $stream); + if (!$this->_bigEndian) { $stream = strrev($stream); } - $this->_stream .= $stream; + $this->_stream.= $stream; return $this; } + }