You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by re...@apache.org on 2017/09/05 04:22:21 UTC
svn commit: r1807312 - in /jackrabbit/branches/2.14: ./
jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/AbstractWebdavServlet.java
jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/server/ContentCodingTest.java
Author: reschke
Date: Tue Sep 5 04:22:21 2017
New Revision: 1807312
URL: http://svn.apache.org/viewvc?rev=1807312&view=rev
Log:
JCR-4165: jackrabbit-server doesn't handle content-codings properly (ported to 2.14)
Reject all requests with non-empty Content-Encoding header fields with status 415.
Modified:
jackrabbit/branches/2.14/ (props changed)
jackrabbit/branches/2.14/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/AbstractWebdavServlet.java
jackrabbit/branches/2.14/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/server/ContentCodingTest.java
Propchange: jackrabbit/branches/2.14/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Sep 5 04:22:21 2017
@@ -1,3 +1,3 @@
/jackrabbit/branches/JCR-2272:1173165-1176545
/jackrabbit/sandbox/JCR-2415-lucene-3.0:1060860-1064038
-/jackrabbit/trunk:1776907,1776911-1776912,1776914,1776918,1779166,1779460,1779614,1779632,1780208,1780220,1780406,1785225,1786325,1786330,1787043,1787381,1792100,1792105,1792113,1792193,1793315,1793323,1793327,1793332,1796980,1797209,1797917,1798586,1799429,1799538,1799549,1799575,1800359,1800378,1800752,1802925,1807234
+/jackrabbit/trunk:1776907,1776911-1776912,1776914,1776918,1779166,1779460,1779614,1779632,1780208,1780220,1780406,1785225,1786325,1786330,1787043,1787381,1792100,1792105,1792113,1792193,1793315,1793323,1793327,1793332,1796980,1797209,1797917,1798586,1799429,1799538,1799549,1799575,1800359,1800378,1800752,1802925,1802977,1807234
Modified: jackrabbit/branches/2.14/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/AbstractWebdavServlet.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.14/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/AbstractWebdavServlet.java?rev=1807312&r1=1807311&r2=1807312&view=diff
==============================================================================
--- jackrabbit/branches/2.14/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/AbstractWebdavServlet.java (original)
+++ jackrabbit/branches/2.14/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/AbstractWebdavServlet.java Tue Sep 5 04:22:21 2017
@@ -88,6 +88,8 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Enumeration;
import java.util.List;
/**
@@ -283,6 +285,17 @@ abstract public class AbstractWebdavServ
return;
}
+ // JCR-4165: reject any content-coding in request until we can
+ // support it (see JCR-4166)
+ List<String> ces = getContentCodings(request);
+ if (!ces.isEmpty()) {
+ webdavResponse.setStatus(HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE);
+ webdavResponse.setHeader("Accept-Encoding", "identity");
+ webdavResponse.setContentType("text/plain; charset=UTF-8");
+ webdavResponse.getWriter().println("Content-Encodings not supported, but received: " + ces);
+ webdavResponse.getWriter().flush();
+ }
+
// check matching if=header for lock-token relevant operations
DavResource resource = getResourceFactory().createResource(webdavRequest.getRequestLocator(), webdavRequest, webdavResponse);
if (!isPreconditionValid(webdavRequest, resource)) {
@@ -1397,4 +1410,21 @@ abstract public class AbstractWebdavServ
protected OutputContext getOutputContext(DavServletResponse response, OutputStream out) {
return new OutputContextImpl(response, out);
}
+
+ private List<String> getContentCodings(HttpServletRequest request) {
+ List<String> result = Collections.emptyList();
+ for (@SuppressWarnings("unchecked")
+ Enumeration<String> ceh = request.getHeaders("Content-Encoding"); ceh.hasMoreElements();) {
+ for (String h : ceh.nextElement().split(",")) {
+ if (!h.trim().isEmpty()) {
+ if (result.isEmpty()) {
+ result = new ArrayList<String>();
+ }
+ result.add(h.trim());
+ }
+ }
+ }
+
+ return result;
+ }
}
Modified: jackrabbit/branches/2.14/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/server/ContentCodingTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.14/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/server/ContentCodingTest.java?rev=1807312&r1=1807311&r2=1807312&view=diff
==============================================================================
--- jackrabbit/branches/2.14/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/server/ContentCodingTest.java (original)
+++ jackrabbit/branches/2.14/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/server/ContentCodingTest.java Tue Sep 5 04:22:21 2017
@@ -54,7 +54,7 @@ public class ContentCodingTest extends W
entity.setContentEncoding(new BasicHeader("Content-Encoding", "qux"));
put.setEntity(entity);
status = this.client.execute(put, this.context).getStatusLine().getStatusCode();
- assertTrue("server must signal error for unknown content coding", status >= 400);
+ assertTrue("server must signal error for unknown content coding", status == 415);
} finally {
if (status / 2 == 100) {
delete(testUri);
@@ -77,7 +77,7 @@ public class ContentCodingTest extends W
entity.setContentEncoding(new BasicHeader("Content-Encoding", "gzip"));
put.setEntity(entity);
status = this.client.execute(put, this.context).getStatusLine().getStatusCode();
- assertTrue("server create or signal error", status == 201 || status >= 400);
+ assertTrue("server create or signal error", status == 201 || status == 415);
if (status / 2 == 100) {
// check length
HttpHead head = new HttpHead(testUri);
@@ -105,6 +105,6 @@ public class ContentCodingTest extends W
entity.setContentEncoding(new BasicHeader("Content-Encoding", "qux"));
propfind.setEntity(entity);
int status = this.client.execute(propfind, this.context).getStatusLine().getStatusCode();
- assertTrue("server must signal error for unknown content coding", status >= 400);
+ assertTrue("server must signal error for unknown content coding", status == 415);
}
}