mirror of
https://github.com/ZeusWPI/ZNS.git
synced 2024-10-30 05:24:26 +01:00
fix wrong condition check
This commit is contained in:
parent
c213ac14f9
commit
cb4812a5c5
1 changed files with 27 additions and 41 deletions
|
@ -158,32 +158,25 @@ impl ToBytes for LabelString {
|
||||||
impl FromBytes for Question {
|
impl FromBytes for Question {
|
||||||
fn from_bytes(reader: &mut Reader) -> Result<Self> {
|
fn from_bytes(reader: &mut Reader) -> Result<Self> {
|
||||||
// 16 for length octet + zero length octet
|
// 16 for length octet + zero length octet
|
||||||
if reader.unread_bytes() < 2 + size_of::<Class>() + size_of::<Type>() {
|
let qname = LabelString::from_bytes(reader)?;
|
||||||
|
|
||||||
|
if reader.unread_bytes() < 4 {
|
||||||
Err(ZNSError::Parse {
|
Err(ZNSError::Parse {
|
||||||
object: String::from("Question"),
|
object: String::from("Question"),
|
||||||
message: String::from("len of bytes smaller then minimum size"),
|
message: String::from("len of rest bytes smaller then minimum size"),
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
let qname = LabelString::from_bytes(reader)?;
|
//Try Parse qtype
|
||||||
|
let qtype = Type::from(reader.read_u16()?);
|
||||||
|
|
||||||
if reader.unread_bytes() < 4 {
|
//Try Parse qclass
|
||||||
Err(ZNSError::Parse {
|
let qclass = Class::from(reader.read_u16()?);
|
||||||
object: String::from("Question"),
|
|
||||||
message: String::from("len of rest bytes smaller then minimum size"),
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
//Try Parse qtype
|
|
||||||
let qtype = Type::from(reader.read_u16()?);
|
|
||||||
|
|
||||||
//Try Parse qclass
|
Ok(Question {
|
||||||
let qclass = Class::from(reader.read_u16()?);
|
qname,
|
||||||
|
qtype,
|
||||||
Ok(Question {
|
qclass,
|
||||||
qname,
|
})
|
||||||
qtype,
|
|
||||||
qclass,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -200,31 +193,24 @@ impl ToBytes for Question {
|
||||||
impl FromBytes for RR {
|
impl FromBytes for RR {
|
||||||
fn from_bytes(reader: &mut Reader) -> Result<Self> {
|
fn from_bytes(reader: &mut Reader) -> Result<Self> {
|
||||||
let name = LabelString::from_bytes(reader)?;
|
let name = LabelString::from_bytes(reader)?;
|
||||||
if reader.unread_bytes() < size_of::<Type>() + size_of::<Class>() + 6 {
|
let _type = Type::from(reader.read_u16()?);
|
||||||
|
let class = Class::from(reader.read_u16()?);
|
||||||
|
let ttl = reader.read_i32()?;
|
||||||
|
let rdlength = reader.read_u16()?;
|
||||||
|
if reader.unread_bytes() < rdlength as usize {
|
||||||
Err(ZNSError::Parse {
|
Err(ZNSError::Parse {
|
||||||
object: String::from("RR"),
|
object: String::from("RR"),
|
||||||
message: String::from("len of rest of bytes smaller then minimum size"),
|
message: String::from("len of rest of bytes not equal to rdlength"),
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
let _type = Type::from(reader.read_u16()?);
|
Ok(RR {
|
||||||
let class = Class::from(reader.read_u16()?);
|
name,
|
||||||
let ttl = reader.read_i32()?;
|
_type,
|
||||||
let rdlength = reader.read_u16()?;
|
class,
|
||||||
if reader.unread_bytes() < rdlength as usize {
|
ttl,
|
||||||
Err(ZNSError::Parse {
|
rdlength,
|
||||||
object: String::from("RR"),
|
rdata: reader.read(rdlength as usize)?,
|
||||||
message: String::from("len of rest of bytes not equal to rdlength"),
|
})
|
||||||
})
|
|
||||||
} else {
|
|
||||||
Ok(RR {
|
|
||||||
name,
|
|
||||||
_type,
|
|
||||||
class,
|
|
||||||
ttl,
|
|
||||||
rdlength,
|
|
||||||
rdata: reader.read(rdlength as usize)?,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue