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"
28
28
path = " fuzz_targets/tcp_headers.rs"
29
29
test = false
30
30
doc = 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> {
824
824
data,
825
825
} => {
826
826
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
+ }
828
832
* server = Some ( Ipv4Address :: from_bytes ( chunk) ) ;
829
833
}
830
834
dns_servers = Some ( servers) ;
You can’t perform that action at this time.
0 commit comments