[lldb] Don't rely on wrapping in PutRawBytes/PutBytesAsRawHex8
authorJonas Devlieghere <jonas@devlieghere.com>
Wed, 16 Feb 2022 04:35:52 +0000 (20:35 -0800)
committerJonas Devlieghere <jonas@devlieghere.com>
Wed, 16 Feb 2022 04:38:25 +0000 (20:38 -0800)
commit920146316da1e55017d46cfd62be783419da03d5
tree038457d87fc44a7e4cf5373455b2d66227b17c46
parent1a5b881d4cf0fafe78258825f6442277e1636ecb
[lldb] Don't rely on wrapping in PutRawBytes/PutBytesAsRawHex8

I was looking at Stream::PutRawBytes and thought I spotted a bug because
both loops are using `i < src_len` as the loop condition despite them
iterating in opposite directions.

On closer inspection, the existing code is correct, because it relies on
well-defined unsigned integer wrapping. 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.

Differential revision: https://reviews.llvm.org/D119857
lldb/source/Utility/Stream.cpp
lldb/unittests/Utility/StreamTest.cpp