    void dotsAndEqualsInNameValueQuery() {
        QUERY_SEPARATORS.forEach(qs -> {
            final PathAndQuery res = parse("/?a=..=" + qs + "b=..=");
            assertThat(res).isNotNull();
            assertThat(res.query()).isEqualTo("a=..=" + qs + "b=..=");
            assertThat(QueryParams.fromQueryString(res.query(), true)).containsExactly(
                    Maps.immutableEntry("a", "..="),
                    Maps.immutableEntry("b", "..=")
            );

            final PathAndQuery res2 = parse("/?a==.." + qs + "b==..");
            assertThat(res2).isNotNull();
            assertThat(res2.query()).isEqualTo("a==.." + qs + "b==..");
            assertThat(QueryParams.fromQueryString(res2.query(), true)).containsExactly(
                    Maps.immutableEntry("a", "=.."),
                    Maps.immutableEntry("b", "=..")
            );

            final PathAndQuery res3 = parse("/?a==..=" + qs + "b==..=");
            assertThat(res3).isNotNull();
            assertThat(res3.query()).isEqualTo("a==..=" + qs + "b==..=");
            assertThat(QueryParams.fromQueryString(res3.query(), true)).containsExactly(
                    Maps.immutableEntry("a", "=..="),
                    Maps.immutableEntry("b", "=..=")
            );
        });
    }
The software uses external input to construct a pathname that is intended to identify a file or directory that is located underneath a restricted parent directory, but the software does not properly neutralize special elements within the pathname that can cause the pathname to resolve to a location that is outside of the restricted directory.