From 62ed6acd24ec605bc90652bd9ee8e18ca66e8aab Mon Sep 17 00:00:00 2001 From: KakarotCake Date: Wed, 29 Jul 2026 03:40:30 -0400 Subject: [PATCH] fix: sanitize empty and numeric identifiers --- gcrecomp-core/src/recompiler/codegen/mod.rs | 17 +++++++++++++++-- gcrecomp-core/tests/codegen_test.rs | 6 ++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/gcrecomp-core/src/recompiler/codegen/mod.rs b/gcrecomp-core/src/recompiler/codegen/mod.rs index 838497e..c8e379b 100644 --- a/gcrecomp-core/src/recompiler/codegen/mod.rs +++ b/gcrecomp-core/src/recompiler/codegen/mod.rs @@ -1209,10 +1209,23 @@ impl CodeGenerator { } pub fn sanitize_identifier(&self, name: &str) -> String { - name.replace([' ', '-', '.'], "_") + let mut identifier: String = name + .replace([' ', '-', '.'], "_") .chars() .filter(|c| c.is_alphanumeric() || *c == '_') - .collect() + .collect(); + + if identifier.is_empty() { + identifier.push_str("function"); + } else if identifier + .chars() + .next() + .is_some_and(|character| character.is_numeric()) + { + identifier.insert_str(0, "function_"); + } + + identifier } fn indent(&self) -> String { diff --git a/gcrecomp-core/tests/codegen_test.rs b/gcrecomp-core/tests/codegen_test.rs index c39b64a..bf93649 100644 --- a/gcrecomp-core/tests/codegen_test.rs +++ b/gcrecomp-core/tests/codegen_test.rs @@ -168,6 +168,11 @@ fn test_mtctr_sets_ctr() { fn test_sanitize_identifier() { let codegen = CodeGenerator::new(); + assert_eq!(codegen.sanitize_identifier(""), "function"); + assert_eq!( + codegen.sanitize_identifier("123_example"), + "function_123_example" + ); assert_eq!( codegen.sanitize_identifier("test_function"), "test_function" @@ -184,4 +189,5 @@ fn test_sanitize_identifier() { codegen.sanitize_identifier("test function"), "test_function" ); + assert_eq!(codegen.sanitize_identifier("@@@"), "function"); }