aboutsummaryrefslogtreecommitdiff
path: root/js/binary/reader.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/binary/reader.js')
-rw-r--r--js/binary/reader.js17
1 files changed, 8 insertions, 9 deletions
diff --git a/js/binary/reader.js b/js/binary/reader.js
index 2dc3eb70..731587c7 100644
--- a/js/binary/reader.js
+++ b/js/binary/reader.js
@@ -290,7 +290,9 @@ jspb.BinaryReader.prototype.nextField = function() {
nextWireType != jspb.BinaryConstants.WireType.DELIMITED &&
nextWireType != jspb.BinaryConstants.WireType.START_GROUP &&
nextWireType != jspb.BinaryConstants.WireType.END_GROUP) {
- goog.asserts.fail('Invalid wire type');
+ goog.asserts.fail(
+ 'Invalid wire type: %s (at position %s)', nextWireType,
+ this.fieldCursor_);
this.error_ = true;
return false;
}
@@ -388,8 +390,7 @@ jspb.BinaryReader.prototype.skipFixed64Field = function() {
* Skips over the next group field in the binary stream.
*/
jspb.BinaryReader.prototype.skipGroup = function() {
- // Keep a stack of start-group tags that must be matched by end-group tags.
- var nestedGroups = [this.nextField_];
+ var previousField = this.nextField_;
do {
if (!this.nextField()) {
goog.asserts.fail('Unmatched start-group tag: stream EOF');
@@ -397,19 +398,17 @@ jspb.BinaryReader.prototype.skipGroup = function() {
return;
}
if (this.nextWireType_ ==
- jspb.BinaryConstants.WireType.START_GROUP) {
- // Nested group start.
- nestedGroups.push(this.nextField_);
- } else if (this.nextWireType_ ==
jspb.BinaryConstants.WireType.END_GROUP) {
// Group end: check that it matches top-of-stack.
- if (this.nextField_ != nestedGroups.pop()) {
+ if (this.nextField_ != previousField) {
goog.asserts.fail('Unmatched end-group tag');
this.error_ = true;
return;
}
+ return;
}
- } while (nestedGroups.length > 0);
+ this.skipField();
+ } while (true);
};