diff --git a/src/dns/buffer.rs b/src/dns/buffer.rs index 94cc48b..6c21733 100644 --- a/src/dns/buffer.rs +++ b/src/dns/buffer.rs @@ -166,6 +166,9 @@ impl VectorPacketBuffer { impl PacketBuffer for VectorPacketBuffer { fn read(&mut self) -> Result { + if self.pos >= self.buffer.len() { + return Err(BufferError::EndOfBuffer); + } let res = self.buffer[self.pos]; self.pos += 1; @@ -173,10 +176,16 @@ impl PacketBuffer for VectorPacketBuffer { } fn get(&mut self, pos: usize) -> Result { + if pos >= self.buffer.len() { + return Err(BufferError::EndOfBuffer); + } Ok(self.buffer[pos]) } fn get_range(&mut self, start: usize, len: usize) -> Result<&[u8]> { + if start + len > self.buffer.len() { + return Err(BufferError::EndOfBuffer); + } Ok(&self.buffer[start..start + len as usize]) } diff --git a/src/dns/client.rs b/src/dns/client.rs index d11225b..31d4143 100644 --- a/src/dns/client.rs +++ b/src/dns/client.rs @@ -617,7 +617,7 @@ impl DnsClient for HttpsDnsClient { Ok(size) => { let mut bytes: Vec = Vec::with_capacity(size); response.into_body().into_reader() - .take(4096) + .take(65535) .read_to_end(&mut bytes)?; let mut buffer = VectorPacketBuffer::new(); buffer.buffer.extend_from_slice(bytes.as_slice());