summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--_test/cases/inc/auth_nameencode.test.php6
-rw-r--r--inc/auth.php4
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);
}
}