From f3011066ead35e16a3d5701d1ddfec85ec915965 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Fran=C3=A7ois=20Cartegnie?= Date: Mon, 10 Aug 2020 14:38:00 +0200 Subject: [PATCH] meta_engine: taglib: reject read on failed seek (cherry picked from commit 837b583e4e4e531ff8b11f13300c7cbc565beb9f) (rebased) rebased: - 3.0 already has 1.11 ifdef Gbp-Pq: Name 0039-meta_engine-taglib-reject-read-on-failed-seek.patch --- modules/meta_engine/taglib.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/modules/meta_engine/taglib.cpp b/modules/meta_engine/taglib.cpp index 85279bcb..58d7683c 100644 --- a/modules/meta_engine/taglib.cpp +++ b/modules/meta_engine/taglib.cpp @@ -166,6 +166,7 @@ public: VlcIostream(stream_t* p_stream) : m_stream( p_stream ) , m_previousPos( 0 ) + , m_borked( false ) { } @@ -183,6 +184,8 @@ public: ByteVector readBlock(ulong length) { + if(m_borked) + return ByteVector::null; ByteVector res(length, 0); ssize_t i_read = vlc_stream_Read( m_stream, res.data(), length); if (i_read < 0) @@ -219,18 +222,29 @@ public: void seek(long offset, Position p) { uint64_t pos = 0; + long len; switch (p) { case Current: pos = m_previousPos; break; case End: - pos = length(); + len = length(); + if(len > -1) + { + pos = len; + } + else + { + m_borked = true; + return; + } break; default: break; } - if (vlc_stream_Seek( m_stream, pos + offset ) == 0) + m_borked = (vlc_stream_Seek( m_stream, pos + offset ) != 0); + if(!m_borked) m_previousPos = pos + offset; } @@ -259,6 +273,7 @@ public: private: stream_t* m_stream; int64_t m_previousPos; + bool m_borked; }; #endif /* TAGLIB_VERSION_1_11 */ -- 2.30.2