r364270 - [analyzer] JsonSupport: Escape escapes
Csaba Dabis via cfe-commits
cfe-commits at lists.llvm.org
Mon Jun 24 20:08:32 PDT 2019
Author: charusso
Date: Mon Jun 24 20:08:32 2019
New Revision: 364270
URL: http://llvm.org/viewvc/llvm-project?rev=364270&view=rev
Log:
[analyzer] JsonSupport: Escape escapes
Summary: -
Reviewers: NoQ
Reviewed By: NoQ
Subscribers: xazax.hun, baloghadamsoftware, szepet, a.sidorin,
mikhail.ramalho, Szelethus, donat.nagy, dkrupp, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D63462
Modified:
cfe/trunk/include/clang/Basic/JsonSupport.h
cfe/trunk/test/Analysis/dump_egraph.c
cfe/trunk/test/Analysis/exploded-graph-rewriter/escapes.c
Modified: cfe/trunk/include/clang/Basic/JsonSupport.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/JsonSupport.h?rev=364270&r1=364269&r2=364270&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/JsonSupport.h (original)
+++ cfe/trunk/include/clang/Basic/JsonSupport.h Mon Jun 24 20:08:32 2019
@@ -31,7 +31,26 @@ inline std::string JsonFormat(StringRef
std::string Str = RawSR.trim().str();
size_t Pos = 0;
+ // Escape backslashes.
+ while (true) {
+ Pos = Str.find('\\', Pos);
+ if (Pos == std::string::npos)
+ break;
+
+ // Prevent bad conversions.
+ size_t TempPos = (Pos != 0) ? Pos - 1 : 0;
+
+ // See whether the current backslash is not escaped.
+ if (TempPos != Str.find("\\\\", Pos)) {
+ Str.insert(Pos, "\\");
+ ++Pos; // As we insert the backslash move plus one.
+ }
+
+ ++Pos;
+ }
+
// Escape double quotes.
+ Pos = 0;
while (true) {
Pos = Str.find('\"', Pos);
if (Pos == std::string::npos)
@@ -40,8 +59,8 @@ inline std::string JsonFormat(StringRef
// Prevent bad conversions.
size_t TempPos = (Pos != 0) ? Pos - 1 : 0;
- // See whether the current double quote is escaped.
- if (TempPos != Str.find("\\\"", TempPos)) {
+ // See whether the current double quote is not escaped.
+ if (TempPos != Str.find("\\\"", Pos)) {
Str.insert(Pos, "\\");
++Pos; // As we insert the escape-character move plus one.
}
Modified: cfe/trunk/test/Analysis/dump_egraph.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/dump_egraph.c?rev=364270&r1=364269&r2=364270&view=diff
==============================================================================
--- cfe/trunk/test/Analysis/dump_egraph.c (original)
+++ cfe/trunk/test/Analysis/dump_egraph.c Mon Jun 24 20:08:32 2019
@@ -13,6 +13,8 @@ int getJ();
int foo() {
int *x = 0, *y = 0;
+ char c = '\x13';
+
return *x + *y;
}
@@ -22,5 +24,7 @@ int foo() {
// CHECK: \"has_report\": true
-// CHECK: \"pretty\": \"*x\", \"location\": \{ \"line\": 16, \"column\": 10, \"file\": \"{{(.+)}}dump_egraph.c\" \}
+// CHECK: \"pretty\": \"*x\", \"location\": \{ \"line\": 18, \"column\": 10, \"file\": \"{{(.+)}}dump_egraph.c\" \}
+
+// CHECK: \"pretty\": \"'\\\\x13'\"
Modified: cfe/trunk/test/Analysis/exploded-graph-rewriter/escapes.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/exploded-graph-rewriter/escapes.c?rev=364270&r1=364269&r2=364270&view=diff
==============================================================================
--- cfe/trunk/test/Analysis/exploded-graph-rewriter/escapes.c (original)
+++ cfe/trunk/test/Analysis/exploded-graph-rewriter/escapes.c Mon Jun 24 20:08:32 2019
@@ -15,7 +15,7 @@ void escapes() {
// CHECK: <td align="left"><b>Environment: </b></td>
// CHECK-SAME: <td align="left">"foo"</td>
// CHECK-SAME: <td align="left">&Element\{"foo",0 S64b,char\}</td>
- const char *const foo = "foo";
+ const char *const foo = "\x66\x6f\x6f";
// CHECK: <font color="cyan3">BinaryOperator</font>
// CHECK-SAME: <td align="left">1 \| 2</td>
More information about the cfe-commits
mailing list