File tree Expand file tree Collapse file tree 3 files changed +30
-1
lines changed
Expand file tree Collapse file tree 3 files changed +30
-1
lines changed Original file line number Diff line number Diff line change @@ -28,3 +28,9 @@ name = "tcp_headers"
2828path = " fuzz_targets/tcp_headers.rs"
2929test = false
3030doc = false
31+
32+ [[bin ]]
33+ name = " dhcp_header"
34+ path = " fuzz_targets/dhcp_header.rs"
35+ test = false
36+ doc = false
Original file line number Diff line number Diff line change 1+ #![ no_main]
2+ use libfuzzer_sys:: fuzz_target;
3+ use smoltcp:: wire:: { DhcpPacket , DhcpRepr } ;
4+
5+ fuzz_target ! ( |data: & [ u8 ] | {
6+ let _ = match DhcpPacket :: new_checked( data) {
7+ Ok ( ref packet) => match DhcpRepr :: parse( packet) {
8+ Ok ( dhcp_repr) => {
9+ let mut dhcp_payload = vec![ 0 ; dhcp_repr. buffer_len( ) ] ;
10+ match DhcpPacket :: new_checked( & mut dhcp_payload[ ..] ) {
11+ Ok ( mut dhcp_packet) => Some ( dhcp_repr. emit( & mut dhcp_packet) ) ,
12+ Err ( _) => None ,
13+ }
14+ }
15+ Err ( _) => None ,
16+ } ,
17+ Err ( _) => None ,
18+ } ;
19+ } ) ;
Original file line number Diff line number Diff line change @@ -824,7 +824,11 @@ impl<'a> Repr<'a> {
824824 data,
825825 } => {
826826 let mut servers = [ None ; MAX_DNS_SERVER_COUNT ] ;
827- for ( server, chunk) in servers. iter_mut ( ) . zip ( data. chunks ( 4 ) ) {
827+ let chunk_size = 4 ;
828+ for ( server, chunk) in servers. iter_mut ( ) . zip ( data. chunks ( chunk_size) ) {
829+ if chunk. len ( ) != chunk_size {
830+ return Err ( Error :: Malformed ) ;
831+ }
828832 * server = Some ( Ipv4Address :: from_bytes ( chunk) ) ;
829833 }
830834 dns_servers = Some ( servers) ;
You can’t perform that action at this time.
0 commit comments