|
@@ -224,48 +224,57 @@ class Message
|
|
switch ($field->getType()) {
|
|
switch ($field->getType()) {
|
|
case GPBType::DOUBLE:
|
|
case GPBType::DOUBLE:
|
|
if (!GPBWire::readDouble($input, $value)) {
|
|
if (!GPBWire::readDouble($input, $value)) {
|
|
- return false;
|
|
|
|
|
|
+ throw new GPBDecodeException(
|
|
|
|
+ "Unexpected EOF inside double field.");
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
case GPBType::FLOAT:
|
|
case GPBType::FLOAT:
|
|
if (!GPBWire::readFloat($input, $value)) {
|
|
if (!GPBWire::readFloat($input, $value)) {
|
|
- return false;
|
|
|
|
|
|
+ throw new GPBDecodeException(
|
|
|
|
+ "Unexpected EOF inside float field.");
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
case GPBType::INT64:
|
|
case GPBType::INT64:
|
|
if (!GPBWire::readInt64($input, $value)) {
|
|
if (!GPBWire::readInt64($input, $value)) {
|
|
- return false;
|
|
|
|
|
|
+ throw new GPBDecodeException(
|
|
|
|
+ "Unexpected EOF inside int64 field.");
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
case GPBType::UINT64:
|
|
case GPBType::UINT64:
|
|
if (!GPBWire::readUint64($input, $value)) {
|
|
if (!GPBWire::readUint64($input, $value)) {
|
|
- return false;
|
|
|
|
|
|
+ throw new GPBDecodeException(
|
|
|
|
+ "Unexpected EOF inside uint64 field.");
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
case GPBType::INT32:
|
|
case GPBType::INT32:
|
|
if (!GPBWire::readInt32($input, $value)) {
|
|
if (!GPBWire::readInt32($input, $value)) {
|
|
- return false;
|
|
|
|
|
|
+ throw new GPBDecodeException(
|
|
|
|
+ "Unexpected EOF inside int32 field.");
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
case GPBType::FIXED64:
|
|
case GPBType::FIXED64:
|
|
if (!GPBWire::readFixed64($input, $value)) {
|
|
if (!GPBWire::readFixed64($input, $value)) {
|
|
- return false;
|
|
|
|
|
|
+ throw new GPBDecodeException(
|
|
|
|
+ "Unexpected EOF inside fixed64 field.");
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
case GPBType::FIXED32:
|
|
case GPBType::FIXED32:
|
|
if (!GPBWire::readFixed32($input, $value)) {
|
|
if (!GPBWire::readFixed32($input, $value)) {
|
|
- return false;
|
|
|
|
|
|
+ throw new GPBDecodeException(
|
|
|
|
+ "Unexpected EOF inside fixed32 field.");
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
case GPBType::BOOL:
|
|
case GPBType::BOOL:
|
|
if (!GPBWire::readBool($input, $value)) {
|
|
if (!GPBWire::readBool($input, $value)) {
|
|
- return false;
|
|
|
|
|
|
+ throw new GPBDecodeException(
|
|
|
|
+ "Unexpected EOF inside bool field.");
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
case GPBType::STRING:
|
|
case GPBType::STRING:
|
|
// TODO(teboring): Add utf-8 check.
|
|
// TODO(teboring): Add utf-8 check.
|
|
if (!GPBWire::readString($input, $value)) {
|
|
if (!GPBWire::readString($input, $value)) {
|
|
- return false;
|
|
|
|
|
|
+ throw new GPBDecodeException(
|
|
|
|
+ "Unexpected EOF inside string field.");
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
case GPBType::GROUP:
|
|
case GPBType::GROUP:
|
|
@@ -280,43 +289,51 @@ class Message
|
|
$value = new $klass;
|
|
$value = new $klass;
|
|
}
|
|
}
|
|
if (!GPBWire::readMessage($input, $value)) {
|
|
if (!GPBWire::readMessage($input, $value)) {
|
|
- return false;
|
|
|
|
|
|
+ throw new GPBDecodeException(
|
|
|
|
+ "Unexpected EOF inside message.");
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
case GPBType::BYTES:
|
|
case GPBType::BYTES:
|
|
if (!GPBWire::readString($input, $value)) {
|
|
if (!GPBWire::readString($input, $value)) {
|
|
- return false;
|
|
|
|
|
|
+ throw new GPBDecodeException(
|
|
|
|
+ "Unexpected EOF inside bytes field.");
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
case GPBType::UINT32:
|
|
case GPBType::UINT32:
|
|
if (!GPBWire::readUint32($input, $value)) {
|
|
if (!GPBWire::readUint32($input, $value)) {
|
|
- return false;
|
|
|
|
|
|
+ throw new GPBDecodeException(
|
|
|
|
+ "Unexpected EOF inside uint32 field.");
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
case GPBType::ENUM:
|
|
case GPBType::ENUM:
|
|
// TODO(teboring): Check unknown enum value.
|
|
// TODO(teboring): Check unknown enum value.
|
|
if (!GPBWire::readInt32($input, $value)) {
|
|
if (!GPBWire::readInt32($input, $value)) {
|
|
- return false;
|
|
|
|
|
|
+ throw new GPBDecodeException(
|
|
|
|
+ "Unexpected EOF inside enum field.");
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
case GPBType::SFIXED32:
|
|
case GPBType::SFIXED32:
|
|
if (!GPBWire::readSfixed32($input, $value)) {
|
|
if (!GPBWire::readSfixed32($input, $value)) {
|
|
- return false;
|
|
|
|
|
|
+ throw new GPBDecodeException(
|
|
|
|
+ "Unexpected EOF inside sfixed32 field.");
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
case GPBType::SFIXED64:
|
|
case GPBType::SFIXED64:
|
|
if (!GPBWire::readSfixed64($input, $value)) {
|
|
if (!GPBWire::readSfixed64($input, $value)) {
|
|
- return false;
|
|
|
|
|
|
+ throw new GPBDecodeException(
|
|
|
|
+ "Unexpected EOF inside sfixed64 field.");
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
case GPBType::SINT32:
|
|
case GPBType::SINT32:
|
|
if (!GPBWire::readSint32($input, $value)) {
|
|
if (!GPBWire::readSint32($input, $value)) {
|
|
- return false;
|
|
|
|
|
|
+ throw new GPBDecodeException(
|
|
|
|
+ "Unexpected EOF inside sint32 field.");
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
case GPBType::SINT64:
|
|
case GPBType::SINT64:
|
|
if (!GPBWire::readSint64($input, $value)) {
|
|
if (!GPBWire::readSint64($input, $value)) {
|
|
- return false;
|
|
|
|
|
|
+ throw new GPBDecodeException(
|
|
|
|
+ "Unexpected EOF inside sint64 field.");
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
@@ -345,24 +362,21 @@ class Message
|
|
}
|
|
}
|
|
|
|
|
|
if ($value_format === GPBWire::NORMAL_FORMAT) {
|
|
if ($value_format === GPBWire::NORMAL_FORMAT) {
|
|
- if (!self::parseFieldFromStreamNoTag($input, $field, $value)) {
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
|
|
+ self::parseFieldFromStreamNoTag($input, $field, $value);
|
|
} elseif ($value_format === GPBWire::PACKED_FORMAT) {
|
|
} elseif ($value_format === GPBWire::PACKED_FORMAT) {
|
|
$length = 0;
|
|
$length = 0;
|
|
if (!GPBWire::readInt32($input, $length)) {
|
|
if (!GPBWire::readInt32($input, $length)) {
|
|
- return false;
|
|
|
|
|
|
+ throw new GPBDecodeException(
|
|
|
|
+ "Unexpected EOF inside packed length.");
|
|
}
|
|
}
|
|
$limit = $input->pushLimit($length);
|
|
$limit = $input->pushLimit($length);
|
|
$getter = $field->getGetter();
|
|
$getter = $field->getGetter();
|
|
while ($input->bytesUntilLimit() > 0) {
|
|
while ($input->bytesUntilLimit() > 0) {
|
|
- if (!self::parseFieldFromStreamNoTag($input, $field, $value)) {
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
|
|
+ self::parseFieldFromStreamNoTag($input, $field, $value);
|
|
$this->$getter()[] = $value;
|
|
$this->$getter()[] = $value;
|
|
}
|
|
}
|
|
$input->popLimit($limit);
|
|
$input->popLimit($limit);
|
|
- return true;
|
|
|
|
|
|
+ return;
|
|
} else {
|
|
} else {
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
@@ -377,8 +391,6 @@ class Message
|
|
$setter = $field->getSetter();
|
|
$setter = $field->getSetter();
|
|
$this->$setter($value);
|
|
$this->$setter($value);
|
|
}
|
|
}
|
|
-
|
|
|
|
- return true;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -567,7 +579,8 @@ class Message
|
|
* specified message.
|
|
* specified message.
|
|
*
|
|
*
|
|
* @param string $data Binary protobuf data.
|
|
* @param string $data Binary protobuf data.
|
|
- * @return bool Return true on success.
|
|
|
|
|
|
+ * @return null.
|
|
|
|
+ * @throws Exception Invalid data.
|
|
*/
|
|
*/
|
|
public function mergeFromString($data)
|
|
public function mergeFromString($data)
|
|
{
|
|
{
|
|
@@ -595,9 +608,7 @@ class Message
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
|
|
- if (!$this->parseFieldFromStream($tag, $input, $field)) {
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
|
|
+ $this->parseFieldFromStream($tag, $input, $field);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|