Skip to content

Commit c329d6f

Browse files
mmastracaardappel
authored andcommitted
Ensure we don't subtract with underflow getting enum names (google#5246)
* Ensure we don't subtract with underflow getting enum names * Yep - forgot to run this
1 parent 249f3b3 commit c329d6f

File tree

3 files changed

+13
-13
lines changed

3 files changed

+13
-13
lines changed

src/idl_gen_rust.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -698,14 +698,14 @@ class RustGenerator : public BaseGenerator {
698698
code_ += "pub fn enum_name_{{ENUM_NAME_SNAKE}}(e: {{ENUM_NAME}}) -> "
699699
"&'static str {";
700700

701-
code_ += " let index: usize = e as usize\\";
701+
code_ += " let index = e as {{BASE_TYPE}}\\";
702702
if (enum_def.vals.vec.front()->value) {
703703
auto vals = GetEnumValUse(enum_def, *enum_def.vals.vec.front());
704-
code_ += " - " + vals + " as usize\\";
704+
code_ += " - " + vals + " as {{BASE_TYPE}}\\";
705705
}
706706
code_ += ";";
707707

708-
code_ += " ENUM_NAMES_{{ENUM_NAME_CAPS}}[index]";
708+
code_ += " ENUM_NAMES_{{ENUM_NAME_CAPS}}[index as usize]";
709709
code_ += "}";
710710
code_ += "";
711711
}

tests/monster_test_generated.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -227,8 +227,8 @@ const ENUM_NAMES_COLOR:[&'static str; 8] = [
227227
];
228228

229229
pub fn enum_name_color(e: Color) -> &'static str {
230-
let index: usize = e as usize - Color::Red as usize;
231-
ENUM_NAMES_COLOR[index]
230+
let index = e as i8 - Color::Red as i8;
231+
ENUM_NAMES_COLOR[index as usize]
232232
}
233233

234234
#[allow(non_camel_case_types)]
@@ -293,8 +293,8 @@ const ENUM_NAMES_ANY:[&'static str; 4] = [
293293
];
294294

295295
pub fn enum_name_any(e: Any) -> &'static str {
296-
let index: usize = e as usize;
297-
ENUM_NAMES_ANY[index]
296+
let index = e as u8;
297+
ENUM_NAMES_ANY[index as usize]
298298
}
299299

300300
pub struct AnyUnionTableOffset {}
@@ -360,8 +360,8 @@ const ENUM_NAMES_ANY_UNIQUE_ALIASES:[&'static str; 4] = [
360360
];
361361

362362
pub fn enum_name_any_unique_aliases(e: AnyUniqueAliases) -> &'static str {
363-
let index: usize = e as usize;
364-
ENUM_NAMES_ANY_UNIQUE_ALIASES[index]
363+
let index = e as u8;
364+
ENUM_NAMES_ANY_UNIQUE_ALIASES[index as usize]
365365
}
366366

367367
pub struct AnyUniqueAliasesUnionTableOffset {}
@@ -427,8 +427,8 @@ const ENUM_NAMES_ANY_AMBIGUOUS_ALIASES:[&'static str; 4] = [
427427
];
428428

429429
pub fn enum_name_any_ambiguous_aliases(e: AnyAmbiguousAliases) -> &'static str {
430-
let index: usize = e as usize;
431-
ENUM_NAMES_ANY_AMBIGUOUS_ALIASES[index]
430+
let index = e as u8;
431+
ENUM_NAMES_ANY_AMBIGUOUS_ALIASES[index as usize]
432432
}
433433

434434
pub struct AnyAmbiguousAliasesUnionTableOffset {}

tests/namespace_test/namespace_test1_generated.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,8 @@ const ENUM_NAMES_ENUM_IN_NESTED_NS:[&'static str; 3] = [
8484
];
8585

8686
pub fn enum_name_enum_in_nested_ns(e: EnumInNestedNS) -> &'static str {
87-
let index: usize = e as usize;
88-
ENUM_NAMES_ENUM_IN_NESTED_NS[index]
87+
let index = e as i8;
88+
ENUM_NAMES_ENUM_IN_NESTED_NS[index as usize]
8989
}
9090

9191
// struct StructInNestedNS, aligned to 4

0 commit comments

Comments
 (0)