check that the entire packet was read
This commit is contained in:
		
							parent
							
								
									47a07a63ae
								
							
						
					
					
						commit
						8caa48a1e6
					
				| @ -206,18 +206,29 @@ pub fn pso_packet(attr: TokenStream, item: TokenStream) -> TokenStream { | ||||
|         impl PSOPacket for #this_struct { | ||||
|             fn from_bytes(data: &Vec<u8>) -> Result<#this_struct, PacketParseError> { | ||||
|                 let mut cur = std::io::Cursor::new(data); | ||||
|                 cur.seek(SeekFrom::Start(2)).unwrap(); | ||||
|                 let mut b: [u8; 2] = [0; 2]; | ||||
|                 cur.read(&mut b).unwrap(); | ||||
|                 let len = u16::from_le_bytes(b); | ||||
|                 cur.read(&mut b).unwrap(); | ||||
|                 let cmd = u16::from_le_bytes(b); | ||||
| 
 | ||||
|                 if cmd != #pkt_cmd { | ||||
|                     return Err(PacketParseError::WrongPacketCommand); | ||||
|                 } | ||||
| 
 | ||||
|                 if len as usize != data.len() { | ||||
|                     return Err(PacketParseError::WrongPacketSize(len, data.len())); | ||||
|                 } | ||||
|                 
 | ||||
|                 Ok(#this_struct { | ||||
|                 let result = Ok(#this_struct { | ||||
|                     #(#from_bytes)* | ||||
|                 }) | ||||
|                 }); | ||||
| 
 | ||||
|                 if cur.position() as usize != data.len() { | ||||
|                     return Err(PacketParseError::DataStructNotLargeEnough(cur.position(), data.len())); | ||||
|                 } | ||||
| 
 | ||||
|                 result | ||||
|             } | ||||
|             fn as_bytes(&self) -> Vec<u8> { | ||||
|                 let mut buf: Vec<u8> = Vec::new(); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user