diff options
author | Paul Yang <TeBoring@users.noreply.github.com> | 2017-02-07 21:33:28 -0800 |
---|---|---|
committer | Paul Yang <TeBoring@users.noreply.github.com> | 2017-03-15 14:16:49 -0700 |
commit | f23869c6154d8b083ee3417fac277bc25e13a4ac (patch) | |
tree | 2e9ea1cfcc88211ac1e364155d696c808acb11ba /php/src/Google/Protobuf/Internal/OutputStream.php | |
parent | 014a5507fb4b1ccc12f35ff313b8a04c05d69b7f (diff) | |
download | protobuf-f23869c6154d8b083ee3417fac277bc25e13a4ac.tar.gz protobuf-f23869c6154d8b083ee3417fac277bc25e13a4ac.tar.bz2 protobuf-f23869c6154d8b083ee3417fac277bc25e13a4ac.zip |
Bug fix: When encoding, negative int32 values should be padded to int64 (#2660)
in order to be wire compatible.
Diffstat (limited to 'php/src/Google/Protobuf/Internal/OutputStream.php')
-rw-r--r-- | php/src/Google/Protobuf/Internal/OutputStream.php | 15 |
1 files changed, 5 insertions, 10 deletions
diff --git a/php/src/Google/Protobuf/Internal/OutputStream.php b/php/src/Google/Protobuf/Internal/OutputStream.php index 587ac352..8c6d9b68 100644 --- a/php/src/Google/Protobuf/Internal/OutputStream.php +++ b/php/src/Google/Protobuf/Internal/OutputStream.php @@ -39,7 +39,6 @@ class OutputStream private $buffer_size; private $current; - const MAX_VARINT32_BYTES = 5; const MAX_VARINT64_BYTES = 10; public function __construct($size) @@ -56,8 +55,8 @@ class OutputStream public function writeVarint32($value) { - $bytes = str_repeat(chr(0), self::MAX_VARINT32_BYTES); - $size = self::writeVarintToArray($value, $bytes, true); + $bytes = str_repeat(chr(0), self::MAX_VARINT64_BYTES); + $size = self::writeVarintToArray($value, $bytes); return $this->writeRaw($bytes, $size); } @@ -102,20 +101,16 @@ class OutputStream return true; } - private static function writeVarintToArray($value, &$buffer, $trim = false) + private static function writeVarintToArray($value, &$buffer) { $current = 0; $high = 0; $low = 0; if (PHP_INT_SIZE == 4) { - GPBUtil::divideInt64ToInt32($value, $high, $low, $trim); + GPBUtil::divideInt64ToInt32($value, $high, $low); } else { - if ($trim) { - $low = $value & 0xFFFFFFFF; - } else { - $low = $value; - } + $low = $value; } while ($low >= 0x80 || $low < 0) { |