From 6aa4b73c463d026eb7608958ff24525a0b9cfaab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?= <grubba@grubba.org> Date: Sat, 13 Jun 1998 21:31:23 +0200 Subject: [PATCH] Made rec_data() more paranoid. Rev: lib/modules/Protocols.pmod/DNS.pmod:1.16 --- lib/modules/Protocols.pmod/DNS.pmod | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/lib/modules/Protocols.pmod/DNS.pmod b/lib/modules/Protocols.pmod/DNS.pmod index 42a560bdc5..dbca38c7e4 100644 --- a/lib/modules/Protocols.pmod/DNS.pmod +++ b/lib/modules/Protocols.pmod/DNS.pmod @@ -525,14 +525,21 @@ class async_client static private void rec_data() { - mapping m=udp::read(); - if(m->port != 53 || search(nameservers, m->ip) == -1) return; - sscanf(m->data,"%2c",int id); - object r=requests[id]; - if(!r) return; - m_delete(requests,id); - r->callback(r->domain,decode_res(m->data),@r->args); - destruct(r); + mixed err; + if (err = catch { + mapping m=udp::read(); + if(m->port != 53 || search(nameservers, m->ip) == -1) return; + sscanf(m->data,"%2c",int id); + object r=requests[id]; + if(!r) return; + m_delete(requests,id); + r->callback(r->domain,decode_res(m->data),@r->args); + destruct(r); + }) { + werror(sprintf("DNS: Failed to read UDP packet. Connection refused?\n" + "%s\n", + describe_backtrace(err))); + } } static private void generic_get(string d, -- GitLab