diff options
author | bunnei <bunneidev@gmail.com> | 2021-02-07 10:25:56 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-07 10:25:56 -0800 |
commit | 230e71b255e60cdf1fa7d45773448c90d44671b5 (patch) | |
tree | d2b88e9215366502c004218199c21c4fb203e5b7 /src | |
parent | 458be11f9396e85df4a49fc8e0d610004d107104 (diff) | |
parent | 9d5a56a40b6f25548ebc364c590ab891c9bbe8ba (diff) |
Merge pull request #5887 from ogniK5377/lm-fix
lm: Fix ReadLeb128
Diffstat (limited to 'src')
-rw-r--r-- | src/core/hle/service/lm/lm.cpp | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/core/hle/service/lm/lm.cpp b/src/core/hle/service/lm/lm.cpp index 2a6d43d2a..7d7542fc2 100644 --- a/src/core/hle/service/lm/lm.cpp +++ b/src/core/hle/service/lm/lm.cpp @@ -143,17 +143,19 @@ private: rb.Push(RESULT_SUCCESS); } - u32 ReadLeb128(const std::vector<u8>& data, std::size_t& offset) { - u32 result{}; + u64 ReadLeb128(const std::vector<u8>& data, std::size_t& offset) { + u64 result{}; u32 shift{}; - do { - result |= (data[offset] & 0x7f) << shift; + + for (std::size_t i = 0; i < sizeof(u64); i++) { + const auto v = data[offset]; + result |= (static_cast<u64>(v & 0x7f) << shift); shift += 7; offset++; - if (offset >= data.size()) { + if (offset >= data.size() || ((v & 0x80) == 0)) { break; } - } while ((data[offset] & 0x80) != 0); + } return result; } @@ -262,7 +264,7 @@ private: switch (entry.severity) { case LogSeverity::Trace: - LOG_DEBUG(Service_LM, "LogManager DEBUG ({}):\n{}", DestinationToString(destination), + LOG_DEBUG(Service_LM, "LogManager TRACE ({}):\n{}", DestinationToString(destination), output_log); break; case LogSeverity::Info: |