JDevlieghere created this revision. JDevlieghere added reviewers: labath, kastiglione, mib. JDevlieghere requested review of this revision.
I was looking at `Stream::PutRawBytes` and thought I spotted a bug because both looks are using `i < src_len` as the loop condition despite them iterating "in different directions". On closer inspection, the existing code is correct, because it relies on well-defined unsigned integer wrapping of `size_t`. Correct doesn't mean readable, so this patch changes the loop condition to compare against 0 when decrementing `i` while still covering the edge case of `src_len` potentially being `0` itself. https://reviews.llvm.org/D119857 Files: lldb/source/Utility/Stream.cpp Index: lldb/source/Utility/Stream.cpp =================================================================== --- lldb/source/Utility/Stream.cpp +++ lldb/source/Utility/Stream.cpp @@ -344,8 +344,8 @@ for (size_t i = 0; i < src_len; ++i) _PutHex8(src[i], false); } else { - for (size_t i = src_len - 1; i < src_len; --i) - _PutHex8(src[i], false); + for (size_t i = src_len; i > 0; --i) + _PutHex8(src[i - 1], false); } if (!binary_was_set) m_flags.Clear(eBinary); @@ -357,6 +357,7 @@ ByteOrder src_byte_order, ByteOrder dst_byte_order) { ByteDelta delta(*this); + if (src_byte_order == eByteOrderInvalid) src_byte_order = m_byte_order; @@ -370,8 +371,8 @@ for (size_t i = 0; i < src_len; ++i) _PutHex8(src[i], false); } else { - for (size_t i = src_len - 1; i < src_len; --i) - _PutHex8(src[i], false); + for (size_t i = src_len; i > 0; --i) + _PutHex8(src[i - 1], false); } if (binary_is_set) m_flags.Set(eBinary);
Index: lldb/source/Utility/Stream.cpp =================================================================== --- lldb/source/Utility/Stream.cpp +++ lldb/source/Utility/Stream.cpp @@ -344,8 +344,8 @@ for (size_t i = 0; i < src_len; ++i) _PutHex8(src[i], false); } else { - for (size_t i = src_len - 1; i < src_len; --i) - _PutHex8(src[i], false); + for (size_t i = src_len; i > 0; --i) + _PutHex8(src[i - 1], false); } if (!binary_was_set) m_flags.Clear(eBinary); @@ -357,6 +357,7 @@ ByteOrder src_byte_order, ByteOrder dst_byte_order) { ByteDelta delta(*this); + if (src_byte_order == eByteOrderInvalid) src_byte_order = m_byte_order; @@ -370,8 +371,8 @@ for (size_t i = 0; i < src_len; ++i) _PutHex8(src[i], false); } else { - for (size_t i = src_len - 1; i < src_len; --i) - _PutHex8(src[i], false); + for (size_t i = src_len; i > 0; --i) + _PutHex8(src[i - 1], false); } if (binary_is_set) m_flags.Set(eBinary);
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits