- 1
s.replaceAll("(\\/\\.\\.\\/)+", "/").replaceFirst("^((\\.)+\\/)+", "");
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+115
s.replaceAll("(\\/\\.\\.\\/)+", "/").replaceFirst("^((\\.)+\\/)+", "");
вот такие вот суровые паттерны
как я это увидел - мне сразу вид двух друзей переханных трактором вспомнился
String s="../../../a./../../files/file1.rar"; // надо убрать строки вида "../"
Анонимус 28.07.2010 14:37 # 0
3.14159265 28.07.2010 15:29 # 0
private static final Pattern p=Pattern.compile(....);//скорость выше
а во-вторых оно еще и работает неправильно )))
Lure Of Chaos 28.07.2010 20:53 # 0
3.14159265 29.07.2010 10:36 # 0
чего-то я не понял вашего поста :-\
надо поудалять все эти двоеточия - это задача, стоящая перед кодом. c чего вы взяли что он неправильный.
код обращается по http к странице, страница написана говено, потому выдает такой линк - нам надо убрать это, чтобы получить нормальный:
http://ip:port/files/file1.rar
>>>Лучше уж как-то по другому...
всмысле???
>>>Если надо что бы запрошенный файл был только в определенном пути
смысла этого предложения я так и не понял
3.14159265 29.07.2010 10:40 # 0
Lure Of Chaos 29.07.2010 18:42 # +2
а если нам нужно, что бы, скажем, запрошенный files/file1.rar был именно в, допустим /tmp/uploads, то делаем real_path("../../../a./../../files/file1.rar"), что превращается в (если правильно) "/tmp/uploads/files/file1.rar" и проверяем, что бы эта строка начиналась с "/tmp/uploads/"
если же мы пытаемся залезть куда не надо (например, точками добрались до корня, "/files/file1.rar"), то эта строка не начинается с "/tmp/uploads/"
3.14159265 29.07.2010 18:58 # 0
а вообще это говно уже переписано с использованием splita, isEquals("..") и счетчика )))
Gukl 29.07.2010 16:12 # +1
Denis Popov 29.07.2010 17:11 # 0
Только наебаться придется вдоволь.
da4ever 01.08.2010 13:37 # 0
и
../../../../files/file1.rar
одно и тоже