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_init(&builder->str2sym,
|
||||||
(scc_hashtable_hash_func_t)scc_strhash32,
|
(scc_hashtable_hash_func_t)scc_strhash32,
|
||||||
(scc_hashtable_equal_func_t)scc_strcmp);
|
(scc_hashtable_equal_func_t)scc_strcmp);
|
||||||
|
|
||||||
scc_vec_init(builder->strtab);
|
scc_vec_init(builder->strtab);
|
||||||
scc_vec_init(builder->relocs);
|
scc_vec_init(builder->relocs);
|
||||||
scc_vec_init(builder->symtab);
|
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) {
|
sccf_sym_t *sym) {
|
||||||
usize offset = 0;
|
usize offset = 0;
|
||||||
offset = (usize)scc_hashtable_get(&builder->str2offset, name);
|
offset = (usize)scc_hashtable_get(&builder->str2offset, name);
|
||||||
const char *key = &scc_vec_at(builder->strtab, offset);
|
const char *key = name;
|
||||||
if (offset == 0) {
|
if (offset == 0) {
|
||||||
offset = scc_vec_size(builder->strtab);
|
offset = scc_vec_size(builder->strtab);
|
||||||
while (*name) {
|
while (*name) {
|
||||||
@@ -34,7 +35,6 @@ usize sccf_builder_add_symbol(sccf_builder_t *builder, const char *name,
|
|||||||
}
|
}
|
||||||
scc_vec_push(builder->strtab, '\0');
|
scc_vec_push(builder->strtab, '\0');
|
||||||
|
|
||||||
key = &scc_vec_at(builder->strtab, offset);
|
|
||||||
scc_hashtable_set(&builder->str2offset, key, (void *)offset);
|
scc_hashtable_set(&builder->str2offset, key, (void *)offset);
|
||||||
}
|
}
|
||||||
sym->name_offset = offset;
|
sym->name_offset = offset;
|
||||||
|
|||||||
Reference in New Issue
Block a user