mirror of
https://github.com/v2fly/v2ray-core.git
synced 2024-12-21 01:27:03 -05:00
Fix DoS attack vulnerability in CommandSwitchAccountFactory
This commit is contained in:
parent
b960d3f1fb
commit
144a7929d8
@ -139,7 +139,7 @@ func (f *CommandSwitchAccountFactory) Unmarshal(data []byte) (interface{}, error
|
|||||||
}
|
}
|
||||||
cmd.Level = uint32(data[levelStart])
|
cmd.Level = uint32(data[levelStart])
|
||||||
timeStart := levelStart + 1
|
timeStart := levelStart + 1
|
||||||
if len(data) < timeStart {
|
if len(data) < timeStart+1 {
|
||||||
return nil, newError("insufficient length.")
|
return nil, newError("insufficient length.")
|
||||||
}
|
}
|
||||||
cmd.ValidMin = data[timeStart]
|
cmd.ValidMin = data[timeStart]
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package encoding_test
|
package encoding_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/google/go-cmp/cmp"
|
"github.com/google/go-cmp/cmp"
|
||||||
@ -35,3 +36,23 @@ func TestSwitchAccount(t *testing.T) {
|
|||||||
t.Error(r)
|
t.Error(r)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestSwitchAccountBugOffByOne(t *testing.T) {
|
||||||
|
sa := &protocol.CommandSwitchAccount{
|
||||||
|
Port: 1234,
|
||||||
|
ID: uuid.New(),
|
||||||
|
AlterIds: 1024,
|
||||||
|
Level: 128,
|
||||||
|
ValidMin: 16,
|
||||||
|
}
|
||||||
|
|
||||||
|
buffer := buf.New()
|
||||||
|
csaf := CommandSwitchAccountFactory{}
|
||||||
|
common.Must(csaf.Marshal(sa, buffer))
|
||||||
|
|
||||||
|
Payload := buffer.Bytes()
|
||||||
|
|
||||||
|
cmd, err := csaf.Unmarshal(Payload[:len(Payload)-1])
|
||||||
|
assert.Error(t, err)
|
||||||
|
assert.Nil(t, cmd)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user