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> _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits