Skip to content

Commit ebae1e1

Browse files
committed
Mimic spec-compliant behaviour in oneof getVirtual, see #523
1 parent 38d867f commit ebae1e1

File tree

2 files changed

+6
-8
lines changed

2 files changed

+6
-8
lines changed

src/inherits.js

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -169,20 +169,18 @@ inherits.defineProperties = function defineProperties(prototype, type) {
169169
type.getOneofsArray().forEach(function(oneof) {
170170
util.prop(prototype, oneof.resolve().name, {
171171
get: function getVirtual() {
172-
var keys = oneof.oneof;
173-
for (var i = 0; i < keys.length; ++i) {
174-
var field = oneof.parent.fields[keys[i]];
175-
if (this[keys[i]] != field.defaultValue) // eslint-disable-line eqeqeq
172+
// > If the parser encounters multiple members of the same oneof on the wire, only the last member seen is used in the parsed message.
173+
var keys = Object.keys(this);
174+
for (var i = keys.length - 1; i > -1; --i)
175+
if (oneof.oneof.indexOf(keys[i]) > -1)
176176
return keys[i];
177-
}
178177
return undefined;
179178
},
180179
set: function setVirtual(value) {
181180
var keys = oneof.oneof;
182-
for (var i = 0; i < keys.length; ++i) {
181+
for (var i = 0; i < keys.length; ++i)
183182
if (keys[i] !== value)
184183
delete this[keys[i]];
185-
}
186184
}
187185
});
188186
});

src/util/pool.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,4 @@ function pool(alloc, slice, size) {
2727
offset = (offset | 7) + 1;
2828
return buf;
2929
};
30-
};
30+
}

0 commit comments

Comments
 (0)