archeryue/godis

godis.go文件下handleBulkBuf函数发现不通过的测试样例

Closed this issue · 2 comments

您好!

我发现在godis_test.go文件下,执行query为 “*3\r" 时,程序panic退出,如下:

func TestBulkBuf(t *testing.T) {
	client := NewClient(nil)
	fillQuery(client, "*3\r")
	ok, err := handleBulkBuf(client)
	assert.Nil(t, err)
	assert.Equal(t, false, ok)
}

原因推测为查找CRLF的函数是strings.IndexAny(s,chars string)函数,实际上query不包含 回车换行符 ”\r\n“,但其返回值并非 -1,而是第一次出现字符 ”\r“ 的下标

导致程序误认为识别到了 \r\n,从而把queryLen 减少 2 个长度,结果queryLen被设为 -1,再导致下标越界,panic异常。

感谢感谢,我对go的string查找不太熟悉,应该是这个bug,回头我有空的时候修复下。

刚查看了下 strings.IndexAny 的注释,确实用错了,改为 strings.Index 了。再次感谢。