commit e3d510f54dd27b2a9674e8fbe051d69969d48a90 from: Aleksey Ryndin date: Tue Feb 13 14:18:54 2024 UTC Fix: keep slash at end of URL commit - ee0861c8f3edaf7e361fe2c90a2341dd89a1d984 commit + e3d510f54dd27b2a9674e8fbe051d69969d48a90 blob - 8b266eeb9ade6abe27c9aba7f8dd16369f028e4f blob + 13d42a89a2991acc499aef91057a92efaf9044db --- tests/test_request.cc +++ tests/test_request.cc @@ -59,18 +59,18 @@ TEST_START(test_request) IS_TRUE(path == path_literal) CASE_OK("gemini://host", ""); - CASE_OK("gemini://host/", ""); + CASE_OK("gemini://host/", "/"); CASE_OK("gemini://host/a", "a"); - CASE_OK("gemini://host/a/", "a"); + CASE_OK("gemini://host/a/", "a/"); CASE_OK("gemini://host/a/b", "a/b"); - CASE_OK("gemini://host/a/b/", "a/b"); + CASE_OK("gemini://host/a/b/", "a/b/"); CASE_OK("gemini://host:1965", ""); - CASE_OK("gemini://host:1965/", ""); + CASE_OK("gemini://host:1965/", "/"); CASE_OK("gemini://host:1965/a", "a"); - CASE_OK("gemini://host:1965/a/", "a"); + CASE_OK("gemini://host:1965/a/", "a/"); CASE_OK("gemini://host:1965/a/b", "a/b"); - CASE_OK("gemini://host:1965/a/b/", "a/b"); + CASE_OK("gemini://host:1965/a/b/", "a/b/"); CASE_OK("gemini://host/a/b/../c/./d", "a/c/d"); blob - e0d4eb17cf214b9012e7bfc4b6191d91444626cd blob + 12ac2a5cf55579b9ed761481c1a951dc0560f983 --- vostok/request.cc +++ vostok/request.cc @@ -173,10 +173,16 @@ Request::ParseResult Request::parse(/* out */ std::str } } + const bool is_slash_on_end = (*m_buffer.crbegin() == '/'); + // normalize '.' and '..' const auto ret = PathNormalization{}(current, m_buffer); if (ret == URL_OK) + { m_buffer.swap(path); + if (is_slash_on_end) + path.push_back('/'); + } return ret; }