From f1ca41a5c5bc43e05b7c02031d20e6f6744f4f0a Mon Sep 17 00:00:00 2001 From: Christophe Dumez Date: Sun, 25 Jan 2009 00:27:04 +0000 Subject: [PATCH] BUGFIX: Fixed possible crash when parsing filter file --- Changelog | 2 ++ src/filterParserThread.h | 36 ++++++++++++++++++++---------------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/Changelog b/Changelog index f4bdfc895..61e4b649f 100644 --- a/Changelog +++ b/Changelog @@ -3,6 +3,8 @@ - BUGFIX: qBittorrent now prints backtrace in terminal when segfaulting - BUGFIX: Fixed files progress display in torrent properties - BUGFIX: Improved torrent ratio calculation + - BUGFIX: Fixed possible crash when parsing filter file + - BUGFIX: Made some code optimization - I18N: Updated Bulgarian and Greek translations * Fri Jan 9 2009 - Christophe Dumez - v1.3.0 diff --git a/src/filterParserThread.h b/src/filterParserThread.h index e28e83e22..12f5911b3 100644 --- a/src/filterParserThread.h +++ b/src/filterParserThread.h @@ -178,22 +178,26 @@ class FilterParserThread : public QThread { } // Now Add to the filter QStringList IP; - if(IPv4) { - //IPv4 addresses - IP = strStartIP.split('.'); - address_v4 start((IP.at(0).toInt() << 24) + (IP.at(1).toInt() << 16) + (IP.at(2).toInt() << 8) + IP.at(3).toInt()); - IP = strEndIP.split('.'); - address_v4 last((IP.at(0).toInt() << 24) + (IP.at(1).toInt() << 16) + (IP.at(2).toInt() << 8) + IP.at(3).toInt()); - // Apply to bittorrent session - filter.add_rule(start, last, ip_filter::blocked); - } else { - // IPv6, ex : 1fff:0000:0a88:85a3:0000:0000:ac1f:8001 - IP = strStartIP.split(':'); - address_v6 start = address_v6::from_string(strStartIP.remove(':', 0).toUtf8().data()); - IP = strEndIP.split(':'); - address_v6 last = address_v6::from_string(strEndIP.remove(':', 0).toUtf8().data()); - // Apply to bittorrent session - filter.add_rule(start, last, ip_filter::blocked); + try { + if(IPv4) { + //IPv4 addresses + IP = strStartIP.split('.'); + address_v4 start((IP.at(0).toInt() << 24) + (IP.at(1).toInt() << 16) + (IP.at(2).toInt() << 8) + IP.at(3).toInt()); + IP = strEndIP.split('.'); + address_v4 last((IP.at(0).toInt() << 24) + (IP.at(1).toInt() << 16) + (IP.at(2).toInt() << 8) + IP.at(3).toInt()); + // Apply to bittorrent session + filter.add_rule(start, last, ip_filter::blocked); + } else { + // IPv6, ex : 1fff:0000:0a88:85a3:0000:0000:ac1f:8001 + IP = strStartIP.split(':'); + address_v6 start = address_v6::from_string(strStartIP.remove(':', 0).toUtf8().data()); + IP = strEndIP.split(':'); + address_v6 last = address_v6::from_string(strEndIP.remove(':', 0).toUtf8().data()); + // Apply to bittorrent session + filter.add_rule(start, last, ip_filter::blocked); + } + }catch(exception){ + qDebug("Bad line in filter file, avoided crash..."); } } file.close();