Browse Source

Base64解码bug -- 搞高健壮性

shizhongqi 11 months ago
parent
commit
e7f86401ae
1 changed files with 12 additions and 4 deletions
  1. 12 4
      wsClient/room.go

+ 12 - 4
wsClient/room.go

@@ -264,13 +264,21 @@ func parseProtocolPart(part string, params *RoomParams) error {
 	prefix := part[:sepIndex]
 	prefix := part[:sepIndex]
 	encodedData := part[sepIndex+1:]
 	encodedData := part[sepIndex+1:]
 
 
-	// Base64解码 - 使用RawStdEncoding来处理可能没有正确填充的base64字符串
+	// Base64解码 - 按优先级尝试不同的编码方式
 	decodedBytes, err := base64.RawStdEncoding.DecodeString(encodedData)
 	decodedBytes, err := base64.RawStdEncoding.DecodeString(encodedData)
 	if err != nil {
 	if err != nil {
-		// 如果RawStdEncoding失败,尝试标准的StdEncoding(带填充
-		decodedBytes, err = base64.StdEncoding.DecodeString(encodedData)
+		// 如果RawStdEncoding失败,尝试RawURLEncoding(URL安全的base64
+		decodedBytes, err = base64.RawURLEncoding.DecodeString(encodedData)
 		if err != nil {
 		if err != nil {
-			return fmt.Errorf("Base64解码失败: %v", err)
+			// 如果RawURLEncoding也失败,尝试标准的StdEncoding(带填充)
+			decodedBytes, err = base64.StdEncoding.DecodeString(encodedData)
+			if err != nil {
+				// 最后尝试URLEncoding
+				decodedBytes, err = base64.URLEncoding.DecodeString(encodedData)
+				if err != nil {
+					return fmt.Errorf("Base64解码失败: %v", err)
+				}
+			}
 		}
 		}
 	}
 	}