From f1d4eecf0c7c9c5d9e0986c4c643ab9f1eaa488b Mon Sep 17 00:00:00 2001 From: wongoo Date: Mon, 23 Sep 2019 11:35:19 +0800 Subject: [PATCH 1/2] fix chunk string error --- encode_test.go | 4 +++- string.go | 12 ++++++------ string_test.go | 6 ++++-- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/encode_test.go b/encode_test.go index b77c78a5..49527aed 100644 --- a/encode_test.go +++ b/encode_test.go @@ -47,7 +47,7 @@ func javaDecodeValidate(method string, target interface{}) (string, error) { stdin, err := cmd.StdinPipe() if err != nil { - fmt.Printf("call java error: %v", err) + fmt.Printf("call java error: %v\n", err) return "", err } @@ -57,7 +57,9 @@ func javaDecodeValidate(method string, target interface{}) (string, error) { }() out, err := cmd.Output() + if err != nil { + fmt.Printf("get java result error: %v\n", err) return "", err } return string(out), nil diff --git a/string.go b/string.go index a933e404..8922be03 100644 --- a/string.go +++ b/string.go @@ -151,7 +151,6 @@ func encString(b []byte, v string) []byte { var ( byteLen = 0 charLen = 0 - last = false vBuf = *bytes.NewBufferString(v) byteRead = 0 @@ -170,12 +169,9 @@ func encString(b []byte, v string) []byte { charCount = 0 byteCount = 0 - for charCount <= CHUNK_SIZE { + for charCount < CHUNK_SIZE { r, _, err := vBuf.ReadRune() if err != nil { - if err == io.EOF { - last = true - } break } @@ -184,8 +180,12 @@ func encString(b []byte, v string) []byte { byteCount += byteLen } + if charCount == 0 { + break + } + switch { - case !last && charCount >= CHUNK_SIZE: + case vBuf.Len() > 0 && charCount >= CHUNK_SIZE: b = encByte(b, BC_STRING_CHUNK) b = encByte(b, PackUint16(uint16(charCount))...) case charCount <= int(STRING_DIRECT_MAX): diff --git a/string_test.go b/string_test.go index 7fc65e74..fa0acd1f 100644 --- a/string_test.go +++ b/string_test.go @@ -80,8 +80,10 @@ func TestEncRune(t *testing.T) { ) e = NewEncoder() - v = "我化尘埃飞扬,追寻赤裸逆翔, 奔去七月刑场,时间烧灼滚烫, 回忆撕毁臆想,路上行走匆忙, 难能可贵世上,散播留香磁场, 我欲乘风破浪,踏遍黄沙海洋, 与其误会一场,也要不负勇往, 我愿你是个谎,从未出现南墙, 笑是神的伪装,笑是强忍的伤, 我想你就站在,站在大漠边疆, 我化尘埃飞扬,追寻赤裸逆翔," + - " 奔去七月刑场,时间烧灼滚烫, 回忆撕毁臆想,路上行走匆忙, 难能可贵世上,散播留香磁场, 我欲乘风破浪,踏遍黄沙海洋, 与其误会一场,也要不负勇往, 我愿你是个谎,从未出现南墙, 笑是神的伪装,笑是强忍的伤, 我想你就站在,站在大漠边疆." + + v = "我化尘埃飞扬,追寻赤裸逆翔,奔去七月刑场,时间烧灼滚烫,回忆撕毁臆想,路上行走匆忙,难能可贵世上,散播留香磁场,我欲乘风破浪,踏遍黄沙海洋,与其误会一场,也要不负勇往,我愿你是个谎,从未出现南墙,笑是神的伪装,笑是强忍的伤,我想你就站在,站在大漠边疆,我化尘埃飞扬,追寻赤裸逆翔," + + "奔去七月刑场,时间烧灼滚烫,回忆撕毁臆想,路上行走匆忙,难能可贵世上,散播留香磁场,我欲乘风破浪,踏遍黄沙海洋,与其误会一场,也要不负勇往,我愿你是个谎,从未出现南墙,笑是神的伪装,笑是强忍的伤,我想你就站在,站在大漠边疆." + v = v + v + v + v + v v = v + v + v + v + v v = v + v + v + v + v From 7a35c639e16a8193bfa98b25d150be20caea05fb Mon Sep 17 00:00:00 2001 From: wongoo Date: Mon, 23 Sep 2019 13:37:37 +0800 Subject: [PATCH 2/2] change fmt.Printf to t.Logf --- encode_test.go | 9 ++++----- string_test.go | 4 +++- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/encode_test.go b/encode_test.go index 49527aed..48d0fde0 100644 --- a/encode_test.go +++ b/encode_test.go @@ -16,7 +16,6 @@ package hessian import ( "bytes" - "fmt" "os/exec" "testing" ) @@ -36,7 +35,7 @@ func encodeTarget(target interface{}) ([]byte, error) { return e.Buffer(), nil } -func javaDecodeValidate(method string, target interface{}) (string, error) { +func javaDecodeValidate(t *testing.T, method string, target interface{}) (string, error) { b, err := encodeTarget(target) if err != nil { return "", err @@ -47,7 +46,7 @@ func javaDecodeValidate(method string, target interface{}) (string, error) { stdin, err := cmd.StdinPipe() if err != nil { - fmt.Printf("call java error: %v\n", err) + t.Logf("call java error: %v", err) return "", err } @@ -59,14 +58,14 @@ func javaDecodeValidate(method string, target interface{}) (string, error) { out, err := cmd.Output() if err != nil { - fmt.Printf("get java result error: %v\n", err) + t.Logf("get java result error: %v", err) return "", err } return string(out), nil } func testJavaDecode(t *testing.T, method string, target interface{}) { - result, err := javaDecodeValidate(method, target) + result, err := javaDecodeValidate(t, method, target) if err != nil { t.Errorf("%s: encode fail with error: %v", method, err) return diff --git a/string_test.go b/string_test.go index fa0acd1f..c4a4675f 100644 --- a/string_test.go +++ b/string_test.go @@ -89,7 +89,9 @@ func TestEncRune(t *testing.T) { v = v + v + v + v + v v = v + v + v + v + v v = v + v + v + v + v - fmt.Printf("vlen:%d\n", len(v)) + + t.Logf("TestEncRune vlen: %d", len(v)) + e.Encode(v) if len(e.Buffer()) == 0 { t.Fail()