]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
XmppPlugin - Fix preg_match() - Compilation failed
authorDiogo Cordeiro <diogo@fc.up.pt>
Sun, 21 Apr 2019 00:24:57 +0000 (01:24 +0100)
committerDiogo Cordeiro <diogo@fc.up.pt>
Sun, 21 Apr 2019 16:13:07 +0000 (17:13 +0100)
Disallowed Unicodecode point (>= 0xd800 && <= 0xdfff)

plugins/Xmpp/XmppPlugin.php

index 933e5c3982a2e612b16cbebd67f30b3be935a61d..1fd7affddbd59b725f0e118dd4cb9ef99f3c4118 100644 (file)
@@ -136,7 +136,8 @@ class XmppPlugin extends ImPlugin
         /* C4 - Non-character code points */
         $chars .= "\x{fdd0}-\x{fdef}\x{fffe}\x{ffff}\x{1fffe}\x{1ffff}\x{2fffe}\x{2ffff}\x{3fffe}\x{3ffff}\x{4fffe}\x{4ffff}\x{5fffe}\x{5ffff}\x{6fffe}\x{6ffff}\x{7fffe}\x{7ffff}\x{8fffe}\x{8ffff}\x{9fffe}\x{9ffff}\x{afffe}\x{affff}\x{bfffe}\x{bffff}\x{cfffe}\x{cffff}\x{dfffe}\x{dffff}\x{efffe}\x{effff}\x{ffffe}\x{fffff}\x{10fffe}\x{10ffff}";
         /* C5 - Surrogate codes */
-        $chars .= "\x{d800}-\x{dfff}";
+        // We can't use preg_match to check this, fix below
+        // $chars .= "\x{d800}-\x{dfff}";
         /* C6 - Inappropriate for plain text */
         $chars .= "\x{fff9}-\x{fffd}";
         /* C7 - Inappropriate for canonical representation */
@@ -176,13 +177,14 @@ class XmppPlugin extends ImPlugin
             }
         }
 
-        // Length limits per http://xmpp.org/rfcs/rfc3920.html#addressing
         if ($node !== null) {
+            // Length limits per http://xmpp.org/rfcs/rfc3920.html#addressing
             if (strlen($node) > 1023) {
                 // TRANS: Exception thrown when using too long a Jabber ID (>1023).
                 throw new Exception(_m('Invalid JID: node too long.'));
             }
-            if (preg_match("/[" . $nodeprepchars . "]/u", $node)) {
+            // C5 - Surrogate codes is ensured by encoding check
+            if (preg_match("/[" . $nodeprepchars . "]/u", $node) || mb_detect_encoding($node, 'UTF-8', true) != 'UTF-8') {
                 // TRANS: Exception thrown when using an invalid Jabber ID.
                 // TRANS: %s is the invalid Jabber ID.
                 throw new Exception(sprintf(_m('Invalid JID node "%s".'), $node));