@@ -75,6 +75,7 @@ public class ErrorHandler implements Request.Handler
75
75
boolean _showStacks = false ;
76
76
boolean _showCauses = false ;
77
77
boolean _showMessageInTitle = true ;
78
+ int _bufferSize = -1 ;
78
79
String _defaultResponseMimeType = Type .TEXT_HTML .asString ();
79
80
HttpField _cacheControl = new PreEncodedHttpField (HttpHeader .CACHE_CONTROL , "must-revalidate,no-cache,no-store" );
80
81
@@ -198,8 +199,7 @@ else if (charsets.contains(StandardCharsets.ISO_8859_1))
198
199
return false ;
199
200
}
200
201
201
- int bufferSize = request .getConnectionMetaData ().getHttpConfiguration ().getOutputBufferSize ();
202
- bufferSize = Math .min (8192 , bufferSize ); // TODO ?
202
+ int bufferSize = getBufferSize () <= 0 ? computeBufferSize (request ) : getBufferSize ();
203
203
ByteBufferPool byteBufferPool = request .getComponents ().getByteBufferPool ();
204
204
RetainableByteBuffer buffer = byteBufferPool .acquire (bufferSize , false );
205
205
@@ -266,6 +266,13 @@ else if (charsets.contains(StandardCharsets.ISO_8859_1))
266
266
}
267
267
}
268
268
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
+
269
276
protected void writeErrorHtml (Request request , Writer writer , Charset charset , int code , String message , Throwable cause , boolean showStacks ) throws IOException
270
277
{
271
278
if (message == null )
@@ -530,6 +537,25 @@ public static Request.Handler getErrorHandler(Server server, ContextHandler cont
530
537
return errorHandler ;
531
538
}
532
539
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
+
533
559
public static class ErrorRequest extends Request .AttributesWrapper
534
560
{
535
561
private static final Set <String > ATTRIBUTES = Set .of (ERROR_MESSAGE , ERROR_EXCEPTION , ERROR_STATUS );
0 commit comments