xtkoba created this revision.
Herald added a project: All.
xtkoba requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

When a `#warning` directive is followed by tokens containing non-ASCII 
characters encoded in UTF-8, a broken string can be printed out as a diagnostic 
message on some systems. This is because the current code assumes `char` to be 
`signed char`, whereas on some systems `char` is in fact `unsigned char`.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D125620

Files:
  clang/lib/Basic/Diagnostic.cpp


Index: clang/lib/Basic/Diagnostic.cpp
===================================================================
--- clang/lib/Basic/Diagnostic.cpp
+++ clang/lib/Basic/Diagnostic.cpp
@@ -811,7 +811,7 @@
       StringRef(DiagStr, DiagEnd - DiagStr).equals("%0") &&
       getArgKind(0) == DiagnosticsEngine::ak_std_string) {
     const std::string &S = getArgStdStr(0);
-    for (char c : S) {
+    for (signed char c : S) {
       if (llvm::sys::locale::isPrint(c) || c == '\t') {
         OutStr.push_back(c);
       }


Index: clang/lib/Basic/Diagnostic.cpp
===================================================================
--- clang/lib/Basic/Diagnostic.cpp
+++ clang/lib/Basic/Diagnostic.cpp
@@ -811,7 +811,7 @@
       StringRef(DiagStr, DiagEnd - DiagStr).equals("%0") &&
       getArgKind(0) == DiagnosticsEngine::ak_std_string) {
     const std::string &S = getArgStdStr(0);
-    for (char c : S) {
+    for (signed char c : S) {
       if (llvm::sys::locale::isPrint(c) || c == '\t') {
         OutStr.push_back(c);
       }
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to