]> granicus.if.org Git - icinga2/commitdiff
Fix Url Query formatting
authorJean Flach <jean-marcel.flach@netways.de>
Mon, 10 Oct 2016 14:16:52 +0000 (16:16 +0200)
committerJean Flach <jean-marcel.flach@netways.de>
Mon, 10 Oct 2016 14:16:52 +0000 (16:16 +0200)
fixes #12883

lib/remote/url.cpp
test/remote-url.cpp

index 78119f0537d37778427661c4bc0c678941b6ed78..77074af3cc46f52b21a59f061fea964457b47b88 100644 (file)
@@ -257,17 +257,26 @@ String Url::Format(bool print_credentials) const
                        else
                                param += "&";
 
+                       // Just one (or one empty) value
+                       if (kv.second.size() == 1) {
+                               param += key;
+                               param += kv.second[0].IsEmpty() ?
+                                   String() : "=" + Utility::EscapeString(kv.second[0], ACQUERY_ENCODE, false);
+                               continue;
+                       }
+
+                       // Array
                        String temp;
                        for (const String s : kv.second) {
                                if (!temp.IsEmpty())
                                        temp += "&";
 
                                temp += key;
-
                                if (kv.second.size() > 1)
                                        temp += "[]";
 
-                               temp += "=" + Utility::EscapeString(s, ACQUERY_ENCODE, false);
+                               if (!s.IsEmpty())
+                                       temp += "=" + Utility::EscapeString(s, ACQUERY_ENCODE, false);
                        }
                        param += temp;
                }
@@ -375,7 +384,7 @@ bool Url::ParseQuery(const String& query)
                String key = token.SubStr(0, pHelper);
                String value = Empty;
 
-               if (pHelper != token.GetLength() - 1)
+               if (pHelper != String::NPos && pHelper != token.GetLength() - 1)
                        value = token.SubStr(pHelper+1);
 
                if (!ValidateToken(value, ACQUERY))
index b8d7c5fb7d4e644d89e1ec884c8ec8d169567dc7..5dc02bc7e7b53a5eab6a2262835042b8303b14ea 100644 (file)
@@ -91,6 +91,7 @@ BOOST_AUTO_TEST_CASE(format)
 
        url = new Url("/foo/bar/index.php?blaka");
        BOOST_CHECK(new Url(url->Format()));
+       BOOST_CHECK(url->Format() == "/foo/bar/index.php?blaka");
 
        url = new Url("/");
        BOOST_CHECK(url->Format() == "/");