Commit 60340ac5 authored by Vladimir Glavnyy's avatar Vladimir Glavnyy Committed by Wouter van Oortmerssen

Fix the proto-enum leaking issue (#5286)

* Detect leak with sanitizer

* Fix proto-enum leak issue
parent 2bd4a275
......@@ -2035,10 +2035,18 @@ CheckedError Parser::ParseProtoDecl() {
// Temp: remove any duplicates, as .fbs files can't handle them.
for (auto it = v.begin(); it != v.end();) {
if (it != v.begin() && it[0]->value == it[-1]->value)
if (it != v.begin() && it[0]->value == it[-1]->value) {
auto ref = it[-1];
auto ev = it[0];
for (auto dit = enum_def->vals.dict.begin();
dit != enum_def->vals.dict.end(); ++dit) {
if (dit->second == ev) dit->second = ref; // reassign
}
delete ev; // delete enum value
it = v.erase(it);
else
} else {
++it;
}
}
} else if (IsIdent("syntax")) { // Skip these.
NEXT();
......
......@@ -4,6 +4,7 @@ namespace proto.test;
/// Enum doc comment.
enum ProtoEnum : int {
NUL = 0,
FOO = 1,
/// Enum 2nd value doc comment misaligned.
BAR = 5,
......
......@@ -8,6 +8,7 @@ package proto.test;
/// Enum doc comment.
enum ProtoEnum {
option allow_alias = true;
NUL = 0;
FOO = 1;
/// Enum 2nd value doc comment misaligned.
BAR = 5;
......
......@@ -4,6 +4,7 @@ namespace proto.test;
/// Enum doc comment.
enum ProtoEnum : int {
NUL = 0,
FOO = 1,
/// Enum 2nd value doc comment misaligned.
BAR = 5,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment