Skip to content

Commit 4755fa3

Browse files
dkaukovgregw
andauthored
Customizable error page buffer size (#11654)
Customizable error page buffer size --------- Co-authored-by: Greg Wilkins <[email protected]>
1 parent ed1cadc commit 4755fa3

File tree

1 file changed

+28
-2
lines changed
  • jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler

1 file changed

+28
-2
lines changed

jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ErrorHandler.java

+28-2
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ public class ErrorHandler implements Request.Handler
7575
boolean _showStacks = false;
7676
boolean _showCauses = false;
7777
boolean _showMessageInTitle = true;
78+
int _bufferSize = -1;
7879
String _defaultResponseMimeType = Type.TEXT_HTML.asString();
7980
HttpField _cacheControl = new PreEncodedHttpField(HttpHeader.CACHE_CONTROL, "must-revalidate,no-cache,no-store");
8081

@@ -198,8 +199,7 @@ else if (charsets.contains(StandardCharsets.ISO_8859_1))
198199
return false;
199200
}
200201

201-
int bufferSize = request.getConnectionMetaData().getHttpConfiguration().getOutputBufferSize();
202-
bufferSize = Math.min(8192, bufferSize); // TODO ?
202+
int bufferSize = getBufferSize() <= 0 ? computeBufferSize(request) : getBufferSize();
203203
ByteBufferPool byteBufferPool = request.getComponents().getByteBufferPool();
204204
RetainableByteBuffer buffer = byteBufferPool.acquire(bufferSize, false);
205205

@@ -266,6 +266,13 @@ else if (charsets.contains(StandardCharsets.ISO_8859_1))
266266
}
267267
}
268268

269+
protected int computeBufferSize(Request request)
270+
{
271+
int bufferSize = request.getConnectionMetaData().getHttpConfiguration().getOutputBufferSize();
272+
bufferSize = Math.min(8192, bufferSize);
273+
return bufferSize;
274+
}
275+
269276
protected void writeErrorHtml(Request request, Writer writer, Charset charset, int code, String message, Throwable cause, boolean showStacks) throws IOException
270277
{
271278
if (message == null)
@@ -530,6 +537,25 @@ public static Request.Handler getErrorHandler(Server server, ContextHandler cont
530537
return errorHandler;
531538
}
532539

540+
/**
541+
* @return Buffer size for entire error response. If error page is bigger than buffer size, it will be truncated.
542+
* With a -1 meaning that a heuristic will be used (e.g. min(8K, httpConfig.bufferSize))
543+
*/
544+
@ManagedAttribute("Buffer size for entire error response")
545+
public int getBufferSize()
546+
{
547+
return _bufferSize;
548+
}
549+
550+
/**
551+
* @param bufferSize Buffer size for entire error response. If error page is bigger than buffer size, it will be truncated.
552+
* With a -1 meaning that a heuristic will be used (e.g. min(8K, httpConfig.bufferSize))
553+
*/
554+
public void setBufferSize(int bufferSize)
555+
{
556+
this._bufferSize = bufferSize;
557+
}
558+
533559
public static class ErrorRequest extends Request.AttributesWrapper
534560
{
535561
private static final Set<String> ATTRIBUTES = Set.of(ERROR_MESSAGE, ERROR_EXCEPTION, ERROR_STATUS);

0 commit comments

Comments
 (0)