mirror of
https://github.com/RPCS3/llvm.git
synced 2026-07-19 15:13:49 -04:00
Fix llvm-strings crash for negative char values
On Windows at least, llvm-strings was crashing if it encountered bytes that mapped to negative chars, as it was passing these into std::isgraph and std::isblank functions, resulting in undefined behaviour. On debug builds using MSVC, these functions verfiy that the value passed in is representable as an unsigned char. Since the char is promoted to an int, a value greater than 127 would turn into a negative integer value, and fail the check. Using the llvm::isPrint function is sufficient to solve the issue. Reviewed by: ruiu, mstorsjo Differential Revision: https://reviews.llvm.org/D53509 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345137 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
# RUN: echo -e "z\0\x80\0a\0" | llvm-strings --bytes 1 - | FileCheck %s
|
||||
# CHECK: z{{$}}
|
||||
# CHECK-NEXT: {{^}} a
|
||||
@@ -80,7 +80,7 @@ static void strings(raw_ostream &OS, StringRef FileName, StringRef Contents) {
|
||||
const char *B = Contents.begin();
|
||||
const char *P = nullptr, *E = nullptr, *S = nullptr;
|
||||
for (P = Contents.begin(), E = Contents.end(); P < E; ++P) {
|
||||
if (std::isgraph(*P) || std::isblank(*P)) {
|
||||
if (isPrint(*P) || *P == '\t') {
|
||||
if (S == nullptr)
|
||||
S = P;
|
||||
} else if (S) {
|
||||
|
||||
Reference in New Issue
Block a user