diff --git a/include/libtorrent/peer_id.hpp b/include/libtorrent/peer_id.hpp index d3bf624b7..e5a224bc4 100755 --- a/include/libtorrent/peer_id.hpp +++ b/include/libtorrent/peer_id.hpp @@ -38,6 +38,7 @@ POSSIBILITY OF SUCH DAMAGE. #include #include #include +#include #include "libtorrent/config.hpp" @@ -55,6 +56,12 @@ namespace libtorrent big_number() {} + big_number(std::string const& s) + { + int sl = int(s.size()) < size ? int(s.size()) : size; + std::memcpy(m_number, &s[0], sl); + } + // when initialized with 0 big_number(private_pointer*) { clear(); } diff --git a/src/session_impl.cpp b/src/session_impl.cpp index cd906f8af..4d7cb2775 100755 --- a/src/session_impl.cpp +++ b/src/session_impl.cpp @@ -1810,11 +1810,10 @@ namespace libtorrent { namespace detail } // verify info_hash - const std::string &hash = rd["info-hash"].string(); - std::string real_hash((char*)info.info_hash().begin(), (char*)info.info_hash().end()); - if (hash != real_hash) + sha1_hash hash = rd["info-hash"].string(); + if (hash != info.info_hash()) { - error = "mismatching info-hash: " + hash; + error = "mismatching info-hash: " + boost::lexical_cast(hash); return; }