|  | @@ -34,20 +34,22 @@ func (handler *VMessInboundHandler) ListenUDP(port uint16) error {
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  func (handler *VMessInboundHandler) AcceptPackets(conn *net.UDPConn) {
 |  |  func (handler *VMessInboundHandler) AcceptPackets(conn *net.UDPConn) {
 | 
											
												
													
														|  |  	for {
 |  |  	for {
 | 
											
												
													
														|  | -		buffer := make([]byte, bufferSize)
 |  | 
 | 
											
												
													
														|  | -		nBytes, addr, err := conn.ReadFromUDP(buffer)
 |  | 
 | 
											
												
													
														|  | 
 |  | +		buffer := alloc.NewBuffer()
 | 
											
												
													
														|  | 
 |  | +		nBytes, addr, err := conn.ReadFromUDP(buffer.Value)
 | 
											
												
													
														|  |  		if err != nil {
 |  |  		if err != nil {
 | 
											
												
													
														|  |  			log.Error("VMessIn failed to read UDP packets: %v", err)
 |  |  			log.Error("VMessIn failed to read UDP packets: %v", err)
 | 
											
												
													
														|  | 
 |  | +			buffer.Release()
 | 
											
												
													
														|  |  			continue
 |  |  			continue
 | 
											
												
													
														|  |  		}
 |  |  		}
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -		reader := bytes.NewReader(buffer[:nBytes])
 |  | 
 | 
											
												
													
														|  | 
 |  | +		reader := bytes.NewReader(buffer.Value[:nBytes])
 | 
											
												
													
														|  |  		requestReader := protocol.NewVMessRequestReader(handler.clients)
 |  |  		requestReader := protocol.NewVMessRequestReader(handler.clients)
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  		request, err := requestReader.Read(reader)
 |  |  		request, err := requestReader.Read(reader)
 | 
											
												
													
														|  |  		if err != nil {
 |  |  		if err != nil {
 | 
											
												
													
														|  |  			log.Access(addr.String(), "", log.AccessRejected, err.Error())
 |  |  			log.Access(addr.String(), "", log.AccessRejected, err.Error())
 | 
											
												
													
														|  |  			log.Warning("VMessIn: Invalid request from (%s): %v", addr.String(), err)
 |  |  			log.Warning("VMessIn: Invalid request from (%s): %v", addr.String(), err)
 | 
											
												
													
														|  | 
 |  | +			buffer.Release()
 | 
											
												
													
														|  |  			continue
 |  |  			continue
 | 
											
												
													
														|  |  		}
 |  |  		}
 | 
											
												
													
														|  |  		log.Access(addr.String(), request.Address.String(), log.AccessAccepted, "")
 |  |  		log.Access(addr.String(), request.Address.String(), log.AccessAccepted, "")
 | 
											
										
											
												
													
														|  | @@ -55,11 +57,13 @@ func (handler *VMessInboundHandler) AcceptPackets(conn *net.UDPConn) {
 | 
											
												
													
														|  |  		cryptReader, err := v2io.NewAesDecryptReader(request.RequestKey, request.RequestIV, reader)
 |  |  		cryptReader, err := v2io.NewAesDecryptReader(request.RequestKey, request.RequestIV, reader)
 | 
											
												
													
														|  |  		if err != nil {
 |  |  		if err != nil {
 | 
											
												
													
														|  |  			log.Error("VMessIn: Failed to create decrypt reader: %v", err)
 |  |  			log.Error("VMessIn: Failed to create decrypt reader: %v", err)
 | 
											
												
													
														|  | 
 |  | +			buffer.Release()
 | 
											
												
													
														|  |  			continue
 |  |  			continue
 | 
											
												
													
														|  |  		}
 |  |  		}
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  		data := alloc.NewBuffer()
 |  |  		data := alloc.NewBuffer()
 | 
											
												
													
														|  |  		nBytes, err = cryptReader.Read(data.Value)
 |  |  		nBytes, err = cryptReader.Read(data.Value)
 | 
											
												
													
														|  | 
 |  | +		buffer.Release()
 | 
											
												
													
														|  |  		if err != nil {
 |  |  		if err != nil {
 | 
											
												
													
														|  |  			log.Warning("VMessIn: Unable to decrypt data: %v", err)
 |  |  			log.Warning("VMessIn: Unable to decrypt data: %v", err)
 | 
											
												
													
														|  |  			data.Release()
 |  |  			data.Release()
 |