diff --git a/ChangeLog b/ChangeLog index bc14ca5da..bc928c9a5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -97,6 +97,7 @@ release 0.14.7 * fixed bug in error handling when parsing torrent files * fixed file checking bug when renaming a file before checking the torrent * fixed race conditon when receiving metadata from swarm + * fixed assert in ut_metadata plugin release 0.14.6 diff --git a/src/ut_metadata.cpp b/src/ut_metadata.cpp index 8c513c16a..efd3a6f54 100644 --- a/src/ut_metadata.cpp +++ b/src/ut_metadata.cpp @@ -119,7 +119,18 @@ namespace libtorrent { namespace if (piece < 0 || piece >= int(m_requested_metadata.size())) return false; - TORRENT_ASSERT(piece * 16 * 1024 + size <= m_metadata_size); + if (total_size != m_metadata_size) + { + // they disagree about the size! + return false; + } + + if (piece * 16 * 1024 + size > m_metadata_size) + { + // this piece is invalid + return false; + } + std::memcpy(&m_metadata[piece * 16 * 1024], buf, size); // mark this piece has 'have' m_requested_metadata[piece] = (std::numeric_limits::max)();