[llvm] r333565 - [dsymutil] Escape HTML special characters in plist.
Jonas Devlieghere via llvm-commits
llvm-commits at lists.llvm.org
Wed May 30 10:47:11 PDT 2018
Author: jdevlieghere
Date: Wed May 30 10:47:11 2018
New Revision: 333565
URL: http://llvm.org/viewvc/llvm-project?rev=333565&view=rev
Log:
[dsymutil] Escape HTML special characters in plist.
When printing string in the Plist, we weren't escaping the characters
which lead to invalid XML. This patch adds the escape logic to
StringExtras.
rdar://39785334
Modified:
llvm/trunk/include/llvm/ADT/StringExtras.h
llvm/trunk/lib/Support/StringExtras.cpp
llvm/trunk/test/tools/dsymutil/X86/darwin-bundle.test
llvm/trunk/tools/dsymutil/dsymutil.cpp
Modified: llvm/trunk/include/llvm/ADT/StringExtras.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/StringExtras.h?rev=333565&r1=333564&r2=333565&view=diff
==============================================================================
--- llvm/trunk/include/llvm/ADT/StringExtras.h (original)
+++ llvm/trunk/include/llvm/ADT/StringExtras.h Wed May 30 10:47:11 2018
@@ -255,6 +255,10 @@ inline StringRef getOrdinalSuffix(unsign
/// it if it is not printable or if it is an escape char.
void PrintEscapedString(StringRef Name, raw_ostream &Out);
+/// Print each character of the specified string, escaping HTML special
+/// characters.
+void PrintHTMLEscaped(StringRef String, raw_ostream &Out);
+
/// printLowerCase - Print each character as lowercase if it is uppercase.
void printLowerCase(StringRef String, raw_ostream &Out);
Modified: llvm/trunk/lib/Support/StringExtras.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/StringExtras.cpp?rev=333565&r1=333564&r2=333565&view=diff
==============================================================================
--- llvm/trunk/lib/Support/StringExtras.cpp (original)
+++ llvm/trunk/lib/Support/StringExtras.cpp Wed May 30 10:47:11 2018
@@ -68,6 +68,23 @@ void llvm::PrintEscapedString(StringRef
}
}
+void llvm::PrintHTMLEscaped(StringRef String, raw_ostream &Out) {
+ for (char C : String) {
+ if (C == '&')
+ Out << "&";
+ else if (C == '<')
+ Out << "<";
+ else if (C == '>')
+ Out << ">";
+ else if (C == '\"')
+ Out << """;
+ else if (C == '\'')
+ Out << "'";
+ else
+ Out << C;
+ }
+}
+
void llvm::printLowerCase(StringRef String, raw_ostream &Out) {
for (const char C : String)
Out << toLower(C);
Modified: llvm/trunk/test/tools/dsymutil/X86/darwin-bundle.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/dsymutil/X86/darwin-bundle.test?rev=333565&r1=333564&r2=333565&view=diff
==============================================================================
--- llvm/trunk/test/tools/dsymutil/X86/darwin-bundle.test (original)
+++ llvm/trunk/test/tools/dsymutil/X86/darwin-bundle.test Wed May 30 10:47:11 2018
@@ -8,7 +8,7 @@ RUN: cat %p/../Inputs/Info.plist > %t/In
RUN: dsymutil -oso-prepend-path=%p/.. %t/basic.macho.x86_64 -o %t/dsymdest/basic.macho.x86_64.dSYM
RUN: FileCheck %s --input-file %t/dsymdest/basic.macho.x86_64.dSYM/Contents/Info.plist
-RUN: dsymutil -oso-prepend-path=%p/.. %t/basic.macho.x86_64 -toolchain "toolchain" -o %t/dsymdest/basic.macho.x86_64.dSYM
+RUN: dsymutil -oso-prepend-path=%p/.. %t/basic.macho.x86_64 -toolchain "toolchain&and'some<symbols" -o %t/dsymdest/basic.macho.x86_64.dSYM
RUN: FileCheck %s --input-file %t/dsymdest/basic.macho.x86_64.dSYM/Contents/Info.plist --check-prefix=CHECK --check-prefix=TOOLCHAIN
CHECK: <?xml version="1.0" encoding="UTF-8"?>
@@ -30,6 +30,6 @@ CHECK-NEXT: <string>2.0<
CHECK-NEXT: <key>CFBundleVersion</key>
CHECK-NEXT: <string>2</string>
TOOLCHAIN: <key>Toolchain</key>
-TOOLCHAIN-NEXT: <string>toolchain</string>
+TOOLCHAIN-NEXT: <string>toolchain&and'some<symbols</string>
CHECK: </dict>
CHECK-NEXT: </plist>
Modified: llvm/trunk/tools/dsymutil/dsymutil.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/dsymutil/dsymutil.cpp?rev=333565&r1=333564&r2=333565&view=diff
==============================================================================
--- llvm/trunk/tools/dsymutil/dsymutil.cpp (original)
+++ llvm/trunk/tools/dsymutil/dsymutil.cpp Wed May 30 10:47:11 2018
@@ -18,6 +18,7 @@
#include "MachOUtils.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/Triple.h"
#include "llvm/DebugInfo/DIContext.h"
@@ -193,16 +194,24 @@ static bool createPlistFile(llvm::String
<< "\t\t<key>CFBundleSignature</key>\n"
<< "\t\t<string>\?\?\?\?</string>\n";
- if (!BI.OmitShortVersion())
- PL << "\t\t<key>CFBundleShortVersionString</key>\n"
- << "\t\t<string>" << BI.ShortVersionStr << "</string>\n";
-
- PL << "\t\t<key>CFBundleVersion</key>\n"
- << "\t\t<string>" << BI.VersionStr << "</string>\n";
-
- if (!Toolchain.empty())
- PL << "\t\t<key>Toolchain</key>\n"
- << "\t\t<string>" << Toolchain << "</string>\n";
+ if (!BI.OmitShortVersion()) {
+ PL << "\t\t<key>CFBundleShortVersionString</key>\n";
+ PL << "\t\t<string>";
+ PrintHTMLEscaped(BI.ShortVersionStr, PL);
+ PL << "</string>\n";
+ }
+
+ PL << "\t\t<key>CFBundleVersion</key>\n";
+ PL << "\t\t<string>";
+ PrintHTMLEscaped(BI.VersionStr, PL);
+ PL << "</string>\n";
+
+ if (!Toolchain.empty()) {
+ PL << "\t\t<key>Toolchain</key>\n";
+ PL << "\t\t<string>";
+ PrintHTMLEscaped(Toolchain, PL);
+ PL << "</string>\n";
+ }
PL << "\t</dict>\n"
<< "</plist>\n";
More information about the llvm-commits
mailing list