svn commit: r412750 - in head/devel/kyua: . files

Li-Wen Hsu lwhsu at FreeBSD.org
Fri Apr 8 15:58:47 UTC 2016


Author: lwhsu
Date: Fri Apr  8 15:58:45 2016
New Revision: 412750
URL: https://svnweb.freebsd.org/changeset/ports/412750

Log:
  - Fix printing out binary/UTF-8 characters by backporting fix from 0.12
  
  Submitted by:	ngie
  Reviewed by:	rodrigc
  Approved by:	jmmv (maintainer)
  Differential Revision:	https://reviews.freebsd.org/D5851

Added:
  head/devel/kyua/files/patch-issue136   (contents, props changed)
Modified:
  head/devel/kyua/Makefile

Modified: head/devel/kyua/Makefile
==============================================================================
--- head/devel/kyua/Makefile	Fri Apr  8 15:56:03 2016	(r412749)
+++ head/devel/kyua/Makefile	Fri Apr  8 15:58:45 2016	(r412750)
@@ -2,6 +2,7 @@
 
 PORTNAME=	kyua
 PORTVERSION=	0.11
+PORTREVISION=	1
 PORTEPOCH=	3
 CATEGORIES=	devel
 MASTER_SITES=	https://github.com/jmmv/kyua/releases/download/${PORTNAME}-${PORTVERSION}/ \

Added: head/devel/kyua/files/patch-issue136
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/devel/kyua/files/patch-issue136	Fri Apr  8 15:58:45 2016	(r412750)
@@ -0,0 +1,87 @@
+diff --git utils/text/operations.cpp utils/text/operations.cpp
+index 736e7f3..5a4345d 100644
+--- utils/text/operations.cpp
++++ utils/text/operations.cpp
+@@ -38,6 +38,9 @@ namespace text = utils::text;
+ 
+ /// Replaces XML special characters from an input string.
+ ///
++/// The list of XML special characters is specified here:
++///     http://www.w3.org/TR/xml11/#charsets
++///
+ /// \param in The input to quote.
+ ///
+ /// \return A quoted string without any XML special characters.
+@@ -46,25 +49,34 @@ text::escape_xml(const std::string& in)
+ {
+     std::ostringstream quoted;
+ 
+-    const char* delims = "\"&<>'";  // Keep in sync with 'switch' below.
+-    std::string::size_type start_pos = 0;
+-    std::string::size_type last_pos = in.find_first_of(delims);
+-    while (last_pos != std::string::npos) {
+-        quoted << in.substr(start_pos, last_pos - start_pos);
+-        switch (in[last_pos]) {
+-        case '"':  quoted << """; break;
+-        case '&':  quoted << "&"; break;
+-        case '<':  quoted << "<"; break;
+-        case '>':  quoted << ">"; break;
+-        case '\'': quoted << "'"; break;
+-        default:   UNREACHABLE;
++    for (std::string::const_iterator it = in.begin();
++         it != in.end(); ++it) {
++        unsigned char c = (unsigned char)*it;
++        if (c == '"') {
++            quoted << """;
++        } else if (c == '&') {
++            quoted << "&";
++        } else if (c == '<') {
++            quoted << "<";
++        } else if (c == '>') {
++            quoted << ">";
++        } else if (c == '\'') {
++            quoted << "'";
++        } else if ((c >= 0x01 && c <= 0x08) ||
++                   (c >= 0x0B && c <= 0x0C) ||
++                   (c >= 0x0E && c <= 0x1F) ||
++                   (c >= 0x7F && c <= 0x84) ||
++                   (c >= 0x86 && c <= 0x9F)) {
++            // for RestrictedChar characters, escape them
++            // as '&#[decimal ASCII value];'
++            // so that in the XML file we will see the escaped
++            // character.
++            quoted << "&#" << static_cast< std::string::size_type >(*it)
++                   << ";";
++        } else {
++            quoted << *it;
+         }
+-        start_pos = last_pos + 1;
+-        last_pos = in.find_first_of(delims, start_pos);
+     }
+-    if (start_pos < in.length())
+-        quoted << in.substr(start_pos);
+-
+     return quoted.str();
+ }
+ 
+diff --git utils/text/operations_test.cpp utils/text/operations_test.cpp
+index 769b7d4..2d5ab36 100644
+--- utils/text/operations_test.cpp
++++ utils/text/operations_test.cpp
+@@ -77,6 +77,7 @@ ATF_TEST_CASE_BODY(escape_xml__no_escaping)
+ {
+     ATF_REQUIRE_EQ("a", text::escape_xml("a"));
+     ATF_REQUIRE_EQ("Some text!", text::escape_xml("Some text!"));
++    ATF_REQUIRE_EQ("\n\t\r", text::escape_xml("\n\t\r"));
+ }
+ 
+ 
+@@ -90,6 +91,8 @@ ATF_TEST_CASE_BODY(escape_xml__some_escaping)
+ 
+     ATF_REQUIRE_EQ(""&<>'", text::escape_xml("\"&<>'"));
+     ATF_REQUIRE_EQ("&&&", text::escape_xml("&&&"));
++    ATF_REQUIRE_EQ("&#8;&#11;", text::escape_xml("\b\v"));
++    ATF_REQUIRE_EQ("\t&#127;BAR&", text::escape_xml("\t\x7f""BAR&"));
+ }
+ 
+ 


More information about the svn-ports-all mailing list