actiontech / sqle

一个支持多种不同类型数据库,覆盖事前控制、事后监督、标准发布场景,帮助您建立质量规范的SQL全生命周期质量管理平台
Mozilla Public License 2.0
1.42k stars 183 forks source link

FingerPrint算法数组越界导致Pnanic #2603

Open winfredLIN opened 6 days ago

winfredLIN commented 6 days ago

版本信息(Version)

sqle@latest

问题描述(Describe)

使用特定SQL生成指纹时,由于生成的指纹长度大于原有SQL,FingerPrint算法访问的数组越界,产生panic 类似问题:https://github.com/percona/go-mysql/pull/30

截图或日志(Log)

临时修复方案

  1. 在每次访问数组前(10处)判断数组是否越界,若越界,返回原始SQL,并且在外侧打印日志 img_v3_02el_58d1472e-f982-4d87-b0ff-29e99e13c2dg img_v3_02el_09136c0b-a0b9-41c7-929d-bb84725b1b4g

如何复现(To Reproduce)

func TestName(t *testing.T) {
    fp := query.Fingerprint(`insert into tb values(1)`)
    fmt.Println("11", fp)
}
// 这条SQL虽然是错误的,但也可以触发panic :SELECT*FROM (SELECT * FROM tb values(1));

问题原因

解决方案

变更影响面

受影响的模块或功能

外部引用的潜在问题或风险

版本兼容性

测试建议