From 6d55e18dece07ce5ac064231cc7979b03be3fcd3 Mon Sep 17 00:00:00 2001 From: Chris Boden Date: Thu, 12 Jul 2012 15:41:30 -0400 Subject: [PATCH] mbstring no longer required for Ratchet --- CHANGELOG.md | 1 + composer.json | 6 ++++-- composer.lock | 12 +++--------- src/Ratchet/WebSocket/Version/RFC6455.php | 10 +++++++++- src/Ratchet/WebSocket/Version/RFC6455/Frame.php | 2 +- .../WebSocket/Version/RFC6455/HandshakeVerifier.php | 4 ++++ 6 files changed, 22 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bc47783..77ff158 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ CHANGELOG * Ratchet passes every non-binary message AB test * Ratchet now relies on all stable dependancies + * mbstring no longer required (but recommended if compliance is important to you) * 0.1.4 (2012-06-17) diff --git a/composer.json b/composer.json index f743d04..82f393a 100644 --- a/composer.json +++ b/composer.json @@ -26,9 +26,11 @@ } , "require": { "php": ">=5.3.2" - , "ext-mbstring": "*" + , "react/socket": "0.1.*" , "guzzle/guzzle": "2.5.*" , "symfony/http-foundation": "2.1.*" - , "react/socket": "0.1.*" + } + , "require-dev": { + "react/socket": "0.1.*" } } diff --git a/composer.lock b/composer.lock index 27b498c..7e789f0 100644 --- a/composer.lock +++ b/composer.lock @@ -1,5 +1,5 @@ { - "hash": "66c73c46e4da8a18fdedf5ec2a9e5da5", + "hash": "c2963a15ac8c0b7ffee78188dff24cd1", "packages": [ { "package": "evenement/evenement", @@ -23,12 +23,6 @@ "package": "react/stream", "version": "v0.1.0" }, - { - "package": "symfony/event-dispatcher", - "version": "dev-master", - "alias-pretty-version": "2.1.x-dev", - "alias-version": "2.1.9999999.9999999-dev" - }, { "package": "symfony/event-dispatcher", "version": "dev-master", @@ -44,8 +38,8 @@ { "package": "symfony/http-foundation", "version": "dev-master", - "source-reference": "1a450955d5c487d85a7aaae4d8e306316c2a2f79", - "commit-date": "1341951444" + "source-reference": "3399f6f068cd41f1b42140699db1f1e6d3bcb361", + "commit-date": "1342107786" } ], "packages-dev": null, diff --git a/src/Ratchet/WebSocket/Version/RFC6455.php b/src/Ratchet/WebSocket/Version/RFC6455.php index 1252666..4e89bb7 100644 --- a/src/Ratchet/WebSocket/Version/RFC6455.php +++ b/src/Ratchet/WebSocket/Version/RFC6455.php @@ -53,9 +53,17 @@ class RFC6455 implements VersionInterface { */ private $closeCodes = array(); + /** + * Lookup if mbstring is available + * @var bool + */ + private $hasMbString = false; + public function __construct() { $this->_verifier = new HandshakeVerifier; $this->setCloseCodes(); + + $this->hasMbString = extension_loaded('mbstring'); } /** @@ -292,7 +300,7 @@ class RFC6455 implements VersionInterface { * @return bool */ function isUtf8($str) { - if (false === mb_check_encoding($str, 'UTF-8')) { + if ($this->hasMbString && false === mb_check_encoding($str, 'UTF-8')) { return false; } diff --git a/src/Ratchet/WebSocket/Version/RFC6455/Frame.php b/src/Ratchet/WebSocket/Version/RFC6455/Frame.php index 5ff8330..93cc68f 100644 --- a/src/Ratchet/WebSocket/Version/RFC6455/Frame.php +++ b/src/Ratchet/WebSocket/Version/RFC6455/Frame.php @@ -231,7 +231,7 @@ class Frame implements FrameInterface { throw new \InvalidArgumentException("Masking key must be " . static::MASK_LENGTH ." characters"); } - if (!mb_check_encoding($maskingKey, 'US-ASCII')) { + if (extension_loaded('mbstring') && true !== mb_check_encoding($maskingKey, 'US-ASCII')) { throw new \InvalidArgumentException("Masking key MUST be ASCII"); } diff --git a/src/Ratchet/WebSocket/Version/RFC6455/HandshakeVerifier.php b/src/Ratchet/WebSocket/Version/RFC6455/HandshakeVerifier.php index 93d7928..19b9a94 100644 --- a/src/Ratchet/WebSocket/Version/RFC6455/HandshakeVerifier.php +++ b/src/Ratchet/WebSocket/Version/RFC6455/HandshakeVerifier.php @@ -59,6 +59,10 @@ class HandshakeVerifier { return false; } + if (!extension_loaded('mbstring')) { + return true; + } + return mb_check_encoding($val, 'US-ASCII'); }