fix(sccf): 修复符号构建器中的字符串处理逻辑
在sccf_builder_add_symbol函数中修正了字符串键的使用方式, 直接使用传入的name参数而不是从字符串表中获取, 避免了潜在的内存访问问题并简化了代码逻辑。
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user