From 6dfb6a30165d258e636f8048edfc5e9001d60f90 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Sun, 31 Mar 2019 10:16:49 +0000 Subject: [PATCH] imgcodecs: fix RBaseStream::setPos() outside of current block Seeking outside of the current block doesn't update actual data, so getByte()/etc will get wrong data from stalled buffer. --- modules/imgcodecs/src/bitstrm.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/imgcodecs/src/bitstrm.cpp b/modules/imgcodecs/src/bitstrm.cpp index 2f5b44dfeb..97df645a6d 100644 --- a/modules/imgcodecs/src/bitstrm.cpp +++ b/modules/imgcodecs/src/bitstrm.cpp @@ -175,8 +175,11 @@ void RBaseStream::setPos( int pos ) } int offset = pos % m_block_size; + int old_block_pos = m_block_pos; m_block_pos = pos - offset; m_current = m_start + offset; + if (old_block_pos != m_block_pos) + readBlock(); }