GrahamGreen的phpserialize Go库存在单引号转义Bug
Go语言PHP序列化库反序列化二进制字符串失败问题
测试用例执行失败,原因是库"github.com/grahamgreen/phpserialize"错误地转义了单引号字符。可正常工作无报错的替代库为:trim21 "github.com/trim21/go-phpserialize"。
以下是测试代码:
import ( "encoding/base64" "encoding/hex" "encoding/json" "fmt" "github.com/elliotchance/phpserialize" graham "github.com/grahamgreen/phpserialize" "os" "reflect" "strconv" "testing" ) func TestGrahamGreenLibrary_BinaryString(t *testing.T) { const sentHex = "00000000000000358e010000019e26b95c27000e3b2c0920bb37bb000000000000000000000200000000000200c0000027100057000f4240000000000100002a54" binData, _ := hex.DecodeString(sentHex) rawData := string(binData) serialized := "a:1:{" + phpSerStr("rawData") + phpSerStr(rawData) + "}" result, err := graham.UnmarshalAssociativeArray([]byte(serialized)) if err != nil { t.Fatalf("graham Unmarshal: %v", err) } got, _ := result["rawData"].(string) if got != rawData { t.Errorf("RawData mismatch:\ngot (%d bytes): %x\nwant (%d bytes): %x", len(got), got, len(rawData), rawData) } } func phpSerStr(s string) string { return "s:" + strconv.Itoa(len(s)) + ":\"" + s + "\";" }
该测试用于验证二进制字符串的反序列化,使用GrahamGreen的库时会出现数据不匹配错误。
内容的提问来源于stack exchange,提问作者kukulis
相关产品推荐
相关产品推荐

