Bladeren bron

fix off by one temp cstring and put objc names on permanent allocator to be safe

Fixes #4922
Laytan Laats 5 maanden geleden
bovenliggende
commit
f85db012b8
2 gewijzigde bestanden met toevoegingen van 3 en 7 verwijderingen
  1. 1 5
      src/llvm_backend_general.cpp
  2. 2 2
      src/llvm_backend_utility.cpp

+ 1 - 5
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);

+ 2 - 2
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, {},