diff options
-rw-r--r-- | _test/cases/inc/auth_nameencode.test.php | 6 | ||||
-rw-r--r-- | inc/auth.php | 4 |
2 files changed, 8 insertions, 2 deletions
diff --git a/_test/cases/inc/auth_nameencode.test.php b/_test/cases/inc/auth_nameencode.test.php index 1e29b77fd..28ab6dc4a 100644 --- a/_test/cases/inc/auth_nameencode.test.php +++ b/_test/cases/inc/auth_nameencode.test.php @@ -16,6 +16,12 @@ class auth_nameencode_test extends UnitTestCase { $this->assertEqual(auth_nameencode($in),$out); } + function test_quote(){ + $in = 'hey"you'; + $out = 'hey%22you'; + $this->assertEqual(auth_nameencode($in),$out); + } + function test_complex(){ $in = 'hey $ you !$%! foo '; $out = 'hey%20%24%20you%20%21%24%25%21%20foo%20'; diff --git a/inc/auth.php b/inc/auth.php index 79e5513e4..045ced066 100644 --- a/inc/auth.php +++ b/inc/auth.php @@ -455,10 +455,10 @@ function auth_nameencode($name,$skip_group=false){ if (!isset($cache[$name][$skip_group])) { if($skip_group && $name{0} =='@'){ $cache[$name][$skip_group] = '@'.preg_replace('/([\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f])/e', - "'%'.dechex(ord('\\1'))",substr($name,1)); + "'%'.dechex(ord(substr('\\1',-1)))",substr($name,1)); }else{ $cache[$name][$skip_group] = preg_replace('/([\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f])/e', - "'%'.dechex(ord('\\1'))",$name); + "'%'.dechex(ord(substr('\\1',-1)))",$name); } } |