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);