fix(funcattrs): 显式传 max_len 并兜底 0,修复方法默认参数缺陷致属性文本全被丢弃

This commit is contained in:
TermiNexus committed 2026-08-26 22:03:57 +08:00
1 parent ec45dd0195
commit 0d4b7ff491
1 file changed
+6 -2
+6 -2
View File
@@ -211,14 +211,18 @@ class FuncGenBase(CallGenBase.CallGenBase):
# 支持的属性:如果缓冲区非空,先追加空格分隔
if attrs_buf[0] != '\0':
self._append_str(attrs_buf, " ")
self._append_str(attrs_buf, llvm_name)
self._append_str(attrs_buf, " ", 256)
self._append_str(attrs_buf, llvm_name, 256)
return 1
def _append_str(self, buf: str, s: str,
max_len: t.CSizeT = 256) -> None:
"""将字符串追加到 buf 末尾(有界,防 strcpy 越界写穿定长缓冲)"""
if buf is None or s is None:
return
# 防御:TPV 方法默认参数注册存在缺陷(缺参调用 max_len 落到 0),
# 显式兜底为 256,避免有界写入检查误判丢弃全部属性文本。
if max_len == 0:
max_len = 256
cur_len: t.CSizeT = string.strlen(buf)
s_len: t.CSizeT = string.strlen(s)
stdio.printf("[ATTR] _append_str: max_len=%zu cur=%zu slen=%zu s='%s'\n", max_len, cur_len, s_len, s)