remove_dot_segments, кажется, превращает относительные пути в абсолютные пути

"5.2.4. Удалить сегменты точек" стандарта 66 объясняет, как преобразовать путь с . а также .. в один без.

IIUC, вход foo/../bar обрабатывается следующим образом.

  1. На шаге 1 (входной буфер, выходной буфер) инициализируются в ("foo/../bar", "")
  2. Шаг 2.Е применяется для получения ("/../bar", "foo")
  3. Шаг 2.С применяется для получения ("/bar", "")
  4. Шаг 2.Е применяется для получения ("", "/bar")
  5. Шаг 2 выходит из цикла
  6. На шаге 3 результат /bar,

Мне кажется странным, что вход является относительным путем, но выход является абсолютным путем.

Мне кажется, это можно исправить с помощью шага 1, установив isAbsolute в true, если входной буфер начинается с / и изменение шага 2.C из

C. если входной буфер начинается с префикса "/../" или "/..", где ".." - полный сегмент пути, то замените этот префикс на "/" во входном буфере и удалите последний сегмент и его предшествующий "/" (если есть) из буфера вывода; иначе,

в

C. если входной буфер начинается с префикса "/../" или "/..", где ".." - полный сегмент пути, то замените этот префикс на "/" во входном буфере и удалите последний сегмент и предшествующий ему символ "/" (если есть) из буфера вывода, затем, если не isAbsolute и буфер вывода пуст, удалите "/" из передней части буфера ввода; иначе,


Я неправильно понял спецификацию? Это желаемый результат по какой-то причине я не вижу?

Я соединил суть с реализацией Java моего понимания спецификации и предложенного мной "исправления".

0 ответов

Другие вопросы по тегам