[WebSocket] UTF-8 checking
mb_check_encoding first, as it's much faster, fail fast Only do the other check if message is under 10k characters Large payloads crawl otherwise
This commit is contained in:
		
							parent
							
								
									bdca66a27d
								
							
						
					
					
						commit
						c15c324424
					
				| @ -266,10 +266,6 @@ class RFC6455 implements VersionInterface { | |||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         return false; |         return false; | ||||||
| 
 |  | ||||||
|         if (empty($val)) { |  | ||||||
|             return false; |  | ||||||
|         } |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
| @ -296,12 +292,19 @@ class RFC6455 implements VersionInterface { | |||||||
|      * @return bool |      * @return bool | ||||||
|      */ |      */ | ||||||
|     function isUtf8($str) { |     function isUtf8($str) { | ||||||
|         if (isset($str[100000])) { |         if (false === mb_check_encoding($str, 'UTF-8')) { | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         $len = strlen($str); | ||||||
|  | 
 | ||||||
|  |         // The secondary method of checking is painfully slow
 | ||||||
|  |         // If the message is more than 10kb, skip UTF-8 checks
 | ||||||
|  |         if ($len > 10000) { | ||||||
|             return true; |             return true; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         $state = static::UTF8_ACCEPT; |         $state = static::UTF8_ACCEPT; | ||||||
|         $len   = strlen($str); |  | ||||||
| 
 | 
 | ||||||
|         for ($i = 0; $i < $len; $i++) { |         for ($i = 0; $i < $len; $i++) { | ||||||
|             $state = static::$dfa[256 + ($state << 4) + static::$dfa[ord($str[$i])]]; |             $state = static::$dfa[256 + ($state << 4) + static::$dfa[ord($str[$i])]]; | ||||||
| @ -311,6 +314,6 @@ class RFC6455 implements VersionInterface { | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         return mb_check_encoding($str, 'UTF-8'); |         return true; | ||||||
|     } |     } | ||||||
| } | } | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Chris Boden
						Chris Boden