Просмотр исходного кода

Fix int string request parameter handling

- Incorrect type assertions caused inputs to
  always evaluate as 0.
Rod Hynes 6 лет назад
Родитель
Сommit
8b1c66d957
1 измененных файлов с 9 добавлено и 16 удалено
  1. 9 16
      psiphon/server/api.go

+ 9 - 16
psiphon/server/api.go

@@ -207,7 +207,7 @@ func handshakeAPIRequestHandler(
 
 	// establishedTunnelCount is used in traffic rule selection. When omitted by
 	// the client, a value of 0 will be used.
-	establishedTunnelCount, _ := getOptionalIntRequestParam(params, "established_tunnel_count")
+	establishedTunnelCount, _ := getIntStringRequestParam(params, "established_tunnel_count")
 
 	var authorizations []string
 	if params[protocol.PSIPHON_API_HANDSHAKE_AUTHORIZATIONS] != nil {
@@ -1107,30 +1107,23 @@ func getStringRequestParam(params common.APIParameters, name string) (string, er
 	return value, nil
 }
 
-func getOptionalIntRequestParam(params common.APIParameters, name string) (int, bool) {
-	if params[name] == nil {
-		return 0, false
-	}
-	value, ok := params[name].(float64)
-	if !ok {
-		return 0, false
-	}
-	return int(value), true
-}
-
-func getInt64RequestParam(params common.APIParameters, name string) (int64, error) {
+func getIntStringRequestParam(params common.APIParameters, name string) (int, error) {
 	if params[name] == nil {
 		return 0, errors.Tracef("missing param: %s", name)
 	}
-	value, ok := params[name].(float64)
+	valueStr, ok := params[name].(string)
 	if !ok {
 		return 0, errors.Tracef("invalid param: %s", name)
 	}
-	return int64(value), nil
+	value, err := strconv.Atoi(valueStr)
+	if !ok {
+		return 0, errors.Trace(err)
+	}
+	return value, nil
 }
 
 func getPaddingSizeRequestParam(params common.APIParameters, name string) (int, error) {
-	value, err := getInt64RequestParam(params, name)
+	value, err := getIntStringRequestParam(params, name)
 	if err != nil {
 		return 0, errors.Trace(err)
 	}