#1915·testify

`平等输出值 ' 在递归数据结构上溢出

作者: iwahbe创建于 2026年6月23日更新于 2026年7月12日
标签bug

{\fn华文仿宋\fs16\1cHD1D1D1}快跑! 如果这是一个问题,请考虑使用本repo的讨论部分 -- > <! -- 这里:https://GitHub.com/stretchr/testify/discussions/new?cate=q-a -- >

□ 说明

说吧 EqualexportedValues通过一个值的输出字段通过“复制输出字段”重现。 当值包含指向周期(直接或间接地指向自身)时,复制输出场'将永远跟踪周期,永不终止。 结果是致命错误:堆积溢出',使整个测试二进制中断。 以证人v1.11.1和去1.26.4.

□ 步入重现

运行此测试文件 :

开始 软件包重置

导入( E) "测试"

“GitHub.com/stretchr/测试/装潢” (中文(简体) ).

类型:节点构造{ 自我 * 节点 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

func 测试递归(t * testing.T) { a: = 节点( N) (单位:千美元) 自我 = a b:= & 节点QQ b. 自发=b profile. 平等输出值(t, a, b) {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?


□ 预期行为

断言应检测周期,并报告两种数值相等。

说吧 从结构平等来看,“平等出口”结构并无不同:

< 细节>

开始
func TestChain (t * testing.T) { 试金星 :
a:= & Node{自发: & Node{自发: & Node{}
b:=和Node{自有:和Node{自有:和Node}
profile. 平等输出值(t, a, b)
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

</详情>

□ 实际行为

" 输出的字段 " 会在自给指针上重现,直到goroutine堆栈被耗尽,从而导致整个测试运行中断:

运行时间: goroutine 堆栈超过 1000000字节限制
运行时间: sp=0x... sack=[.]
致命错误:堆栈溢出

groutine 5 [运行]:
内/外. 名称. 名称(...)
.../内部/abi/type.go:659+0xc0...
反射。 (*structType). 字段(...)
.../反射/类型. go:1189+0x90...
反射。 (* rtype)。 字段(...)
.../反射/类型. go:777+0x50...
GitHub.com/stretchr/测试/ servy.copy 输出场(.
.../验证@v1.11.1/assert/assertions.go:99+0x42c...
GitHub.com/stretchr/testify/sert.copy 输出场(.)
.../验证@v1.11.1/assert/assertions.go:114+0x310...
GitHub.com/stretchr/testify/sert.copy 输出场(.)
.../验证@v1.11.1/assert/assertions.go:106+0x538...
[复制件 字段重复到堆栈已耗尽]

-- -- . . .

如果你愿意审查的话 我很乐意插一刀.

内容来源: stretchr/testify