Skip to content

Commit fe15b9a

Browse files
committed
fix reading operation losting data
1 parent c9371a3 commit fe15b9a

File tree

2 files changed

+14
-4
lines changed

2 files changed

+14
-4
lines changed

src/dns.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ pub fn build_dns_query(domain: &str, query_type: RecordType, used_by_tcp: bool)
1111
let query = Query::query(name, query_type);
1212
let mut msg = Message::new();
1313
msg.add_query(query)
14-
.set_id(rand::Rng::random::<u16>(&mut rand::rng()))
14+
.set_id(rand::random::<u16>())
1515
.set_op_code(OpCode::Query)
1616
.set_message_type(MessageType::Query)
1717
.set_recursion_desired(true);

src/lib.rs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -223,9 +223,19 @@ where
223223
stream.write_all(buf).await?;
224224
stream.flush().await?;
225225

226-
let mut buf = vec![0; MAX_BUFFER_SIZE];
227-
let n = tokio::time::timeout(timeout, stream.read(&mut buf)).await??;
228-
Ok(buf[..n].to_vec())
226+
// Read the length prefix (2 bytes)
227+
let mut len_buf = [0u8; 2];
228+
tokio::time::timeout(timeout, stream.read_exact(&mut len_buf)).await??;
229+
let len = u16::from_be_bytes(len_buf) as usize;
230+
231+
// Read the DNS message
232+
let mut msg_buf = vec![0u8; len];
233+
tokio::time::timeout(timeout, stream.read_exact(&mut msg_buf)).await??;
234+
235+
// Prepend the length prefix to match the expected format
236+
let mut response_buf = len_buf.to_vec();
237+
response_buf.extend(msg_buf);
238+
Ok(response_buf)
229239
}
230240

231241
fn log_dns_message(prefix: &str, domain: &str, message: &Message) {

0 commit comments

Comments
 (0)