[icinga-checkins] icinga.org: icinga2/master: Fix URL encoding for '&'

git at icinga.org git at icinga.org
Mon Jul 25 10:54:36 CEST 2016


Module: icinga2
Branch: master
Commit: 22bb1f406a46ba25e0634af3e9e7532fa2e56734
URL:    https://git.icinga.org/?p=icinga2.git;a=commit;h=22bb1f406a46ba25e0634af3e9e7532fa2e56734

Author: Gunnar Beutner <gunnar.beutner at netways.de>
Date:   Mon Jul 25 10:54:17 2016 +0200

Fix URL encoding for '&'

fixes #12199

---

 lib/remote/url-characters.hpp |    5 ++++-
 lib/remote/url.cpp            |    8 ++++----
 2 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/lib/remote/url-characters.hpp b/lib/remote/url-characters.hpp
index c44614f..a2a0884 100644
--- a/lib/remote/url-characters.hpp
+++ b/lib/remote/url-characters.hpp
@@ -26,8 +26,8 @@
 #define UNRESERVED ALPHA NUMERIC "-._~" "%"
 #define GEN_DELIMS ":/?#[]@"
 #define SUB_DELIMS "!$&'()*+,;="
-#define RESERVED GEN_DELIMS SUB-DELIMS
 #define PCHAR UNRESERVED SUB_DELIMS ":@"
+#define PCHAR_ENCODE UNRESERVED ":@"
 
 #define ACSCHEME ALPHA NUMERIC ".-+"
 
@@ -37,7 +37,10 @@
 #define ACPORT NUMERIC
 
 #define ACPATHSEGMENT PCHAR
+#define ACPATHSEGMENT_ENCODE PCHAR_ENCODE
 #define ACQUERY PCHAR "/?"
+#define ACQUERY_ENCODE PCHAR_ENCODE "/?"
 #define ACFRAGMENT PCHAR "/?"
+#define ACFRAGMENT_ENCODE PCHAR_ENCODE "/?"
 
 #endif /* URL_CHARACTERS_H */
diff --git a/lib/remote/url.cpp b/lib/remote/url.cpp
index c736f8d..f79b110 100644
--- a/lib/remote/url.cpp
+++ b/lib/remote/url.cpp
@@ -243,7 +243,7 @@ String Url::Format(bool print_credentials) const
 	else {
 		BOOST_FOREACH (const String& segment, m_Path) {
 			url += "/";
-			url += Utility::EscapeString(segment, ACPATHSEGMENT, false);
+			url += Utility::EscapeString(segment, ACPATHSEGMENT_ENCODE, false);
 		}
 	}
 
@@ -252,7 +252,7 @@ String Url::Format(bool print_credentials) const
 		typedef std::pair<String, std::vector<String> > kv_pair;
 
 		BOOST_FOREACH (const kv_pair& kv, m_Query) {
-			String key = Utility::EscapeString(kv.first, ACQUERY, false);
+			String key = Utility::EscapeString(kv.first, ACQUERY_ENCODE, false);
 			if (param.IsEmpty())
 				param = "?";
 			else
@@ -268,7 +268,7 @@ String Url::Format(bool print_credentials) const
 				if (kv.second.size() > 1)
 					temp += "[]";
 
-				temp += "=" + Utility::EscapeString(s, ACQUERY, false);
+				temp += "=" + Utility::EscapeString(s, ACQUERY_ENCODE, false);
 			}
 			param += temp;
 		}
@@ -277,7 +277,7 @@ String Url::Format(bool print_credentials) const
 	url += param;
 
 	if (!m_Fragment.IsEmpty())
-		url += "#" + Utility::EscapeString(m_Fragment, ACFRAGMENT, false);
+		url += "#" + Utility::EscapeString(m_Fragment, ACFRAGMENT_ENCODE, false);
 
 	return url;
 }



More information about the icinga-checkins mailing list