mirror of https://github.com/v2ray/v2ray-core
fix buffer usage in vmess out
parent
84464e863d
commit
1239b1a57b
|
@ -99,6 +99,7 @@ func handleRequest(conn net.Conn, request *protocol.VMessRequest, firstPacket v2
|
||||||
encryptRequestWriter := v2crypto.NewCryptionWriter(aesStream, conn)
|
encryptRequestWriter := v2crypto.NewCryptionWriter(aesStream, conn)
|
||||||
|
|
||||||
buffer := alloc.NewBuffer().Clear()
|
buffer := alloc.NewBuffer().Clear()
|
||||||
|
defer buffer.Clear()
|
||||||
buffer, err = request.ToBytes(user.NewTimeHash(user.HMACHash{}), user.GenerateRandomInt64InRange, buffer)
|
buffer, err = request.ToBytes(user.NewTimeHash(user.HMACHash{}), user.GenerateRandomInt64InRange, buffer)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("VMessOut: Failed to serialize VMess request: %v", err)
|
log.Error("VMessOut: Failed to serialize VMess request: %v", err)
|
||||||
|
@ -119,7 +120,6 @@ func handleRequest(conn net.Conn, request *protocol.VMessRequest, firstPacket v2
|
||||||
firstChunk.Release()
|
firstChunk.Release()
|
||||||
|
|
||||||
_, err = conn.Write(buffer.Value)
|
_, err = conn.Write(buffer.Value)
|
||||||
buffer.Release()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("VMessOut: Failed to write VMess request: %v", err)
|
log.Error("VMessOut: Failed to write VMess request: %v", err)
|
||||||
return
|
return
|
||||||
|
@ -153,6 +153,7 @@ func handleResponse(conn net.Conn, request *protocol.VMessRequest, output chan<-
|
||||||
buffer, err := v2net.ReadFrom(decryptResponseReader, nil)
|
buffer, err := v2net.ReadFrom(decryptResponseReader, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("VMessOut: Failed to read VMess response (%d bytes): %v", buffer.Len(), err)
|
log.Error("VMessOut: Failed to read VMess response (%d bytes): %v", buffer.Len(), err)
|
||||||
|
buffer.Release()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if buffer.Len() < 4 || !headerMatch(request, buffer.Value[:2]) {
|
if buffer.Len() < 4 || !headerMatch(request, buffer.Value[:2]) {
|
||||||
|
|
|
@ -131,6 +131,9 @@ func (this *VMessRequestReader) Read(reader io.Reader) (*VMessRequest, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
domainLength := int(buffer.Value[41])
|
domainLength := int(buffer.Value[41])
|
||||||
|
if domainLength == 0 {
|
||||||
|
return nil, transport.CorruptedPacket
|
||||||
|
}
|
||||||
_, err = v2net.ReadAllBytes(decryptor, buffer.Value[42:42+domainLength])
|
_, err = v2net.ReadAllBytes(decryptor, buffer.Value[42:42+domainLength])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
Loading…
Reference in New Issue