Skip to content
Snippets Groups Projects
Commit 344763ad authored by Christopher Smith's avatar Christopher Smith
Browse files

FS#2122 alter SafeFN safe and post indicator characters.

Note, any filenames encoded with the previous SafeFN scheme will need to
be converted to the new scheme.  Users of the old SafeFN scheme should
not use this new scheme until after converting their filenames.
parent d0b3f06b
No related branches found
No related tags found
No related merge requests found
......@@ -10,19 +10,23 @@ class safeFN_test extends UnitTestCase {
function test1(){
// we test multiple cases here - format: string, repl, additional, test
$tests = array();
$tests[] = array('äa.txt', '%5g.a.txt');
$tests[] = array('ä.', '%5g..');
$tests[] = array('äa.txt', '%5g]a.txt');
$tests[] = array('ä.', '%5g].');
$tests[] = array('asciistring','asciistring');
$tests[] = array('ascii-_/.string','ascii-_/.string');
$tests[] = array('AName','%x%1a.ame');
$tests[] = array('A Name','%x%0%1a.ame');
$tests[] = array('Another...Name','%x.nother...%1a.ame');
$tests[] = array('Aß∂ƒName','%x%5b%6oy%aa%1a.ame');
$tests[] = array('A%ß-∂_.ƒName','%x%%5b.-%6oy._.%aa%1a.ame');
$tests[] = array('A%%ß-∂_.ƒName','%x%%%5b.-%6oy._.%aa%1a.ame');
$tests[] = array('데이터도 함께 복원됩니다. 강력한','%zf4%13dg%15ao%zhg%0%164o%yig%0%11at%138w%zk9%zag%zb8..%0%xyt%10cl%164c.');
$tests[] = array('совместимая','%td%ta%sy%t8%t1%td%te%t4%t8%sw%tr.');
$tests[] = array('нехватка_файлового_пространства_на_сервере_p0-squid.some.domain.1270211897.txt.gz','%t9%t1%th%sy%sw%te%t6%sw._%tg%sw%t5%t7%ta%sy%ta%sz%ta._%tb%tc%ta%td%te%tc%sw%t9%td%te%sy%sw._%t9%sw._%td%t1%tc%sy%t1%tc%t1._p0-squid.some.domain.1270211897.txt.gz');
$tests[] = array('AName','%x%1a]ame');
$tests[] = array('A Name','%x%0%1a]ame');
$tests[] = array('Another...Name','%x]nother...%1a]ame');
$tests[] = array('Aß∂ƒName','%x%5b%6oy%aa%1a]ame');
$tests[] = array('A%ß-∂_.ƒName','%x%%5b]-%6oy]_.%aa%1a]ame');
$tests[] = array('A%%ß-∂_.ƒName','%x%%%5b]-%6oy]_.%aa%1a]ame');
$tests[] = array('데이터도 함께 복원됩니다. 강력한','%zf4%13dg%15ao%zhg%0%164o%yig%0%11at%138w%zk9%zag%zb8].%0%xyt%10cl%164c]');
$tests[] = array('совместимая','%td%ta%sy%t8%t1%td%te%t4%t8%sw%tr]');
$tests[] = array('нехватка_файлового_пространства_на_сервере_p0-squid.some.domain.1270211897.txt.gz','%t9%t1%th%sy%sw%te%t6%sw]_%tg%sw%t5%t7%ta%sy%ta%sz%ta]_%tb%tc%ta%td%te%tc%sw%t9%td%te%sy%sw]_%t9%sw]_%td%t1%tc%sy%t1%tc%t1]_p0-squid.some.domain.1270211897.txt.gz');
$tests[] = array('name[1]','name[1]');
$tests[] = array('Name[1]','%1a]ame[1]');
$tests[] = array('Name[A]','%1a]ame[%x]]');
foreach($tests as $test){
list($utf8,$safe) = $test;
......@@ -30,6 +34,15 @@ class safeFN_test extends UnitTestCase {
$this->assertEqual(SafeFN::decode($safe),$utf8);
}
}
function test2(){
$tests[] = array('совместимая','%td%ta%sy%t8%t1%td%te%t4%t8%sw%tr');
foreach($tests as $test){
list($utf8,$safe) = $test;
$this->assertEqual(SafeFN::decode($safe),$utf8);
}
}
}
//Setup VIM: ex: et ts=4 :
......@@ -16,9 +16,9 @@
class SafeFN {
// 'safe' characters are a superset of $plain, $pre_indicator and $post_indicator
private static $plain = '-/_0123456789abcdefghijklmnopqrstuvwxyz'; // these characters aren't converted
private static $plain = '-./[_0123456789abcdefghijklmnopqrstuvwxyz'; // these characters aren't converted
private static $pre_indicator = '%';
private static $post_indicator = '.';
private static $post_indicator = ']';
/**
* Convert an UTF-8 string to a safe ASCII String
......@@ -37,7 +37,7 @@ class SafeFN {
* - reduce codepoint value for non-printable ASCII characters (0x00 - 0x1f). Space becomes our zero.
* - convert reduced value to base36 (0-9a-z)
* - append $pre_indicator characater followed by base36 string to output, set converted flag
* continue to next character)
* (continue to next character)
*
* @param string $filename a utf8 string, should only include printable characters - not 0x00-0x1f
* @return string an encoded representation of $filename using only 'safe' ASCII characters
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment