@@ -28,9 +28,9 @@ const (
2828
2929func parseRawQuery (raw string ) map [string ][]string {
3030 result := make (map [string ][]string )
31- pairs := strings .Split (raw , "&" )
31+ pairs := strings .SplitSeq (raw , "&" )
3232
33- for _ , pair := range pairs {
33+ for pair := range pairs {
3434 if pair == "" {
3535 continue
3636 }
@@ -50,12 +50,30 @@ func parseRawQuery(raw string) map[string][]string {
5050 return result
5151}
5252
53+ func tryParseInt (str string ) (int , bool ) {
54+ isInt , err := regexp .MatchString (`^\d+$` , str )
55+
56+ if err != nil {
57+ log .Error ("Encountered Error while Parsing Int" , err .Error ())
58+ }
59+
60+ if isInt && err == nil {
61+ intValue , err := strconv .Atoi (str )
62+
63+ if err == nil {
64+ return intValue , true
65+ }
66+ }
67+
68+ return 0 , false
69+ }
70+
5371func parseTypedQuery (values []string ) interface {} {
5472 var result interface {}
5573
5674 raw := values [0 ]
5775
58- intValue , err := strconv . Atoi (raw )
76+ intValue , isInt := tryParseInt (raw )
5977
6078 if strings .Contains (raw , "," ) || (strings .Contains (raw , "[" ) && strings .Contains (raw , "]" )) {
6179 if strings .Contains (raw , "[" ) && strings .Contains (raw , "]" ) {
@@ -69,16 +87,16 @@ func parseTypedQuery(values []string) interface{} {
6987 var list []interface {}
7088
7189 for _ , part := range parts {
72- intVal , err := strconv . Atoi (part )
90+ _intValue , _isInt := tryParseInt (part )
7391
74- if err == nil {
75- list = append (list , intVal )
92+ if _isInt {
93+ list = append (list , _intValue )
7694 } else {
7795 list = append (list , part )
7896 }
7997 }
8098 result = list
81- } else if err == nil {
99+ } else if isInt {
82100 result = intValue
83101 } else {
84102 result = raw
0 commit comments