From 209a59106ef8334d5b9a94b28986d7e5e1b6b3e8 Mon Sep 17 00:00:00 2001 From: Martchus Date: Mon, 29 Jan 2018 16:29:49 +0100 Subject: [PATCH] Fix BinaryReader::readMultibyteTerminatedStringXX methods --- io/binaryreader.cpp | 16 ++++++++++++---- io/binaryreader.h | 1 + 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/io/binaryreader.cpp b/io/binaryreader.cpp index 7d12006..01b9f1f 100644 --- a/io/binaryreader.cpp +++ b/io/binaryreader.cpp @@ -178,10 +178,14 @@ string BinaryReader::readMultibyteTerminatedStringBE(uint16 termination) ss.exceptions(ios_base::badbit | ios_base::failbit); char *delimChars = m_buffer, *buff = m_buffer + 2; ConversionUtilities::BE::getBytes(termination, delimChars); - do { + m_stream->get(buff[0]); + m_stream->get(buff[1]); + while (!((buff[0] == delimChars[0]) && (buff[1] == delimChars[1]))) { + ss.put(buff[0]); + ss.put(buff[1]); m_stream->get(buff[0]); m_stream->get(buff[1]); - } while (!((buff[0] == delimChars[0]) && (buff[1] == delimChars[1]))); + } return ss.str(); } @@ -198,10 +202,14 @@ string BinaryReader::readMultibyteTerminatedStringLE(uint16 termination) ss.exceptions(ios_base::badbit | ios_base::failbit); char *delimChars = m_buffer, *buff = m_buffer + 2; ConversionUtilities::LE::getBytes(termination, delimChars); - do { + m_stream->get(buff[0]); + m_stream->get(buff[1]); + while (!((buff[0] == delimChars[0]) && (buff[1] == delimChars[1]))) { + ss.put(buff[0]); + ss.put(buff[1]); m_stream->get(buff[0]); m_stream->get(buff[1]); - } while (!((buff[0] == delimChars[0]) && (buff[1] == delimChars[1]))); + } return ss.str(); } diff --git a/io/binaryreader.h b/io/binaryreader.h index b97d433..ac26498 100644 --- a/io/binaryreader.h +++ b/io/binaryreader.h @@ -62,6 +62,7 @@ public: bool readBool(); std::string readLengthPrefixedString(); std::string readString(std::size_t length); + // TODO: refactor methods for reading terminated strings in v5 std::string readTerminatedString(byte termination = 0); std::string readTerminatedString(size_t maxBytesToRead, byte termination = 0); std::string readMultibyteTerminatedStringBE(uint16 termination = 0);