1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2024-09-27 22:36:12 -04:00

check payload length before decrypting it. fixes #1227

This commit is contained in:
Darien Raymond 2018-08-08 00:26:01 +02:00
parent 392b621e8d
commit 63c7f5e686
No known key found for this signature in database
GPG Key ID: 7251FFA14BB18169
2 changed files with 40 additions and 0 deletions

View File

@ -30,6 +30,10 @@ func (r *KCPPacketReader) Read(b []byte) []Segment {
}
if r.Security != nil {
nonceSize := r.Security.NonceSize()
overhead := r.Security.Overhead()
if len(b) <= nonceSize+overhead {
return nil
}
out, err := r.Security.Open(b[nonceSize:nonceSize], b[:nonceSize], b[nonceSize:], nil)
if err != nil {
return nil

View File

@ -1 +1,37 @@
package kcp_test
import (
"testing"
. "v2ray.com/core/transport/internet/kcp"
)
func TestKCPPacketReader(t *testing.T) {
reader := KCPPacketReader{
Security: &SimpleAuthenticator{},
}
testCases := []struct {
Input []byte
Output []Segment
}{
{
Input: []byte{},
Output: nil,
},
{
Input: []byte{1},
Output: nil,
},
}
for _, testCase := range testCases {
seg := reader.Read(testCase.Input)
if testCase.Output == nil && seg != nil {
t.Errorf("Expect nothing returned, but actually %v", seg)
} else if testCase.Output != nil && seg == nil {
t.Errorf("Expect some output, but got nil")
}
}
}