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() { ...@@ -2035,10 +2035,18 @@ CheckedError Parser::ParseProtoDecl() {
// Temp: remove any duplicates, as .fbs files can't handle them. // Temp: remove any duplicates, as .fbs files can't handle them.
for (auto it = v.begin(); it != v.end();) { 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); it = v.erase(it);
else } else {
++it; ++it;
}
} }
} else if (IsIdent("syntax")) { // Skip these. } else if (IsIdent("syntax")) { // Skip these.
NEXT(); NEXT();
......
...@@ -4,6 +4,7 @@ namespace proto.test; ...@@ -4,6 +4,7 @@ namespace proto.test;
/// Enum doc comment. /// Enum doc comment.
enum ProtoEnum : int { enum ProtoEnum : int {
NUL = 0,
FOO = 1, FOO = 1,
/// Enum 2nd value doc comment misaligned. /// Enum 2nd value doc comment misaligned.
BAR = 5, BAR = 5,
......
...@@ -8,6 +8,7 @@ package proto.test; ...@@ -8,6 +8,7 @@ package proto.test;
/// Enum doc comment. /// Enum doc comment.
enum ProtoEnum { enum ProtoEnum {
option allow_alias = true; option allow_alias = true;
NUL = 0;
FOO = 1; FOO = 1;
/// Enum 2nd value doc comment misaligned. /// Enum 2nd value doc comment misaligned.
BAR = 5; BAR = 5;
......
...@@ -4,6 +4,7 @@ namespace proto.test; ...@@ -4,6 +4,7 @@ namespace proto.test;
/// Enum doc comment. /// Enum doc comment.
enum ProtoEnum : int { enum ProtoEnum : int {
NUL = 0,
FOO = 1, FOO = 1,
/// Enum 2nd value doc comment misaligned. /// Enum 2nd value doc comment misaligned.
BAR = 5, 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