summaryrefslogtreecommitdiff
path: root/src/CompactPeerListProcessor.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2008-01-04 12:31:49 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2008-01-04 12:31:49 +0000
commitda4d9092b28863d7592cae17f1e97161bda91064 (patch)
treefa26343a61f7747c2eab920c2158976c20afe015 /src/CompactPeerListProcessor.cc
parent853a8ef6aa33c8116fda5db7ad6fd4af4b82933e (diff)
2008-01-04 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Fixed segmentation fault when bad torrent metainfo is parsed. Added dynamic_cast properly to detect the misconfiguration of metainfo and then throw exception or skip it. * src/DefaultBtContext.{h, cc} * test/DefaultBtContextTest.cc * src/AnnounceList.cc * src/CompactPeerListProcessor.cc * src/message.h * src/DefaultBtAnnounce.{h, cc} * test/DefaultBtAnnounceTest.cc * src/BencodeVisitor.cc
Diffstat (limited to 'src/CompactPeerListProcessor.cc')
-rw-r--r--src/CompactPeerListProcessor.cc6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/CompactPeerListProcessor.cc b/src/CompactPeerListProcessor.cc
index d51bc9aa..a3ddc70f 100644
--- a/src/CompactPeerListProcessor.cc
+++ b/src/CompactPeerListProcessor.cc
@@ -41,8 +41,10 @@ bool CompactPeerListProcessor::canHandle(const MetaEntry* peersEntry) const {
Peers CompactPeerListProcessor::extractPeer(const MetaEntry* peersEntry) {
Peers peers;
-
- const Data* peersData = (const Data*)peersEntry;
+ const Data* peersData = dynamic_cast<const Data*>(peersEntry);
+ if(!peersData) {
+ return peers;
+ }
if(peersData->getLen()%6 == 0) {
for(int32_t i = 0; i < peersData->getLen(); i += 6) {
struct in_addr in;