fix(sccf): 修复符号构建器中的字符串处理逻辑

在sccf_builder_add_symbol函数中修正了字符串键的使用方式,
直接使用传入的name参数而不是从字符串表中获取,
避免了潜在的内存访问问题并简化了代码逻辑。
This commit is contained in:
zzy
2026-03-23 18:11:32 +08:00
parent 741171dbba
commit d167a8ba96

View File

@@ -9,6 +9,7 @@ void sccf_builder_init(sccf_builder_t *builder) {
scc_hashtable_init(&builder->str2sym,
(scc_hashtable_hash_func_t)scc_strhash32,
(scc_hashtable_equal_func_t)scc_strcmp);
scc_vec_init(builder->strtab);
scc_vec_init(builder->relocs);
scc_vec_init(builder->symtab);
@@ -25,7 +26,7 @@ usize sccf_builder_add_symbol(sccf_builder_t *builder, const char *name,
sccf_sym_t *sym) {
usize offset = 0;
offset = (usize)scc_hashtable_get(&builder->str2offset, name);
const char *key = &scc_vec_at(builder->strtab, offset);
const char *key = name;
if (offset == 0) {
offset = scc_vec_size(builder->strtab);
while (*name) {
@@ -34,7 +35,6 @@ usize sccf_builder_add_symbol(sccf_builder_t *builder, const char *name,
}
scc_vec_push(builder->strtab, '\0');
key = &scc_vec_at(builder->strtab, offset);
scc_hashtable_set(&builder->str2offset, key, (void *)offset);
}
sym->name_offset = offset;