From e3eb59f4775b12b5810d99861e79389a981be5fb Mon Sep 17 00:00:00 2001 From: Arvid Norberg Date: Wed, 1 Apr 2009 03:37:54 +0000 Subject: [PATCH] fixed leaking exception from bdecode on malformed input. Fixes #492 --- ChangeLog | 1 + include/libtorrent/bencode.hpp | 13 +++++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 82afb120a..b215ba0a0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -57,6 +57,7 @@ release 0.14.3 * Don't try IPv6 on windows if it's not installed * move_storage fix * fixed potential crash on shutdown + * fixed leaking exception from bdecode on malformed input release 0.14.2 diff --git a/include/libtorrent/bencode.hpp b/include/libtorrent/bencode.hpp index cc4e5a220..42772d2cc 100644 --- a/include/libtorrent/bencode.hpp +++ b/include/libtorrent/bencode.hpp @@ -69,7 +69,6 @@ POSSIBILITY OF SUCH DAMAGE. #pragma warning(push, 1) #endif -#include #include #ifdef _MSC_VER @@ -246,10 +245,20 @@ namespace libtorrent TORRENT_ASSERT(*in == 'e'); ++in; // 'e' ret = entry(entry::int_t); - ret.integer() = boost::lexical_cast(val); + char* end_pointer; +#ifdef TORRENT_WINDOWS + ret.integer() = _strtoi64(val.c_str(), &end_pointer, 10); +#else + ret.integer() = strtoll(val.c_str(), &end_pointer, 10); +#endif #ifdef TORRENT_DEBUG ret.m_type_queried = false; #endif + if (end_pointer == val.c_str()) + { + err = true; + return; + } } break; // ----------------------------------------------