mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-30 00:02:02 +00:00
Fix the proto-enum leaking issue (#5286)
* Detect leak with sanitizer * Fix proto-enum leak issue
This commit is contained in:
committed by
Wouter van Oortmerssen
parent
2bd4a27550
commit
60340ac529
@@ -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;
|
|||||||
|
|
||||||
/// 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;
|
|||||||
/// 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;
|
|||||||
|
|
||||||
/// 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,
|
||||||
|
|||||||
Reference in New Issue
Block a user