Skip to content

Commit 53f6ef9

Browse files
committed
fix: unexception of 'index out of range'
1 parent d13d5d5 commit 53f6ef9

File tree

1 file changed

+28
-2
lines changed

1 file changed

+28
-2
lines changed

src/decoder.js

+28-2
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,15 @@ function decoder(mtype) {
5959
("case 2:");
6060

6161
if (types.basic[type] === undefined) gen
62+
63+
// HACK: `types.basic[type] === undefined` means wire_type is 2
64+
// if the wire_type is wrong, skip the the decode
65+
// ("if (%i !== (t&7)) {", typeof types.basic[type] === 'number' ? types.basic[type] : 2)
66+
("if (2 !== (t&7)) {")
67+
("r.skipType(t&7)")
68+
("break")
69+
("}")
70+
6271
("value=types[%i].decode(r,r.uint32())", i); // can't be groups
6372
else gen
6473
("value=r.%s()", type);
@@ -91,14 +100,31 @@ function decoder(mtype) {
91100
("}else");
92101

93102
// Non-packed
94-
if (types.basic[type] === undefined) gen(field.resolvedType.group
103+
if (types.basic[type] === undefined) gen
104+
105+
// HACK: ditto.
106+
("if (2 !== (t&7)) {")
107+
("r.skipType(t&7)")
108+
("break")
109+
("}")
110+
111+
(field.resolvedType.group
95112
? "%s.push(types[%i].decode(r))"
96113
: "%s.push(types[%i].decode(r,r.uint32()))", ref, i);
97114
else gen
98115
("%s.push(r.%s())", ref, type);
99116

100117
// Non-repeated
101-
} else if (types.basic[type] === undefined) gen(field.resolvedType.group
118+
119+
} else if (types.basic[type] === undefined) gen
120+
121+
// HACK: ditto.
122+
("if (2 !== (t&7)) {")
123+
("r.skipType(t&7)")
124+
("break")
125+
("}")
126+
127+
(field.resolvedType.group
102128
? "%s=types[%i].decode(r)"
103129
: "%s=types[%i].decode(r,r.uint32())", ref, i);
104130
else gen

0 commit comments

Comments
 (0)