commit dcaca981b94dd7d28ece80a616545a929232b1ca
Author: Nate Berkopec <nate.berkopec@gmail.com>
Date:   Tue Oct 12 08:38:40 2021 -0600

    Merge pull request from GHSA-48w2-rm65-62xx
    
    * Fix HTTP request smuggling vulnerability
    
    See GHSA-48w2-rm65-62xx or CVE-2021-41136 for more info.
    
    * 4.3.9 release note
    
    * 5.5.1 release note
    
    * 5.5.1
    
    (cherry picked from commit acdc3ae571dfae0e045cf09a295280127db65c7f)

diff --git a/ext/puma_http11/http11_parser.c b/ext/puma_http11/http11_parser.c
index 928cbc935b40..e8c7cc3c3935 100644
--- a/ext/puma_http11/http11_parser.c
+++ b/ext/puma_http11/http11_parser.c
@@ -1,5 +1,5 @@
 
-#line 1 "ext/http11/http11_parser.rl"
+#line 1 "ext/puma_http11/http11_parser.rl"
 /**
  * Copyright (c) 2005 Zed A. Shaw
  * You can redistribute it and/or modify it under the same terms as Ruby.
@@ -32,12 +32,12 @@ static void snake_upcase_char(char *c)
 /** Machine **/
 
 
-#line 78 "ext/http11/http11_parser.rl"
+#line 80 "ext/puma_http11/http11_parser.rl"
 
 
 /** Data **/
 
-#line 39 "ext/http11/http11_parser.c"
+#line 41 "ext/puma_http11/http11_parser.c"
 static const int puma_parser_start = 1;
 static const int puma_parser_first_final = 57;
 static const int puma_parser_error = 0;
@@ -45,17 +45,17 @@ static const int puma_parser_error = 0;
 static const int puma_parser_en_main = 1;
 
 
-#line 82 "ext/http11/http11_parser.rl"
+#line 84 "ext/puma_http11/http11_parser.rl"
 
 int puma_parser_init(puma_parser *parser)  {
   int cs = 0;
   
-#line 52 "ext/http11/http11_parser.c"
+#line 54 "ext/puma_http11/http11_parser.c"
 	{
 	cs = puma_parser_start;
 	}
 
-#line 86 "ext/http11/http11_parser.rl"
+#line 88 "ext/puma_http11/http11_parser.rl"
   parser->cs = cs;
   parser->body_start = 0;
   parser->content_len = 0;
@@ -84,7 +84,7 @@ size_t puma_parser_execute(puma_parser *parser, const char *buffer, size_t len,
   assert(pe - p == len - off && "pointers aren't same distance");
 
   
-#line 86 "ext/http11/http11_parser.c"
+#line 88 "ext/puma_http11/http11_parser.c"
 	{
 	if ( p == pe )
 		goto _test_eof;
@@ -108,14 +108,14 @@ st0:
 cs = 0;
 	goto _out;
 tr0:
-#line 34 "ext/http11/http11_parser.rl"
+#line 36 "ext/puma_http11/http11_parser.rl"
 	{ MARK(mark, p); }
 	goto st2;
 st2:
 	if ( ++p == pe )
 		goto _test_eof2;
 case 2:
-#line 117 "ext/http11/http11_parser.c"
+#line 119 "ext/puma_http11/http11_parser.c"
 	switch( (*p) ) {
 		case 32: goto tr2;
 		case 36: goto st38;
@@ -131,7 +131,7 @@ case 2:
 		goto st38;
 	goto st0;
 tr2:
-#line 47 "ext/http11/http11_parser.rl"
+#line 49 "ext/puma_http11/http11_parser.rl"
 	{ 
     parser->request_method(parser, PTR_TO(mark), LEN(mark, p));
   }
@@ -140,7 +140,7 @@ st3:
 	if ( ++p == pe )
 		goto _test_eof3;
 case 3:
-#line 142 "ext/http11/http11_parser.c"
+#line 144 "ext/puma_http11/http11_parser.c"
 	switch( (*p) ) {
 		case 42: goto tr4;
 		case 43: goto tr5;
@@ -157,67 +157,67 @@ case 3:
 		goto tr5;
 	goto st0;
 tr4:
-#line 34 "ext/http11/http11_parser.rl"
+#line 36 "ext/puma_http11/http11_parser.rl"
 	{ MARK(mark, p); }
 	goto st4;
 st4:
 	if ( ++p == pe )
 		goto _test_eof4;
 case 4:
-#line 166 "ext/http11/http11_parser.c"
+#line 168 "ext/puma_http11/http11_parser.c"
 	switch( (*p) ) {
 		case 32: goto tr8;
 		case 35: goto tr9;
 	}
 	goto st0;
 tr8:
-#line 50 "ext/http11/http11_parser.rl"
+#line 52 "ext/puma_http11/http11_parser.rl"
 	{ 
     parser->request_uri(parser, PTR_TO(mark), LEN(mark, p));
   }
 	goto st5;
 tr31:
-#line 34 "ext/http11/http11_parser.rl"
+#line 36 "ext/puma_http11/http11_parser.rl"
 	{ MARK(mark, p); }
-#line 53 "ext/http11/http11_parser.rl"
+#line 55 "ext/puma_http11/http11_parser.rl"
 	{
     parser->fragment(parser, PTR_TO(mark), LEN(mark, p));
   }
 	goto st5;
 tr34:
-#line 53 "ext/http11/http11_parser.rl"
+#line 55 "ext/puma_http11/http11_parser.rl"
 	{
     parser->fragment(parser, PTR_TO(mark), LEN(mark, p));
   }
 	goto st5;
 tr42:
-#line 66 "ext/http11/http11_parser.rl"
+#line 68 "ext/puma_http11/http11_parser.rl"
 	{
     parser->request_path(parser, PTR_TO(mark), LEN(mark,p));
   }
-#line 50 "ext/http11/http11_parser.rl"
+#line 52 "ext/puma_http11/http11_parser.rl"
 	{ 
     parser->request_uri(parser, PTR_TO(mark), LEN(mark, p));
   }
 	goto st5;
 tr53:
-#line 57 "ext/http11/http11_parser.rl"
+#line 59 "ext/puma_http11/http11_parser.rl"
 	{ MARK(query_start, p); }
-#line 58 "ext/http11/http11_parser.rl"
+#line 60 "ext/puma_http11/http11_parser.rl"
 	{ 
     parser->query_string(parser, PTR_TO(query_start), LEN(query_start, p));
   }
-#line 50 "ext/http11/http11_parser.rl"
+#line 52 "ext/puma_http11/http11_parser.rl"
 	{ 
     parser->request_uri(parser, PTR_TO(mark), LEN(mark, p));
   }
 	goto st5;
 tr57:
-#line 58 "ext/http11/http11_parser.rl"
+#line 60 "ext/puma_http11/http11_parser.rl"
 	{ 
     parser->query_string(parser, PTR_TO(query_start), LEN(query_start, p));
   }
-#line 50 "ext/http11/http11_parser.rl"
+#line 52 "ext/puma_http11/http11_parser.rl"
 	{ 
     parser->request_uri(parser, PTR_TO(mark), LEN(mark, p));
   }
@@ -226,19 +226,19 @@ st5:
 	if ( ++p == pe )
 		goto _test_eof5;
 case 5:
-#line 228 "ext/http11/http11_parser.c"
+#line 230 "ext/puma_http11/http11_parser.c"
 	if ( (*p) == 72 )
 		goto tr10;
 	goto st0;
 tr10:
-#line 34 "ext/http11/http11_parser.rl"
+#line 36 "ext/puma_http11/http11_parser.rl"
 	{ MARK(mark, p); }
 	goto st6;
 st6:
 	if ( ++p == pe )
 		goto _test_eof6;
 case 6:
-#line 240 "ext/http11/http11_parser.c"
+#line 242 "ext/puma_http11/http11_parser.c"
 	if ( (*p) == 84 )
 		goto st7;
 	goto st0;
@@ -296,21 +296,21 @@ case 13:
 		goto st13;
 	goto st0;
 tr18:
-#line 62 "ext/http11/http11_parser.rl"
+#line 64 "ext/puma_http11/http11_parser.rl"
 	{	
     parser->http_version(parser, PTR_TO(mark), LEN(mark, p));
   }
 	goto st14;
 tr26:
-#line 43 "ext/http11/http11_parser.rl"
+#line 45 "ext/puma_http11/http11_parser.rl"
 	{ MARK(mark, p); }
-#line 44 "ext/http11/http11_parser.rl"
+#line 46 "ext/puma_http11/http11_parser.rl"
 	{
     parser->http_field(parser, PTR_TO(field_start), parser->field_len, PTR_TO(mark), LEN(mark, p));
   }
 	goto st14;
 tr29:
-#line 44 "ext/http11/http11_parser.rl"
+#line 46 "ext/puma_http11/http11_parser.rl"
 	{
     parser->http_field(parser, PTR_TO(field_start), parser->field_len, PTR_TO(mark), LEN(mark, p));
   }
@@ -319,7 +319,7 @@ st14:
 	if ( ++p == pe )
 		goto _test_eof14;
 case 14:
-#line 321 "ext/http11/http11_parser.c"
+#line 323 "ext/puma_http11/http11_parser.c"
 	if ( (*p) == 10 )
 		goto st15;
 	goto st0;
@@ -359,7 +359,7 @@ case 16:
 		goto tr22;
 	goto st0;
 tr22:
-#line 70 "ext/http11/http11_parser.rl"
+#line 72 "ext/puma_http11/http11_parser.rl"
 	{ 
     parser->body_start = p - buffer + 1; 
     parser->header_done(parser, p + 1, pe - p - 1);
@@ -370,23 +370,23 @@ st57:
 	if ( ++p == pe )
 		goto _test_eof57;
 case 57:
-#line 372 "ext/http11/http11_parser.c"
+#line 374 "ext/puma_http11/http11_parser.c"
 	goto st0;
 tr21:
-#line 37 "ext/http11/http11_parser.rl"
+#line 39 "ext/puma_http11/http11_parser.rl"
 	{ MARK(field_start, p); }
-#line 38 "ext/http11/http11_parser.rl"
+#line 40 "ext/puma_http11/http11_parser.rl"
 	{ snake_upcase_char((char *)p); }
 	goto st17;
 tr23:
-#line 38 "ext/http11/http11_parser.rl"
+#line 40 "ext/puma_http11/http11_parser.rl"
 	{ snake_upcase_char((char *)p); }
 	goto st17;
 st17:
 	if ( ++p == pe )
 		goto _test_eof17;
 case 17:
-#line 388 "ext/http11/http11_parser.c"
+#line 390 "ext/puma_http11/http11_parser.c"
 	switch( (*p) ) {
 		case 33: goto tr23;
 		case 58: goto tr24;
@@ -412,71 +412,78 @@ case 17:
 		goto tr23;
 	goto st0;
 tr24:
-#line 39 "ext/http11/http11_parser.rl"
+#line 41 "ext/puma_http11/http11_parser.rl"
 	{ 
     parser->field_len = LEN(field_start, p);
   }
 	goto st18;
 tr27:
-#line 43 "ext/http11/http11_parser.rl"
+#line 45 "ext/puma_http11/http11_parser.rl"
 	{ MARK(mark, p); }
 	goto st18;
 st18:
 	if ( ++p == pe )
 		goto _test_eof18;
 case 18:
-#line 427 "ext/http11/http11_parser.c"
+#line 429 "ext/puma_http11/http11_parser.c"
 	switch( (*p) ) {
+		case 9: goto tr25;
 		case 13: goto tr26;
 		case 32: goto tr27;
 	}
-	goto tr25;
+	if ( 33 <= (*p) && (*p) <= 126 )
+		goto tr25;
+	goto st0;
 tr25:
-#line 43 "ext/http11/http11_parser.rl"
+#line 45 "ext/puma_http11/http11_parser.rl"
 	{ MARK(mark, p); }
 	goto st19;
 st19:
 	if ( ++p == pe )
 		goto _test_eof19;
 case 19:
-#line 441 "ext/http11/http11_parser.c"
-	if ( (*p) == 13 )
-		goto tr29;
-	goto st19;
+#line 446 "ext/puma_http11/http11_parser.c"
+	switch( (*p) ) {
+		case 9: goto st19;
+		case 13: goto tr29;
+	}
+	if ( 32 <= (*p) && (*p) <= 126 )
+		goto st19;
+	goto st0;
 tr9:
-#line 50 "ext/http11/http11_parser.rl"
+#line 52 "ext/puma_http11/http11_parser.rl"
 	{ 
     parser->request_uri(parser, PTR_TO(mark), LEN(mark, p));
   }
 	goto st20;
 tr43:
-#line 66 "ext/http11/http11_parser.rl"
+#line 68 "ext/puma_http11/http11_parser.rl"
 	{
     parser->request_path(parser, PTR_TO(mark), LEN(mark,p));
   }
-#line 50 "ext/http11/http11_parser.rl"
+#line 52 "ext/puma_http11/http11_parser.rl"
 	{ 
     parser->request_uri(parser, PTR_TO(mark), LEN(mark, p));
   }
 	goto st20;
 tr54:
-#line 57 "ext/http11/http11_parser.rl"
+#line 59 "ext/puma_http11/http11_parser.rl"
 	{ MARK(query_start, p); }
-#line 58 "ext/http11/http11_parser.rl"
+#line 60 "ext/puma_http11/http11_parser.rl"
 	{ 
     parser->query_string(parser, PTR_TO(query_start), LEN(query_start, p));
   }
-#line 50 "ext/http11/http11_parser.rl"
+#line 52 "ext/puma_http11/http11_parser.rl"
 	{ 
     parser->request_uri(parser, PTR_TO(mark), LEN(mark, p));
   }
 	goto st20;
 tr58:
-#line 58 "ext/http11/http11_parser.rl"
+#line 60 "ext/puma_http11/http11_parser.rl"
 	{ 
     parser->query_string(parser, PTR_TO(query_start), LEN(query_start, p));
   }
-#line 50 "ext/http11/http11_parser.rl"
+#line 52 "ext/puma_http11/http11_parser.rl"
 	{ 
     parser->request_uri(parser, PTR_TO(mark), LEN(mark, p));
   }
@@ -485,7 +492,7 @@ st20:
 	if ( ++p == pe )
 		goto _test_eof20;
 case 20:
-#line 487 "ext/http11/http11_parser.c"
+#line 496 "ext/puma_http11/http11_parser.c"
 	switch( (*p) ) {
 		case 32: goto tr31;
 		case 37: goto tr32;
@@ -500,14 +507,14 @@ case 20:
 		goto st0;
 	goto tr30;
 tr30:
-#line 34 "ext/http11/http11_parser.rl"
+#line 36 "ext/puma_http11/http11_parser.rl"
 	{ MARK(mark, p); }
 	goto st21;
 st21:
 	if ( ++p == pe )
 		goto _test_eof21;
 case 21:
-#line 509 "ext/http11/http11_parser.c"
+#line 518 "ext/puma_http11/http11_parser.c"
 	switch( (*p) ) {
 		case 32: goto tr34;
 		case 37: goto st22;
@@ -522,14 +529,14 @@ case 21:
 		goto st0;
 	goto st21;
 tr32:
-#line 34 "ext/http11/http11_parser.rl"
+#line 36 "ext/puma_http11/http11_parser.rl"
 	{ MARK(mark, p); }
 	goto st22;
 st22:
 	if ( ++p == pe )
 		goto _test_eof22;
 case 22:
-#line 531 "ext/http11/http11_parser.c"
+#line 540 "ext/puma_http11/http11_parser.c"
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
 			goto st23;
@@ -553,14 +560,14 @@ case 23:
 		goto st21;
 	goto st0;
 tr5:
-#line 34 "ext/http11/http11_parser.rl"
+#line 36 "ext/puma_http11/http11_parser.rl"
 	{ MARK(mark, p); }
 	goto st24;
 st24:
 	if ( ++p == pe )
 		goto _test_eof24;
 case 24:
-#line 562 "ext/http11/http11_parser.c"
+#line 571 "ext/puma_http11/http11_parser.c"
 	switch( (*p) ) {
 		case 43: goto st24;
 		case 58: goto st25;
@@ -578,14 +585,14 @@ case 24:
 		goto st24;
 	goto st0;
 tr7:
-#line 34 "ext/http11/http11_parser.rl"
+#line 36 "ext/puma_http11/http11_parser.rl"
 	{ MARK(mark, p); }
 	goto st25;
 st25:
 	if ( ++p == pe )
 		goto _test_eof25;
 case 25:
-#line 587 "ext/http11/http11_parser.c"
+#line 596 "ext/puma_http11/http11_parser.c"
 	switch( (*p) ) {
 		case 32: goto tr8;
 		case 34: goto st0;
@@ -625,14 +632,14 @@ case 27:
 		goto st25;
 	goto st0;
 tr6:
-#line 34 "ext/http11/http11_parser.rl"
+#line 36 "ext/puma_http11/http11_parser.rl"
 	{ MARK(mark, p); }
 	goto st28;
 st28:
 	if ( ++p == pe )
 		goto _test_eof28;
 case 28:
-#line 634 "ext/http11/http11_parser.c"
+#line 643 "ext/puma_http11/http11_parser.c"
 	switch( (*p) ) {
 		case 32: goto tr42;
 		case 34: goto st0;
@@ -674,7 +681,7 @@ case 30:
 		goto st28;
 	goto st0;
 tr45:
-#line 66 "ext/http11/http11_parser.rl"
+#line 68 "ext/puma_http11/http11_parser.rl"
 	{
     parser->request_path(parser, PTR_TO(mark), LEN(mark,p));
   }
@@ -683,7 +690,7 @@ st31:
 	if ( ++p == pe )
 		goto _test_eof31;
 case 31:
-#line 685 "ext/http11/http11_parser.c"
+#line 694 "ext/puma_http11/http11_parser.c"
 	switch( (*p) ) {
 		case 32: goto tr8;
 		case 34: goto st0;
@@ -724,7 +731,7 @@ case 33:
 		goto st31;
 	goto st0;
 tr46:
-#line 66 "ext/http11/http11_parser.rl"
+#line 68 "ext/puma_http11/http11_parser.rl"
 	{
     parser->request_path(parser, PTR_TO(mark), LEN(mark,p));
   }
@@ -733,7 +740,7 @@ st34:
 	if ( ++p == pe )
 		goto _test_eof34;
 case 34:
-#line 735 "ext/http11/http11_parser.c"
+#line 744 "ext/puma_http11/http11_parser.c"
 	switch( (*p) ) {
 		case 32: goto tr53;
 		case 34: goto st0;
@@ -747,14 +754,14 @@ case 34:
 		goto st0;
 	goto tr52;
 tr52:
-#line 57 "ext/http11/http11_parser.rl"
+#line 59 "ext/puma_http11/http11_parser.rl"
 	{ MARK(query_start, p); }
 	goto st35;
 st35:
 	if ( ++p == pe )
 		goto _test_eof35;
 case 35:
-#line 756 "ext/http11/http11_parser.c"
+#line 765 "ext/puma_http11/http11_parser.c"
 	switch( (*p) ) {
 		case 32: goto tr57;
 		case 34: goto st0;
@@ -768,14 +775,14 @@ case 35:
 		goto st0;
 	goto st35;
 tr55:
-#line 57 "ext/http11/http11_parser.rl"
+#line 59 "ext/puma_http11/http11_parser.rl"
 	{ MARK(query_start, p); }
 	goto st36;
 st36:
 	if ( ++p == pe )
 		goto _test_eof36;
 case 36:
-#line 777 "ext/http11/http11_parser.c"
+#line 786 "ext/puma_http11/http11_parser.c"
 	if ( (*p) < 65 ) {
 		if ( 48 <= (*p) && (*p) <= 57 )
 			goto st37;
@@ -1191,7 +1198,7 @@ case 56:
 	_out: {}
 	}
 
-#line 114 "ext/http11/http11_parser.rl"
+#line 116 "ext/puma_http11/http11_parser.rl"
 
   if (!puma_parser_has_error(parser))
     parser->cs = cs;
diff --git a/ext/puma_http11/http11_parser_common.rl b/ext/puma_http11/http11_parser_common.rl
index 44468c69a5c1..2d14c015e05a 100644
--- a/ext/puma_http11/http11_parser_common.rl
+++ b/ext/puma_http11/http11_parser_common.rl
@@ -43,7 +43,7 @@
 
   field_name = ( token -- ":" )+ >start_field $snake_upcase_field %write_field;
 
-  field_value = any* >start_value %write_value;
+  field_value = ( print | "\t" )* >start_value %write_value;
 
   message_header = field_name ":" " "* field_value :> CRLF;
 
diff --git a/ext/puma_http11/org/jruby/puma/Http11Parser.java b/ext/puma_http11/org/jruby/puma/Http11Parser.java
index c4f6d3259980..d19c2cb70b1a 100644
--- a/ext/puma_http11/org/jruby/puma/Http11Parser.java
+++ b/ext/puma_http11/org/jruby/puma/Http11Parser.java
@@ -32,10 +32,10 @@ private static short[] init__puma_parser_key_offsets_0()
 {
 	return new short [] {
 	    0,    0,    8,   17,   27,   29,   30,   31,   32,   33,   34,   36,
-	   39,   41,   44,   45,   61,   62,   78,   80,   81,   90,   99,  105,
-	  111,  121,  130,  136,  142,  153,  159,  165,  175,  181,  187,  196,
-	  205,  211,  217,  226,  235,  244,  253,  262,  271,  280,  289,  298,
-	  307,  316,  325,  334,  343,  352,  361,  370,  379,  380
+	   39,   41,   44,   45,   61,   62,   78,   83,   87,   96,  105,  111,
+	  117,  127,  136,  142,  148,  159,  165,  171,  181,  187,  193,  202,
+	  211,  217,  223,  232,  241,  250,  259,  268,  277,  286,  295,  304,
+	  313,  322,  331,  340,  349,  358,  367,  376,  385,  386
 	};
 }
 
@@ -51,20 +51,19 @@ private static char[] init__puma_parser_trans_keys_0()
 	   46,   48,   57,   48,   57,   13,   48,   57,   10,   13,   33,  124,
 	  126,   35,   39,   42,   43,   45,   46,   48,   57,   65,   90,   94,
 	  122,   10,   33,   58,  124,  126,   35,   39,   42,   43,   45,   46,
-	   48,   57,   65,   90,   94,  122,   13,   32,   13,   32,   37,   60,
-	   62,  127,    0,   31,   34,   35,   32,   37,   60,   62,  127,    0,
-	   31,   34,   35,   48,   57,   65,   70,   97,  102,   48,   57,   65,
-	   70,   97,  102,   43,   58,   45,   46,   48,   57,   65,   90,   97,
-	  122,   32,   34,   35,   37,   60,   62,  127,    0,   31,   48,   57,
-	   65,   70,   97,  102,   48,   57,   65,   70,   97,  102,   32,   34,
-	   35,   37,   59,   60,   62,   63,  127,    0,   31,   48,   57,   65,
-	   70,   97,  102,   48,   57,   65,   70,   97,  102,   32,   34,   35,
-	   37,   60,   62,   63,  127,    0,   31,   48,   57,   65,   70,   97,
-	  102,   48,   57,   65,   70,   97,  102,   32,   34,   35,   37,   60,
-	   62,  127,    0,   31,   32,   34,   35,   37,   60,   62,  127,    0,
+	   48,   57,   65,   90,   94,  122,    9,   13,   32,   33,  126,    9,
+	   13,   32,  126,   32,   37,   60,   62,  127,    0,   31,   34,   35,
+	   32,   37,   60,   62,  127,    0,   31,   34,   35,   48,   57,   65,
+	   70,   97,  102,   48,   57,   65,   70,   97,  102,   43,   58,   45,
+	   46,   48,   57,   65,   90,   97,  122,   32,   34,   35,   37,   60,
+	   62,  127,    0,   31,   48,   57,   65,   70,   97,  102,   48,   57,
+	   65,   70,   97,  102,   32,   34,   35,   37,   59,   60,   62,   63,
+	  127,    0,   31,   48,   57,   65,   70,   97,  102,   48,   57,   65,
+	   70,   97,  102,   32,   34,   35,   37,   60,   62,   63,  127,    0,
 	   31,   48,   57,   65,   70,   97,  102,   48,   57,   65,   70,   97,
-	  102,   32,   36,   95,   45,   46,   48,   57,   65,   90,   32,   36,
-	   95,   45,   46,   48,   57,   65,   90,   32,   36,   95,   45,   46,
+	  102,   32,   34,   35,   37,   60,   62,  127,    0,   31,   32,   34,
+	   35,   37,   60,   62,  127,    0,   31,   48,   57,   65,   70,   97,
+	  102,   48,   57,   65,   70,   97,  102,   32,   36,   95,   45,   46,
 	   48,   57,   65,   90,   32,   36,   95,   45,   46,   48,   57,   65,
 	   90,   32,   36,   95,   45,   46,   48,   57,   65,   90,   32,   36,
 	   95,   45,   46,   48,   57,   65,   90,   32,   36,   95,   45,   46,
@@ -76,7 +75,9 @@ private static char[] init__puma_parser_trans_keys_0()
 	   95,   45,   46,   48,   57,   65,   90,   32,   36,   95,   45,   46,
 	   48,   57,   65,   90,   32,   36,   95,   45,   46,   48,   57,   65,
 	   90,   32,   36,   95,   45,   46,   48,   57,   65,   90,   32,   36,
-	   95,   45,   46,   48,   57,   65,   90,   32,    0
+	   95,   45,   46,   48,   57,   65,   90,   32,   36,   95,   45,   46,
+	   48,   57,   65,   90,   32,   36,   95,   45,   46,   48,   57,   65,
+	   90,   32,    0
 	};
 }
 
@@ -87,7 +88,7 @@ private static byte[] init__puma_parser_single_lengths_0()
 {
 	return new byte [] {
 	    0,    2,    3,    4,    2,    1,    1,    1,    1,    1,    0,    1,
-	    0,    1,    1,    4,    1,    4,    2,    1,    5,    5,    0,    0,
+	    0,    1,    1,    4,    1,    4,    3,    2,    5,    5,    0,    0,
 	    2,    7,    0,    0,    9,    0,    0,    8,    0,    0,    7,    7,
 	    0,    0,    3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
 	    3,    3,    3,    3,    3,    3,    3,    3,    1,    0
@@ -101,7 +102,7 @@ private static byte[] init__puma_parser_range_lengths_0()
 {
 	return new byte [] {
 	    0,    3,    3,    3,    0,    0,    0,    0,    0,    0,    1,    1,
-	    1,    1,    0,    6,    0,    6,    0,    0,    2,    2,    3,    3,
+	    1,    1,    0,    6,    0,    6,    1,    1,    2,    2,    3,    3,
 	    4,    1,    3,    3,    1,    3,    3,    1,    3,    3,    1,    1,
 	    3,    3,    3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
 	    3,    3,    3,    3,    3,    3,    3,    3,    0,    0
@@ -115,10 +116,10 @@ private static short[] init__puma_parser_index_offsets_0()
 {
 	return new short [] {
 	    0,    0,    6,   13,   21,   24,   26,   28,   30,   32,   34,   36,
-	   39,   41,   44,   46,   57,   59,   70,   73,   75,   83,   91,   95,
-	   99,  106,  115,  119,  123,  134,  138,  142,  152,  156,  160,  169,
-	  178,  182,  186,  193,  200,  207,  214,  221,  228,  235,  242,  249,
-	  256,  263,  270,  277,  284,  291,  298,  305,  312,  314
+	   39,   41,   44,   46,   57,   59,   70,   75,   79,   87,   95,   99,
+	  103,  110,  119,  123,  127,  138,  142,  146,  156,  160,  164,  173,
+	  182,  186,  190,  197,  204,  211,  218,  225,  232,  239,  246,  253,
+	  260,  267,  274,  281,  288,  295,  302,  309,  316,  318
 	};
 }
 
@@ -133,28 +134,28 @@ private static byte[] init__puma_parser_indicies_0()
 	   10,    1,   11,    1,   12,    1,   13,    1,   14,    1,   15,    1,
 	   16,   15,    1,   17,    1,   18,   17,    1,   19,    1,   20,   21,
 	   21,   21,   21,   21,   21,   21,   21,   21,    1,   22,    1,   23,
-	   24,   23,   23,   23,   23,   23,   23,   23,   23,    1,   26,   27,
-	   25,   29,   28,   30,   32,    1,    1,    1,    1,    1,   31,   33,
-	   35,    1,    1,    1,    1,    1,   34,   36,   36,   36,    1,   34,
-	   34,   34,    1,   37,   38,   37,   37,   37,   37,    1,    8,    1,
-	    9,   39,    1,    1,    1,    1,   38,   40,   40,   40,    1,   38,
-	   38,   38,    1,   41,    1,   43,   44,   45,    1,    1,   46,    1,
-	    1,   42,   47,   47,   47,    1,   42,   42,   42,    1,    8,    1,
-	    9,   49,    1,    1,   50,    1,    1,   48,   51,   51,   51,    1,
-	   48,   48,   48,    1,   52,    1,   54,   55,    1,    1,    1,    1,
-	   53,   56,    1,   58,   59,    1,    1,    1,    1,   57,   60,   60,
-	   60,    1,   57,   57,   57,    1,    2,   61,   61,   61,   61,   61,
-	    1,    2,   62,   62,   62,   62,   62,    1,    2,   63,   63,   63,
-	   63,   63,    1,    2,   64,   64,   64,   64,   64,    1,    2,   65,
-	   65,   65,   65,   65,    1,    2,   66,   66,   66,   66,   66,    1,
-	    2,   67,   67,   67,   67,   67,    1,    2,   68,   68,   68,   68,
-	   68,    1,    2,   69,   69,   69,   69,   69,    1,    2,   70,   70,
-	   70,   70,   70,    1,    2,   71,   71,   71,   71,   71,    1,    2,
-	   72,   72,   72,   72,   72,    1,    2,   73,   73,   73,   73,   73,
-	    1,    2,   74,   74,   74,   74,   74,    1,    2,   75,   75,   75,
-	   75,   75,    1,    2,   76,   76,   76,   76,   76,    1,    2,   77,
-	   77,   77,   77,   77,    1,    2,   78,   78,   78,   78,   78,    1,
-	    2,    1,    1,    0
+	   24,   23,   23,   23,   23,   23,   23,   23,   23,    1,   25,   26,
+	   27,   25,    1,   28,   29,   28,    1,   30,   32,    1,    1,    1,
+	    1,    1,   31,   33,   35,    1,    1,    1,    1,    1,   34,   36,
+	   36,   36,    1,   34,   34,   34,    1,   37,   38,   37,   37,   37,
+	   37,    1,    8,    1,    9,   39,    1,    1,    1,    1,   38,   40,
+	   40,   40,    1,   38,   38,   38,    1,   41,    1,   43,   44,   45,
+	    1,    1,   46,    1,    1,   42,   47,   47,   47,    1,   42,   42,
+	   42,    1,    8,    1,    9,   49,    1,    1,   50,    1,    1,   48,
+	   51,   51,   51,    1,   48,   48,   48,    1,   52,    1,   54,   55,
+	    1,    1,    1,    1,   53,   56,    1,   58,   59,    1,    1,    1,
+	    1,   57,   60,   60,   60,    1,   57,   57,   57,    1,    2,   61,
+	   61,   61,   61,   61,    1,    2,   62,   62,   62,   62,   62,    1,
+	    2,   63,   63,   63,   63,   63,    1,    2,   64,   64,   64,   64,
+	   64,    1,    2,   65,   65,   65,   65,   65,    1,    2,   66,   66,
+	   66,   66,   66,    1,    2,   67,   67,   67,   67,   67,    1,    2,
+	   68,   68,   68,   68,   68,    1,    2,   69,   69,   69,   69,   69,
+	    1,    2,   70,   70,   70,   70,   70,    1,    2,   71,   71,   71,
+	   71,   71,    1,    2,   72,   72,   72,   72,   72,    1,    2,   73,
+	   73,   73,   73,   73,    1,    2,   74,   74,   74,   74,   74,    1,
+	    2,   75,   75,   75,   75,   75,    1,    2,   76,   76,   76,   76,
+	   76,    1,    2,   77,   77,   77,   77,   77,    1,    2,   78,   78,
+	   78,   78,   78,    1,    2,    1,    1,    0
 	};
 }
 
@@ -236,7 +237,7 @@ static final int puma_parser_en_main = 1;
           cs = 0;
 
           
-// line 240 "ext/puma_http11/org/jruby/puma/Http11Parser.java"
+// line 241 "ext/puma_http11/org/jruby/puma/Http11Parser.java"
 	{
 	cs = puma_parser_start;
 	}
@@ -268,7 +269,7 @@ static final int puma_parser_en_main = 1;
      parser.buffer = buffer;
 
      
-// line 272 "ext/puma_http11/org/jruby/puma/Http11Parser.java"
+// line 273 "ext/puma_http11/org/jruby/puma/Http11Parser.java"
 	{
 	int _klen;
 	int _trans = 0;
@@ -433,7 +434,7 @@ case 1:
     { p += 1; _goto_targ = 5; if (true)  continue _goto;}
   }
 	break;
-// line 437 "ext/puma_http11/org/jruby/puma/Http11Parser.java"
+// line 438 "ext/puma_http11/org/jruby/puma/Http11Parser.java"
 			}
 		}
 	}
