Skip to content

Commit 02cd594

Browse files
committed
safe fallbacks when deserializing old SavedRequest
1 parent 9ae7b77 commit 02cd594

File tree

2 files changed

+27
-4
lines changed

2 files changed

+27
-4
lines changed

tomee/tomee-security/src/main/java/org/apache/tomee/security/http/SavedRequest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -133,23 +133,23 @@ public String getQueryString() {
133133

134134
@Override
135135
public Enumeration<String> getParameterNames() {
136-
return Collections.enumeration(parameterMap.keySet());
136+
return Collections.enumeration(getParameterMap().keySet());
137137
}
138138

139139
@Override
140140
public String[] getParameterValues(String name) {
141-
return parameterMap.get(name);
141+
return getParameterMap().get(name);
142142
}
143143

144144
@Override
145145
public String getParameter(String name) {
146-
String[] values = parameterMap.get(name);
146+
String[] values = getParameterValues(name);
147147
return values == null || values.length == 0 ? null : values[0];
148148
}
149149

150150
@Override
151151
public Map<String, String[]> getParameterMap() {
152-
return parameterMap;
152+
return parameterMap != null ? parameterMap : Collections.emptyMap();
153153
}
154154
};
155155
}

tomee/tomee-security/src/test/java/org/apache/tomee/security/http/SavedRequestTest.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,29 @@ public void deserialization() throws Exception {
7979
assertEquals("bar", request.getParameterMap().get("foo")[0]);
8080
}
8181

82+
@Test
83+
public void deserializationWithoutParameterMap() throws Exception {
84+
// JSON produced by older versions that did not include the parameterMap field
85+
String json = "{\"cookies\":[{\"name\":\"first\",\"value\":\"val1\",\"attributes\":{}},{\"name\":\"second\",\"value\":\"val2\",\"attributes\":{}}],\"headers\":{\"header1\":[\"h1val1\",\"h1val2\"],\"header2\":[\"h2val1\"]},\"method\":\"PATCH\",\"queryString\":\"foo=bar\",\"url\":\"http://example.com/foo\"}";
86+
SavedRequest request = SavedRequest.fromJson(json);
87+
88+
assertNotNull(request);
89+
assertEquals(2, request.getCookies().length);
90+
assertEquals("first", request.getCookies()[0].getName());
91+
assertEquals("val1", request.getCookies()[0].getValue());
92+
assertEquals("second", request.getCookies()[1].getName());
93+
assertEquals("val2", request.getCookies()[1].getValue());
94+
assertEquals(2, request.getHeaders().size());
95+
assertEquals(List.of("h1val1", "h1val2"), request.getHeaders().get("header1"));
96+
assertEquals(List.of("h2val1"), request.getHeaders().get("header2"));
97+
assertEquals("PATCH", request.getMethod());
98+
assertEquals("foo=bar", request.getQueryString());
99+
assertEquals("http://example.com/foo", request.getUrl());
100+
// parameterMap should be initialized to a safe default (e.g., empty map) rather than null
101+
assertNotNull(request.getParameterMap());
102+
assertTrue(request.getParameterMap().isEmpty());
103+
}
104+
82105
@Test
83106
public void cookieSerialization() throws Exception {
84107
JsonbConfig config = new JsonbConfig()

0 commit comments

Comments
 (0)