Skip to content

Commit 0cfe1d4

Browse files
javax.servlet-api 4.0.1
Updating javax.servlet-api to latest version. Updating classes with best-attempt implementations to account for new methods. Test scope functions were stubbed to throw UnsupportedOperationExceptions (replicating class behaviors) Adding a transitive exclude to javax.servlet.jsp-api to prefer the upgraded reference declared.
1 parent 3a00615 commit 0cfe1d4

File tree

7 files changed

+136
-3
lines changed

7 files changed

+136
-3
lines changed

pom.xml

+7-2
Original file line numberDiff line numberDiff line change
@@ -145,15 +145,20 @@
145145
<dependency>
146146
<groupId>javax.servlet</groupId>
147147
<artifactId>javax.servlet-api</artifactId>
148-
<!-- Note: v3.1.0+ causes compilation errors. So would have to fix to upgrade. -->
149-
<version>3.0.1</version>
148+
<version>4.0.1</version>
150149
<scope>provided</scope>
151150
</dependency>
152151
<dependency>
153152
<groupId>javax.servlet.jsp</groupId>
154153
<artifactId>javax.servlet.jsp-api</artifactId>
155154
<version>2.3.3</version>
156155
<scope>provided</scope>
156+
<exclusions>
157+
<exclusion>
158+
<groupId>javax.servlet</groupId>
159+
<artifactId>javax.servlet-api</artifactId>
160+
</exclusion>
161+
</exclusions>
157162
</dependency>
158163
<dependency>
159164
<groupId>com.io7m.xom</groupId>

src/main/java/org/owasp/esapi/waf/internal/InterceptingHTTPServletRequest.java

+27-1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import java.util.Enumeration;
2525
import java.util.Vector;
2626

27+
import javax.servlet.ReadListener;
2728
import javax.servlet.ServletInputStream;
2829
import javax.servlet.http.HttpServletRequest;
2930
import javax.servlet.http.HttpServletRequestWrapper;
@@ -171,18 +172,43 @@ public Enumeration getDictionaryParameterNames() {
171172
private class RAFInputStream extends ServletInputStream {
172173

173174
RandomAccessFile raf;
175+
boolean isDone = false;
176+
174177

175178
public RAFInputStream(RandomAccessFile raf) throws IOException {
176179
this.raf = raf;
177180
this.raf.seek(0);
178181
}
179182

180183
public int read() throws IOException {
181-
return raf.read();
184+
int rval = raf.read();
185+
186+
if (rval == -1) {
187+
isDone = true;
188+
}
189+
190+
return rval;
182191
}
183192

184193
public synchronized void reset() throws IOException {
185194
raf.seek(0);
195+
isDone = false;
196+
}
197+
198+
@Override
199+
public boolean isFinished() {
200+
return isDone;
201+
}
202+
203+
@Override
204+
public boolean isReady() {
205+
// No way to verify that the next read would be non-blocking.
206+
return false;
207+
}
208+
209+
@Override
210+
public void setReadListener(ReadListener readListener) {
211+
//NO-OP. Unused in this scope.
186212
}
187213
}
188214

src/main/java/org/owasp/esapi/waf/internal/InterceptingServletOutputStream.java

+10
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.io.RandomAccessFile;
2222

2323
import javax.servlet.ServletOutputStream;
24+
import javax.servlet.WriteListener;
2425

2526
/**
2627
* This class was inspired by ModSecurity for Java by Ivan Ristic. We hook
@@ -161,4 +162,13 @@ public void close() throws IOException {
161162

162163
}
163164

165+
@Override
166+
public boolean isReady() {
167+
return os.isReady();
168+
}
169+
170+
@Override
171+
public void setWriteListener(WriteListener writeListener) {
172+
os.setWriteListener(writeListener);
173+
}
164174
}

src/test/java/org/owasp/esapi/http/MockHttpServletRequest.java

+16
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
import javax.servlet.http.HttpServletRequest;
4747
import javax.servlet.http.HttpServletResponse;
4848
import javax.servlet.http.HttpSession;
49+
import javax.servlet.http.HttpUpgradeHandler;
4950
import javax.servlet.http.Part;
5051

5152
/**
@@ -737,4 +738,19 @@ public DispatcherType getDispatcherType() {
737738
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
738739
}
739740

741+
@Override
742+
public long getContentLengthLong() {
743+
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
744+
}
745+
746+
@Override
747+
public String changeSessionId() {
748+
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
749+
}
750+
751+
@Override
752+
public <T extends HttpUpgradeHandler> T upgrade(Class<T> handlerClass) throws IOException, ServletException {
753+
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
754+
}
755+
740756
}

src/test/java/org/owasp/esapi/http/MockHttpServletResponse.java

+16
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import java.util.Locale;
2525

2626
import javax.servlet.ServletOutputStream;
27+
import javax.servlet.WriteListener;
2728
import javax.servlet.http.Cookie;
2829
import javax.servlet.http.HttpServletResponse;
2930

@@ -279,6 +280,16 @@ public ServletOutputStream getOutputStream() throws IOException {
279280
public void write(int b) throws IOException {
280281
body.append((char)b);
281282
}
283+
284+
@Override
285+
public boolean isReady() {
286+
return false;
287+
}
288+
289+
@Override
290+
public void setWriteListener(WriteListener writeListener) {
291+
// NO OP
292+
}
282293
};
283294
}
284295

@@ -369,5 +380,10 @@ public void dump() {
369380
public Collection<String> getHeaders(String string) {
370381
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
371382
}
383+
384+
@Override
385+
public void setContentLengthLong(long len) {
386+
//Emulating setContentLenth method. NO OP
387+
}
372388

373389
}

src/test/java/org/owasp/esapi/http/MockServletContext.java

+41
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import javax.servlet.ServletContext;
3232
import javax.servlet.ServletException;
3333
import javax.servlet.ServletRegistration;
34+
import javax.servlet.ServletRegistration.Dynamic;
3435
import javax.servlet.SessionCookieConfig;
3536
import javax.servlet.SessionTrackingMode;
3637
import javax.servlet.descriptor.JspConfigDescriptor;
@@ -693,4 +694,44 @@ public ClassLoader getClassLoader() {
693694
public void declareRoles(String... strings) {
694695
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
695696
}
697+
698+
@Override
699+
public Dynamic addJspFile(String servletName, String jspFile) {
700+
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
701+
}
702+
703+
@Override
704+
public String getVirtualServerName() {
705+
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
706+
}
707+
708+
@Override
709+
public int getSessionTimeout() {
710+
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
711+
}
712+
713+
@Override
714+
public void setSessionTimeout(int sessionTimeout) {
715+
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
716+
}
717+
718+
@Override
719+
public String getRequestCharacterEncoding() {
720+
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
721+
}
722+
723+
@Override
724+
public void setRequestCharacterEncoding(String encoding) {
725+
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
726+
}
727+
728+
@Override
729+
public String getResponseCharacterEncoding() {
730+
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
731+
}
732+
733+
@Override
734+
public void setResponseCharacterEncoding(String encoding) {
735+
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
736+
}
696737
}

src/test/java/org/owasp/esapi/http/MockServletInputStream.java

+19
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package org.owasp.esapi.http;
1717

18+
import javax.servlet.ReadListener;
1819
import javax.servlet.ServletInputStream;
1920
import java.io.IOException;
2021

@@ -27,6 +28,8 @@ public class MockServletInputStream extends ServletInputStream {
2728
private byte[] body;
2829

2930
private int next;
31+
32+
private boolean isDone = false;
3033

3134
/**
3235
* constructor
@@ -45,7 +48,23 @@ public int read() throws IOException {
4548
if (next < body.length) {
4649
return body[next++];
4750
} else {
51+
isDone = true;
4852
return -1;
4953
}
5054
}
55+
56+
@Override
57+
public boolean isFinished() {
58+
return isDone;
59+
}
60+
61+
@Override
62+
public boolean isReady() {
63+
return false;
64+
}
65+
66+
@Override
67+
public void setReadListener(ReadListener readListener) {
68+
//NO OP
69+
}
5170
}

0 commit comments

Comments
 (0)