1. Java / Говнокод #3802

    +115

    1. 1
    s.replaceAll("(\\/\\.\\.\\/)+", "/").replaceFirst("^((\\.)+\\/)+", "");

    вот такие вот суровые паттерны
    как я это увидел - мне сразу вид двух друзей переханных трактором вспомнился

    String s="../../../a./../../files/file1.rar"; // надо убрать строки вида "../"

    Запостил: 3.14159265, 28 Июля 2010

    Комментарии (10) RSS

    • это т.н. "синдром зубочистки"
      Ответить
      • ну во-первых я в таких случаях пишу
        private static final Pattern p=Pattern.compile(....);//скорость выше
        а во-вторых оно еще и работает неправильно )))
        Ответить
    • убрать строки вида - ага, и путь будет неправильным. Лучше уж как-то по другому... Если надо что бы запрошенный файл был только в определенном пути - лучше узнать real_path и проверить его начало. Или как?
      Ответить
      • >>>убрать строки вида - ага, и путь будет неправильным.
        чего-то я не понял вашего поста :-\
        надо поудалять все эти двоеточия - это задача, стоящая перед кодом. c чего вы взяли что он неправильный.
        код обращается по http к странице, страница написана говено, потому выдает такой линк - нам надо убрать это, чтобы получить нормальный:
        http://ip:port/files/file1.rar

        >>>Лучше уж как-то по другому...
        всмысле???

        >>>Если надо что бы запрошенный файл был только в определенном пути
        смысла этого предложения я так и не понял
        Ответить
        • я привел пример кривого использования говнорегулярки, которое еще и работает неправильно, между прочим тут можно поступить проще и нагляднее, не используя длинных регулярок...
          Ответить
          • файл ../../../a./../../files/file1.rar не тот же, что a./files/file1.rar

            а если нам нужно, что бы, скажем, запрошенный files/file1.rar был именно в, допустим /tmp/uploads, то делаем real_path("../../../a./../../files/file1.rar"), что превращается в (если правильно) "/tmp/uploads/files/file1.rar" и проверяем, что бы эта строка начиналась с "/tmp/uploads/"
            если же мы пытаемся залезть куда не надо (например, точками добрались до корня, "/files/file1.rar"), то эта строка не начинается с "/tmp/uploads/"
            Ответить
            • согласен, я выше немного неточно написал

              а вообще это говно уже переписано с использованием splita, isEquals("..") и счетчика )))
              Ответить
    • Без регулярок делается.
      Ответить
      • Представь себе и без высокоуровневых языков делается.
        Только наебаться придется вдоволь.
        Ответить
    • ../../../a./../../files/file1.rar
      и
      ../../../../files/file1.rar
      одно и тоже
      Ответить

    Добавить комментарий