Linux下fuzz测试TDengine执行查询触发断言失败问题求助
问题根因
该报错是TDengine 2.0.19.0版本的布尔类型字面量解析缺陷导致。src/common/src/tvariant.c第38行的断言逻辑仅校验了bool关键字后的值是否匹配false,未兼容true的单字符缩写t,输入bool 't'时校验不通过直接触发SIGABRT信号终止进程。
解决方案
- 临时规避:编写SQL时布尔字面量使用完整形式,将
bool 't'替换为bool 'true'、bool 'f'替换为bool 'false',不要使用单字符缩写即可避免崩溃。也可改用CAST(1 AS BOOL)表示真、CAST(0 AS BOOL)表示假,跨版本兼容性更好。 - 源码修复:修改
src/common/src/tvariant.c中tVariantCreate函数的布尔解析逻辑:- 先判断输入字符串长度,长度为1时单独校验:字符为
t/T时识别为真,f/F时识别为假 - 长度≥4时匹配完整字符串
true,长度≥5时匹配完整字符串false - 移除原有的不合理断言,补充非法布尔值的友好错误提示,避免进程直接崩溃
- 先判断输入字符串长度,长度为1时单独校验:字符为
- 版本升级:该问题是2.0.x旧版本的已知bug,直接升级到TDengine 2.2.0.0及以上稳定版本即可,官方已在后续版本修复该断言漏洞。
内容的提问来源于stack exchange,提问作者hook capt
相关产品推荐
相关产品推荐

