aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLaytan Laats <laytanlaats@hotmail.com>2025-03-21 22:53:00 +0100
committerLaytan Laats <laytanlaats@hotmail.com>2025-03-21 22:56:19 +0100
commitf85db012b80f0ddbd33833c0aa617c8d5a6892cb (patch)
tree6e46a5f8b9b19b1bb7735c3c13d534f2ad85d975 /src
parent69b969ef7f101b9a54f4a77916c0d8057b669d3e (diff)
fix off by one temp cstring and put objc names on permanent allocator to be safe
Fixes #4922
Diffstat (limited to 'src')
-rw-r--r--src/llvm_backend_general.cpp6
-rw-r--r--src/llvm_backend_utility.cpp4
2 files changed, 3 insertions, 7 deletions
diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp
index 71d368ec9..b7f70893f 100644
--- a/src/llvm_backend_general.cpp
+++ b/src/llvm_backend_general.cpp
@@ -2812,15 +2812,11 @@ gb_internal lbAddr lb_add_global_generated_with_name(lbModule *m, Type *type, lb
GB_ASSERT(type != nullptr);
type = default_type(type);
- u8 *str = cast(u8 *)gb_alloc_array(temporary_allocator(), u8, name.len);
- memcpy(str, name.text, name.len);
- str[name.len] = 0;
-
Scope *scope = nullptr;
Entity *e = alloc_entity_variable(scope, make_token_ident(name), type);
lbValue g = {};
g.type = alloc_type_pointer(type);
- g.value = LLVMAddGlobal(m->mod, lb_type(m, type), cast(char const *)str);
+ g.value = LLVMAddGlobal(m->mod, lb_type(m, type), alloc_cstring(temporary_allocator(), name));
if (value.value != nullptr) {
GB_ASSERT_MSG(LLVMIsConstant(value.value), LLVMPrintValueToString(value.value));
LLVMSetInitializer(g.value, value.value);
diff --git a/src/llvm_backend_utility.cpp b/src/llvm_backend_utility.cpp
index c21e88792..e06369be3 100644
--- a/src/llvm_backend_utility.cpp
+++ b/src/llvm_backend_utility.cpp
@@ -2112,7 +2112,7 @@ gb_internal lbAddr lb_handle_objc_find_or_register_selector(lbProcedure *p, Stri
}
if (!entity) {
- gbString global_name = gb_string_make(temporary_allocator(), "__$objc_SEL::");
+ gbString global_name = gb_string_make(permanent_allocator(), "__$objc_SEL::");
global_name = gb_string_append_length(global_name, name.text, name.len);
lbAddr default_addr = lb_add_global_generated_with_name(default_module, t_objc_SEL, {},
@@ -2174,7 +2174,7 @@ gb_internal lbAddr lb_handle_objc_find_or_register_class(lbProcedure *p, String
}
if (!entity) {
- gbString global_name = gb_string_make(temporary_allocator(), "__$objc_Class::");
+ gbString global_name = gb_string_make(permanent_allocator(), "__$objc_Class::");
global_name = gb_string_append_length(global_name, name.text, name.len);
lbAddr default_addr = lb_add_global_generated_with_name(default_module, t_objc_Class, {},