From 1ea90333633b75745e5455585e6aadea0a715783 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Wed, 20 Feb 2008 16:52:09 +0000 Subject: [PATCH] 2008-02-21 Tatsuhiro Tsujikawa Fixed segmentation fault when a DHT message which doesn't have 'y' key received. * src/DHTMessageReceiver.cc (receiveMessage) --- ChangeLog | 6 ++++++ src/DHTMessageReceiver.cc | 9 +++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 18d855d4..63c0201f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-02-21 Tatsuhiro Tsujikawa + + Fixed segmentation fault when a DHT message which doesn't have 'y' key + received. + * src/DHTMessageReceiver.cc (receiveMessage) + 2008-02-21 Tatsuhiro Tsujikawa Fixed the bug that a return code is always 0. BUG#1897704 diff --git a/src/DHTMessageReceiver.cc b/src/DHTMessageReceiver.cc index 388bd201..795b3491 100644 --- a/src/DHTMessageReceiver.cc +++ b/src/DHTMessageReceiver.cc @@ -78,8 +78,13 @@ SharedHandle DHTMessageReceiver::receiveMessage() const Dictionary* d = dynamic_cast(msgroot.get()); if(d) { const Data* y = dynamic_cast(d->get("y")); - if(y->toString() == "r" || y->toString() == "e") { - isReply = true; + if(y) { + if(y->toString() == "r" || y->toString() == "e") { + isReply = true; + } + } else { + _logger->info("Malformed DHT message. Missing 'y' key. From:%s:%u", remoteAddr.c_str(), remotePort); + return handleUnknownMessage(data, sizeof(data), remoteAddr, remotePort); } } else { _logger->info("Malformed DHT message. This is not a bencoded directory. From:%s:%u", remoteAddr.c_str(), remotePort);