pitchfork 0.14.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +16 -4
- data/.gitignore +1 -0
- data/CHANGELOG.md +11 -0
- data/Gemfile +3 -0
- data/docs/CONFIGURATION.md +32 -0
- data/docs/FORK_SAFETY.md +2 -1
- data/ext/pitchfork_http/common_field_optimization.h +8 -5
- data/ext/pitchfork_http/extconf.rb +3 -0
- data/ext/pitchfork_http/pitchfork_http.c +292 -468
- data/ext/pitchfork_http/pitchfork_http.rl +32 -24
- data/lib/pitchfork/chunked.rb +6 -3
- data/lib/pitchfork/configurator.rb +1 -1
- data/lib/pitchfork/http_parser.rb +0 -1
- data/lib/pitchfork/http_response.rb +3 -1
- data/lib/pitchfork/http_server.rb +40 -20
- data/lib/pitchfork/listeners.rb +65 -0
- data/lib/pitchfork/socket_helper.rb +12 -2
- data/lib/pitchfork/version.rb +1 -1
- data/lib/pitchfork/worker.rb +0 -5
- data/pitchfork.gemspec +2 -1
- metadata +18 -4
- data/Gemfile.lock +0 -32
@@ -38,12 +38,6 @@ void init_pitchfork_memory_page(VALUE);
|
|
38
38
|
|
39
39
|
static unsigned int MAX_HEADER_LEN = 1024 * (80 + 32); /* same as Mongrel */
|
40
40
|
|
41
|
-
/* this is only intended for use with Rainbows! */
|
42
|
-
static VALUE set_maxhdrlen(VALUE self, VALUE len)
|
43
|
-
{
|
44
|
-
return UINT2NUM(MAX_HEADER_LEN = NUM2UINT(len));
|
45
|
-
}
|
46
|
-
|
47
41
|
/* keep this small for other servers (e.g. yahns) since every client has one */
|
48
42
|
struct http_parser {
|
49
43
|
int cs; /* Ragel internal state */
|
@@ -97,7 +91,7 @@ static inline unsigned int ulong2uint(unsigned long n)
|
|
97
91
|
#define LEN(AT, FPC) (ulong2uint(FPC - buffer) - hp->AT)
|
98
92
|
#define MARK(M,FPC) (hp->M = ulong2uint((FPC) - buffer))
|
99
93
|
#define PTR_TO(F) (buffer + hp->F)
|
100
|
-
#define STR_NEW(M,FPC)
|
94
|
+
#define STR_NEW(M,FPC) str_new(PTR_TO(M), LEN(M, FPC))
|
101
95
|
#define STRIPPED_STR_NEW(M,FPC) stripped_str_new(PTR_TO(M), LEN(M, FPC))
|
102
96
|
|
103
97
|
#define HP_FL_TEST(hp,fl) ((hp)->flags & (UH_FL_##fl))
|
@@ -110,13 +104,29 @@ static int is_lws(char c)
|
|
110
104
|
return (c == ' ' || c == '\t');
|
111
105
|
}
|
112
106
|
|
113
|
-
static VALUE
|
107
|
+
static inline VALUE str_new(const char *str, long len)
|
108
|
+
{
|
109
|
+
VALUE rb_str = rb_str_new(str, len);
|
110
|
+
/* The Rack spec states:
|
111
|
+
> If the string values for CGI keys contain non-ASCII characters, they should use ASCII-8BIT encoding.
|
112
|
+
If they are ASCII, only the server is free to encode them as it wishes.
|
113
|
+
We chose to encode them as UTF-8 as any reasonable application would expect that today, and having the
|
114
|
+
same encoding as literal strings makes for slightly faster comparisons.
|
115
|
+
We'd like to also encode other strings that would be valid UTF-8 into UTF-8, but that would
|
116
|
+
violate the spec, so we leave them in BINARY aka ASCII-8BIT. */
|
117
|
+
if (rb_enc_str_asciionly_p(rb_str)) {
|
118
|
+
RB_ENCODING_SET_INLINED(rb_str, rb_utf8_encindex());
|
119
|
+
}
|
120
|
+
return rb_str;
|
121
|
+
}
|
122
|
+
|
123
|
+
static inline VALUE stripped_str_new(const char *str, long len)
|
114
124
|
{
|
115
125
|
long end;
|
116
126
|
|
117
127
|
for (end = len - 1; end >= 0 && is_lws(str[end]); end--);
|
118
128
|
|
119
|
-
return
|
129
|
+
return str_new(str, end + 1);
|
120
130
|
}
|
121
131
|
|
122
132
|
/*
|
@@ -315,12 +325,12 @@ static void write_value(VALUE self, struct http_parser *hp,
|
|
315
325
|
/** Machine **/
|
316
326
|
|
317
327
|
|
318
|
-
#line
|
328
|
+
#line 426 "pitchfork_http.rl"
|
319
329
|
|
320
330
|
|
321
331
|
/** Data **/
|
322
332
|
|
323
|
-
#line
|
333
|
+
#line 334 "pitchfork_http.c"
|
324
334
|
static const int http_parser_start = 1;
|
325
335
|
static const int http_parser_first_final = 122;
|
326
336
|
static const int http_parser_error = 0;
|
@@ -331,7 +341,7 @@ static const int http_parser_en_Trailers = 114;
|
|
331
341
|
static const int http_parser_en_main = 1;
|
332
342
|
|
333
343
|
|
334
|
-
#line
|
344
|
+
#line 430 "pitchfork_http.rl"
|
335
345
|
|
336
346
|
static void http_parser_init(struct http_parser *hp)
|
337
347
|
{
|
@@ -344,12 +354,12 @@ static void http_parser_init(struct http_parser *hp)
|
|
344
354
|
hp->len.content = 0;
|
345
355
|
hp->cont = Qfalse; /* zero on MRI, should be optimized away by above */
|
346
356
|
|
347
|
-
#line
|
357
|
+
#line 358 "pitchfork_http.c"
|
348
358
|
{
|
349
359
|
cs = http_parser_start;
|
350
360
|
}
|
351
361
|
|
352
|
-
#line
|
362
|
+
#line 442 "pitchfork_http.rl"
|
353
363
|
hp->cs = cs;
|
354
364
|
}
|
355
365
|
|
@@ -377,7 +387,7 @@ http_parser_execute(VALUE self, struct http_parser *hp, char *buffer, size_t len
|
|
377
387
|
goto skip_chunk_data_hack;
|
378
388
|
}
|
379
389
|
|
380
|
-
#line
|
390
|
+
#line 391 "pitchfork_http.c"
|
381
391
|
{
|
382
392
|
if ( p == pe )
|
383
393
|
goto _test_eof;
|
@@ -412,14 +422,14 @@ st0:
|
|
412
422
|
cs = 0;
|
413
423
|
goto _out;
|
414
424
|
tr0:
|
415
|
-
#line
|
425
|
+
#line 328 "pitchfork_http.rl"
|
416
426
|
{MARK(mark, p); }
|
417
427
|
goto st2;
|
418
428
|
st2:
|
419
429
|
if ( ++p == pe )
|
420
430
|
goto _test_eof2;
|
421
431
|
case 2:
|
422
|
-
#line
|
432
|
+
#line 433 "pitchfork_http.c"
|
423
433
|
switch( (*p) ) {
|
424
434
|
case 32: goto tr3;
|
425
435
|
case 33: goto st49;
|
@@ -445,14 +455,14 @@ case 2:
|
|
445
455
|
goto st49;
|
446
456
|
goto st0;
|
447
457
|
tr3:
|
448
|
-
#line
|
458
|
+
#line 337 "pitchfork_http.rl"
|
449
459
|
{ request_method(hp, PTR_TO(mark), LEN(mark, p)); }
|
450
460
|
goto st3;
|
451
461
|
st3:
|
452
462
|
if ( ++p == pe )
|
453
463
|
goto _test_eof3;
|
454
464
|
case 3:
|
455
|
-
#line
|
465
|
+
#line 466 "pitchfork_http.c"
|
456
466
|
switch( (*p) ) {
|
457
467
|
case 42: goto tr5;
|
458
468
|
case 47: goto tr6;
|
@@ -461,55 +471,54 @@ case 3:
|
|
461
471
|
}
|
462
472
|
goto st0;
|
463
473
|
tr5:
|
464
|
-
#line
|
474
|
+
#line 328 "pitchfork_http.rl"
|
465
475
|
{MARK(mark, p); }
|
466
476
|
goto st4;
|
467
477
|
st4:
|
468
478
|
if ( ++p == pe )
|
469
479
|
goto _test_eof4;
|
470
480
|
case 4:
|
471
|
-
#line
|
481
|
+
#line 482 "pitchfork_http.c"
|
472
482
|
switch( (*p) ) {
|
473
483
|
case 32: goto tr8;
|
474
484
|
case 35: goto tr9;
|
475
485
|
}
|
476
486
|
goto st0;
|
477
487
|
tr8:
|
478
|
-
#line
|
488
|
+
#line 342 "pitchfork_http.rl"
|
479
489
|
{
|
480
|
-
VALUE str;
|
481
|
-
|
482
490
|
VALIDATE_MAX_URI_LENGTH(LEN(mark, p), REQUEST_URI);
|
483
|
-
|
484
|
-
/*
|
485
|
-
* "OPTIONS * HTTP/1.1\r\n" is a valid request, but we can't have '*'
|
486
|
-
* in REQUEST_PATH or PATH_INFO or else Rack::Lint will complain
|
487
|
-
*/
|
488
|
-
if (STR_CSTR_EQ(str, "*")) {
|
489
|
-
str = rb_str_new(NULL, 0);
|
490
|
-
rb_hash_aset(hp->env, g_path_info, str);
|
491
|
-
rb_hash_aset(hp->env, g_request_path, str);
|
492
|
-
}
|
491
|
+
rb_hash_aset(hp->env, g_request_uri, STR_NEW(mark, p));
|
493
492
|
}
|
494
493
|
goto st5;
|
495
494
|
tr42:
|
496
|
-
#line
|
495
|
+
#line 328 "pitchfork_http.rl"
|
497
496
|
{MARK(mark, p); }
|
498
|
-
#line
|
497
|
+
#line 346 "pitchfork_http.rl"
|
499
498
|
{
|
500
499
|
VALIDATE_MAX_URI_LENGTH(LEN(mark, p), FRAGMENT);
|
501
|
-
rb_hash_aset(hp->env, g_fragment, STR_NEW(mark, p));
|
500
|
+
VALUE str = rb_hash_aset(hp->env, g_fragment, STR_NEW(mark, p));
|
501
|
+
if (STR_CSTR_EQ(str, "*")) {
|
502
|
+
VALUE str = rb_str_new("*", 1);
|
503
|
+
rb_hash_aset(hp->env, g_path_info, str);
|
504
|
+
rb_hash_aset(hp->env, g_request_path, str);
|
505
|
+
}
|
502
506
|
}
|
503
507
|
goto st5;
|
504
508
|
tr45:
|
505
|
-
#line
|
509
|
+
#line 346 "pitchfork_http.rl"
|
506
510
|
{
|
507
511
|
VALIDATE_MAX_URI_LENGTH(LEN(mark, p), FRAGMENT);
|
508
|
-
rb_hash_aset(hp->env, g_fragment, STR_NEW(mark, p));
|
512
|
+
VALUE str = rb_hash_aset(hp->env, g_fragment, STR_NEW(mark, p));
|
513
|
+
if (STR_CSTR_EQ(str, "*")) {
|
514
|
+
VALUE str = rb_str_new("*", 1);
|
515
|
+
rb_hash_aset(hp->env, g_path_info, str);
|
516
|
+
rb_hash_aset(hp->env, g_request_path, str);
|
517
|
+
}
|
509
518
|
}
|
510
519
|
goto st5;
|
511
520
|
tr49:
|
512
|
-
#line
|
521
|
+
#line 361 "pitchfork_http.rl"
|
513
522
|
{
|
514
523
|
VALUE val;
|
515
524
|
|
@@ -520,88 +529,55 @@ tr49:
|
|
520
529
|
if (!STR_CSTR_EQ(val, "*"))
|
521
530
|
rb_hash_aset(hp->env, g_path_info, val);
|
522
531
|
}
|
523
|
-
#line
|
532
|
+
#line 342 "pitchfork_http.rl"
|
524
533
|
{
|
525
|
-
VALUE str;
|
526
|
-
|
527
534
|
VALIDATE_MAX_URI_LENGTH(LEN(mark, p), REQUEST_URI);
|
528
|
-
|
529
|
-
/*
|
530
|
-
* "OPTIONS * HTTP/1.1\r\n" is a valid request, but we can't have '*'
|
531
|
-
* in REQUEST_PATH or PATH_INFO or else Rack::Lint will complain
|
532
|
-
*/
|
533
|
-
if (STR_CSTR_EQ(str, "*")) {
|
534
|
-
str = rb_str_new(NULL, 0);
|
535
|
-
rb_hash_aset(hp->env, g_path_info, str);
|
536
|
-
rb_hash_aset(hp->env, g_request_path, str);
|
537
|
-
}
|
535
|
+
rb_hash_aset(hp->env, g_request_uri, STR_NEW(mark, p));
|
538
536
|
}
|
539
537
|
goto st5;
|
540
538
|
tr55:
|
541
|
-
#line
|
539
|
+
#line 355 "pitchfork_http.rl"
|
542
540
|
{MARK(start.query, p); }
|
543
|
-
#line
|
541
|
+
#line 356 "pitchfork_http.rl"
|
544
542
|
{
|
545
543
|
VALIDATE_MAX_URI_LENGTH(LEN(start.query, p), QUERY_STRING);
|
546
544
|
rb_hash_aset(hp->env, g_query_string, STR_NEW(start.query, p));
|
547
545
|
}
|
548
|
-
#line
|
546
|
+
#line 342 "pitchfork_http.rl"
|
549
547
|
{
|
550
|
-
VALUE str;
|
551
|
-
|
552
548
|
VALIDATE_MAX_URI_LENGTH(LEN(mark, p), REQUEST_URI);
|
553
|
-
|
554
|
-
/*
|
555
|
-
* "OPTIONS * HTTP/1.1\r\n" is a valid request, but we can't have '*'
|
556
|
-
* in REQUEST_PATH or PATH_INFO or else Rack::Lint will complain
|
557
|
-
*/
|
558
|
-
if (STR_CSTR_EQ(str, "*")) {
|
559
|
-
str = rb_str_new(NULL, 0);
|
560
|
-
rb_hash_aset(hp->env, g_path_info, str);
|
561
|
-
rb_hash_aset(hp->env, g_request_path, str);
|
562
|
-
}
|
549
|
+
rb_hash_aset(hp->env, g_request_uri, STR_NEW(mark, p));
|
563
550
|
}
|
564
551
|
goto st5;
|
565
552
|
tr59:
|
566
|
-
#line
|
553
|
+
#line 356 "pitchfork_http.rl"
|
567
554
|
{
|
568
555
|
VALIDATE_MAX_URI_LENGTH(LEN(start.query, p), QUERY_STRING);
|
569
556
|
rb_hash_aset(hp->env, g_query_string, STR_NEW(start.query, p));
|
570
557
|
}
|
571
|
-
#line
|
558
|
+
#line 342 "pitchfork_http.rl"
|
572
559
|
{
|
573
|
-
VALUE str;
|
574
|
-
|
575
560
|
VALIDATE_MAX_URI_LENGTH(LEN(mark, p), REQUEST_URI);
|
576
|
-
|
577
|
-
/*
|
578
|
-
* "OPTIONS * HTTP/1.1\r\n" is a valid request, but we can't have '*'
|
579
|
-
* in REQUEST_PATH or PATH_INFO or else Rack::Lint will complain
|
580
|
-
*/
|
581
|
-
if (STR_CSTR_EQ(str, "*")) {
|
582
|
-
str = rb_str_new(NULL, 0);
|
583
|
-
rb_hash_aset(hp->env, g_path_info, str);
|
584
|
-
rb_hash_aset(hp->env, g_request_path, str);
|
585
|
-
}
|
561
|
+
rb_hash_aset(hp->env, g_request_uri, STR_NEW(mark, p));
|
586
562
|
}
|
587
563
|
goto st5;
|
588
564
|
st5:
|
589
565
|
if ( ++p == pe )
|
590
566
|
goto _test_eof5;
|
591
567
|
case 5:
|
592
|
-
#line
|
568
|
+
#line 569 "pitchfork_http.c"
|
593
569
|
if ( (*p) == 72 )
|
594
570
|
goto tr10;
|
595
571
|
goto st0;
|
596
572
|
tr10:
|
597
|
-
#line
|
573
|
+
#line 328 "pitchfork_http.rl"
|
598
574
|
{MARK(mark, p); }
|
599
575
|
goto st6;
|
600
576
|
st6:
|
601
577
|
if ( ++p == pe )
|
602
578
|
goto _test_eof6;
|
603
579
|
case 6:
|
604
|
-
#line
|
580
|
+
#line 581 "pitchfork_http.c"
|
605
581
|
if ( (*p) == 84 )
|
606
582
|
goto st7;
|
607
583
|
goto st0;
|
@@ -661,34 +637,34 @@ case 13:
|
|
661
637
|
goto st13;
|
662
638
|
goto st0;
|
663
639
|
tr18:
|
664
|
-
#line
|
640
|
+
#line 360 "pitchfork_http.rl"
|
665
641
|
{ http_version(hp, PTR_TO(mark), LEN(mark, p)); }
|
666
642
|
goto st14;
|
667
643
|
tr26:
|
668
|
-
#line
|
644
|
+
#line 334 "pitchfork_http.rl"
|
669
645
|
{ MARK(mark, p); }
|
670
|
-
#line
|
646
|
+
#line 336 "pitchfork_http.rl"
|
671
647
|
{ write_cont_value(hp, buffer, p); }
|
672
648
|
goto st14;
|
673
649
|
tr29:
|
674
|
-
#line
|
650
|
+
#line 336 "pitchfork_http.rl"
|
675
651
|
{ write_cont_value(hp, buffer, p); }
|
676
652
|
goto st14;
|
677
653
|
tr36:
|
678
|
-
#line
|
654
|
+
#line 334 "pitchfork_http.rl"
|
679
655
|
{ MARK(mark, p); }
|
680
|
-
#line
|
656
|
+
#line 335 "pitchfork_http.rl"
|
681
657
|
{ write_value(self, hp, buffer, p); }
|
682
658
|
goto st14;
|
683
659
|
tr39:
|
684
|
-
#line
|
660
|
+
#line 335 "pitchfork_http.rl"
|
685
661
|
{ write_value(self, hp, buffer, p); }
|
686
662
|
goto st14;
|
687
663
|
st14:
|
688
664
|
if ( ++p == pe )
|
689
665
|
goto _test_eof14;
|
690
666
|
case 14:
|
691
|
-
#line
|
667
|
+
#line 668 "pitchfork_http.c"
|
692
668
|
switch( (*p) ) {
|
693
669
|
case 9: goto st15;
|
694
670
|
case 10: goto tr21;
|
@@ -717,14 +693,14 @@ case 14:
|
|
717
693
|
goto tr23;
|
718
694
|
goto st0;
|
719
695
|
tr25:
|
720
|
-
#line
|
696
|
+
#line 334 "pitchfork_http.rl"
|
721
697
|
{ MARK(mark, p); }
|
722
698
|
goto st15;
|
723
699
|
st15:
|
724
700
|
if ( ++p == pe )
|
725
701
|
goto _test_eof15;
|
726
702
|
case 15:
|
727
|
-
#line
|
703
|
+
#line 704 "pitchfork_http.c"
|
728
704
|
switch( (*p) ) {
|
729
705
|
case 9: goto tr25;
|
730
706
|
case 10: goto tr26;
|
@@ -736,14 +712,14 @@ case 15:
|
|
736
712
|
goto st0;
|
737
713
|
goto tr24;
|
738
714
|
tr24:
|
739
|
-
#line
|
715
|
+
#line 334 "pitchfork_http.rl"
|
740
716
|
{ MARK(mark, p); }
|
741
717
|
goto st16;
|
742
718
|
st16:
|
743
719
|
if ( ++p == pe )
|
744
720
|
goto _test_eof16;
|
745
721
|
case 16:
|
746
|
-
#line
|
722
|
+
#line 723 "pitchfork_http.c"
|
747
723
|
switch( (*p) ) {
|
748
724
|
case 10: goto tr29;
|
749
725
|
case 13: goto tr30;
|
@@ -756,39 +732,39 @@ case 16:
|
|
756
732
|
goto st0;
|
757
733
|
goto st16;
|
758
734
|
tr19:
|
759
|
-
#line
|
735
|
+
#line 360 "pitchfork_http.rl"
|
760
736
|
{ http_version(hp, PTR_TO(mark), LEN(mark, p)); }
|
761
737
|
goto st17;
|
762
738
|
tr27:
|
763
|
-
#line
|
739
|
+
#line 334 "pitchfork_http.rl"
|
764
740
|
{ MARK(mark, p); }
|
765
|
-
#line
|
741
|
+
#line 336 "pitchfork_http.rl"
|
766
742
|
{ write_cont_value(hp, buffer, p); }
|
767
743
|
goto st17;
|
768
744
|
tr30:
|
769
|
-
#line
|
745
|
+
#line 336 "pitchfork_http.rl"
|
770
746
|
{ write_cont_value(hp, buffer, p); }
|
771
747
|
goto st17;
|
772
748
|
tr37:
|
773
|
-
#line
|
749
|
+
#line 334 "pitchfork_http.rl"
|
774
750
|
{ MARK(mark, p); }
|
775
|
-
#line
|
751
|
+
#line 335 "pitchfork_http.rl"
|
776
752
|
{ write_value(self, hp, buffer, p); }
|
777
753
|
goto st17;
|
778
754
|
tr40:
|
779
|
-
#line
|
755
|
+
#line 335 "pitchfork_http.rl"
|
780
756
|
{ write_value(self, hp, buffer, p); }
|
781
757
|
goto st17;
|
782
758
|
st17:
|
783
759
|
if ( ++p == pe )
|
784
760
|
goto _test_eof17;
|
785
761
|
case 17:
|
786
|
-
#line
|
762
|
+
#line 763 "pitchfork_http.c"
|
787
763
|
if ( (*p) == 10 )
|
788
764
|
goto st14;
|
789
765
|
goto st0;
|
790
766
|
tr21:
|
791
|
-
#line
|
767
|
+
#line 376 "pitchfork_http.rl"
|
792
768
|
{
|
793
769
|
finalize_header(hp);
|
794
770
|
|
@@ -809,23 +785,12 @@ tr21:
|
|
809
785
|
}
|
810
786
|
goto st122;
|
811
787
|
tr104:
|
812
|
-
#line
|
788
|
+
#line 342 "pitchfork_http.rl"
|
813
789
|
{
|
814
|
-
VALUE str;
|
815
|
-
|
816
790
|
VALIDATE_MAX_URI_LENGTH(LEN(mark, p), REQUEST_URI);
|
817
|
-
|
818
|
-
/*
|
819
|
-
* "OPTIONS * HTTP/1.1\r\n" is a valid request, but we can't have '*'
|
820
|
-
* in REQUEST_PATH or PATH_INFO or else Rack::Lint will complain
|
821
|
-
*/
|
822
|
-
if (STR_CSTR_EQ(str, "*")) {
|
823
|
-
str = rb_str_new(NULL, 0);
|
824
|
-
rb_hash_aset(hp->env, g_path_info, str);
|
825
|
-
rb_hash_aset(hp->env, g_request_path, str);
|
826
|
-
}
|
791
|
+
rb_hash_aset(hp->env, g_request_uri, STR_NEW(mark, p));
|
827
792
|
}
|
828
|
-
#line
|
793
|
+
#line 376 "pitchfork_http.rl"
|
829
794
|
{
|
830
795
|
finalize_header(hp);
|
831
796
|
|
@@ -846,14 +811,19 @@ tr104:
|
|
846
811
|
}
|
847
812
|
goto st122;
|
848
813
|
tr108:
|
849
|
-
#line
|
814
|
+
#line 328 "pitchfork_http.rl"
|
850
815
|
{MARK(mark, p); }
|
851
|
-
#line
|
816
|
+
#line 346 "pitchfork_http.rl"
|
852
817
|
{
|
853
818
|
VALIDATE_MAX_URI_LENGTH(LEN(mark, p), FRAGMENT);
|
854
|
-
rb_hash_aset(hp->env, g_fragment, STR_NEW(mark, p));
|
819
|
+
VALUE str = rb_hash_aset(hp->env, g_fragment, STR_NEW(mark, p));
|
820
|
+
if (STR_CSTR_EQ(str, "*")) {
|
821
|
+
VALUE str = rb_str_new("*", 1);
|
822
|
+
rb_hash_aset(hp->env, g_path_info, str);
|
823
|
+
rb_hash_aset(hp->env, g_request_path, str);
|
824
|
+
}
|
855
825
|
}
|
856
|
-
#line
|
826
|
+
#line 376 "pitchfork_http.rl"
|
857
827
|
{
|
858
828
|
finalize_header(hp);
|
859
829
|
|
@@ -874,12 +844,17 @@ tr108:
|
|
874
844
|
}
|
875
845
|
goto st122;
|
876
846
|
tr112:
|
877
|
-
#line
|
847
|
+
#line 346 "pitchfork_http.rl"
|
878
848
|
{
|
879
849
|
VALIDATE_MAX_URI_LENGTH(LEN(mark, p), FRAGMENT);
|
880
|
-
rb_hash_aset(hp->env, g_fragment, STR_NEW(mark, p));
|
850
|
+
VALUE str = rb_hash_aset(hp->env, g_fragment, STR_NEW(mark, p));
|
851
|
+
if (STR_CSTR_EQ(str, "*")) {
|
852
|
+
VALUE str = rb_str_new("*", 1);
|
853
|
+
rb_hash_aset(hp->env, g_path_info, str);
|
854
|
+
rb_hash_aset(hp->env, g_request_path, str);
|
855
|
+
}
|
881
856
|
}
|
882
|
-
#line
|
857
|
+
#line 376 "pitchfork_http.rl"
|
883
858
|
{
|
884
859
|
finalize_header(hp);
|
885
860
|
|
@@ -900,7 +875,7 @@ tr112:
|
|
900
875
|
}
|
901
876
|
goto st122;
|
902
877
|
tr117:
|
903
|
-
#line
|
878
|
+
#line 361 "pitchfork_http.rl"
|
904
879
|
{
|
905
880
|
VALUE val;
|
906
881
|
|
@@ -911,23 +886,12 @@ tr117:
|
|
911
886
|
if (!STR_CSTR_EQ(val, "*"))
|
912
887
|
rb_hash_aset(hp->env, g_path_info, val);
|
913
888
|
}
|
914
|
-
#line
|
889
|
+
#line 342 "pitchfork_http.rl"
|
915
890
|
{
|
916
|
-
VALUE str;
|
917
|
-
|
918
891
|
VALIDATE_MAX_URI_LENGTH(LEN(mark, p), REQUEST_URI);
|
919
|
-
|
920
|
-
/*
|
921
|
-
* "OPTIONS * HTTP/1.1\r\n" is a valid request, but we can't have '*'
|
922
|
-
* in REQUEST_PATH or PATH_INFO or else Rack::Lint will complain
|
923
|
-
*/
|
924
|
-
if (STR_CSTR_EQ(str, "*")) {
|
925
|
-
str = rb_str_new(NULL, 0);
|
926
|
-
rb_hash_aset(hp->env, g_path_info, str);
|
927
|
-
rb_hash_aset(hp->env, g_request_path, str);
|
928
|
-
}
|
892
|
+
rb_hash_aset(hp->env, g_request_uri, STR_NEW(mark, p));
|
929
893
|
}
|
930
|
-
#line
|
894
|
+
#line 376 "pitchfork_http.rl"
|
931
895
|
{
|
932
896
|
finalize_header(hp);
|
933
897
|
|
@@ -948,30 +912,19 @@ tr117:
|
|
948
912
|
}
|
949
913
|
goto st122;
|
950
914
|
tr124:
|
951
|
-
#line
|
915
|
+
#line 355 "pitchfork_http.rl"
|
952
916
|
{MARK(start.query, p); }
|
953
|
-
#line
|
917
|
+
#line 356 "pitchfork_http.rl"
|
954
918
|
{
|
955
919
|
VALIDATE_MAX_URI_LENGTH(LEN(start.query, p), QUERY_STRING);
|
956
920
|
rb_hash_aset(hp->env, g_query_string, STR_NEW(start.query, p));
|
957
921
|
}
|
958
|
-
#line
|
922
|
+
#line 342 "pitchfork_http.rl"
|
959
923
|
{
|
960
|
-
VALUE str;
|
961
|
-
|
962
924
|
VALIDATE_MAX_URI_LENGTH(LEN(mark, p), REQUEST_URI);
|
963
|
-
|
964
|
-
/*
|
965
|
-
* "OPTIONS * HTTP/1.1\r\n" is a valid request, but we can't have '*'
|
966
|
-
* in REQUEST_PATH or PATH_INFO or else Rack::Lint will complain
|
967
|
-
*/
|
968
|
-
if (STR_CSTR_EQ(str, "*")) {
|
969
|
-
str = rb_str_new(NULL, 0);
|
970
|
-
rb_hash_aset(hp->env, g_path_info, str);
|
971
|
-
rb_hash_aset(hp->env, g_request_path, str);
|
972
|
-
}
|
925
|
+
rb_hash_aset(hp->env, g_request_uri, STR_NEW(mark, p));
|
973
926
|
}
|
974
|
-
#line
|
927
|
+
#line 376 "pitchfork_http.rl"
|
975
928
|
{
|
976
929
|
finalize_header(hp);
|
977
930
|
|
@@ -992,28 +945,17 @@ tr124:
|
|
992
945
|
}
|
993
946
|
goto st122;
|
994
947
|
tr129:
|
995
|
-
#line
|
948
|
+
#line 356 "pitchfork_http.rl"
|
996
949
|
{
|
997
950
|
VALIDATE_MAX_URI_LENGTH(LEN(start.query, p), QUERY_STRING);
|
998
951
|
rb_hash_aset(hp->env, g_query_string, STR_NEW(start.query, p));
|
999
952
|
}
|
1000
|
-
#line
|
953
|
+
#line 342 "pitchfork_http.rl"
|
1001
954
|
{
|
1002
|
-
VALUE str;
|
1003
|
-
|
1004
955
|
VALIDATE_MAX_URI_LENGTH(LEN(mark, p), REQUEST_URI);
|
1005
|
-
|
1006
|
-
/*
|
1007
|
-
* "OPTIONS * HTTP/1.1\r\n" is a valid request, but we can't have '*'
|
1008
|
-
* in REQUEST_PATH or PATH_INFO or else Rack::Lint will complain
|
1009
|
-
*/
|
1010
|
-
if (STR_CSTR_EQ(str, "*")) {
|
1011
|
-
str = rb_str_new(NULL, 0);
|
1012
|
-
rb_hash_aset(hp->env, g_path_info, str);
|
1013
|
-
rb_hash_aset(hp->env, g_request_path, str);
|
1014
|
-
}
|
956
|
+
rb_hash_aset(hp->env, g_request_uri, STR_NEW(mark, p));
|
1015
957
|
}
|
1016
|
-
#line
|
958
|
+
#line 376 "pitchfork_http.rl"
|
1017
959
|
{
|
1018
960
|
finalize_header(hp);
|
1019
961
|
|
@@ -1037,44 +979,43 @@ st122:
|
|
1037
979
|
if ( ++p == pe )
|
1038
980
|
goto _test_eof122;
|
1039
981
|
case 122:
|
1040
|
-
#line
|
982
|
+
#line 983 "pitchfork_http.c"
|
1041
983
|
goto st0;
|
1042
984
|
tr105:
|
1043
|
-
#line
|
985
|
+
#line 342 "pitchfork_http.rl"
|
1044
986
|
{
|
1045
|
-
VALUE str;
|
1046
|
-
|
1047
987
|
VALIDATE_MAX_URI_LENGTH(LEN(mark, p), REQUEST_URI);
|
1048
|
-
|
1049
|
-
/*
|
1050
|
-
* "OPTIONS * HTTP/1.1\r\n" is a valid request, but we can't have '*'
|
1051
|
-
* in REQUEST_PATH or PATH_INFO or else Rack::Lint will complain
|
1052
|
-
*/
|
1053
|
-
if (STR_CSTR_EQ(str, "*")) {
|
1054
|
-
str = rb_str_new(NULL, 0);
|
1055
|
-
rb_hash_aset(hp->env, g_path_info, str);
|
1056
|
-
rb_hash_aset(hp->env, g_request_path, str);
|
1057
|
-
}
|
988
|
+
rb_hash_aset(hp->env, g_request_uri, STR_NEW(mark, p));
|
1058
989
|
}
|
1059
990
|
goto st18;
|
1060
991
|
tr109:
|
1061
|
-
#line
|
992
|
+
#line 328 "pitchfork_http.rl"
|
1062
993
|
{MARK(mark, p); }
|
1063
|
-
#line
|
994
|
+
#line 346 "pitchfork_http.rl"
|
1064
995
|
{
|
1065
996
|
VALIDATE_MAX_URI_LENGTH(LEN(mark, p), FRAGMENT);
|
1066
|
-
rb_hash_aset(hp->env, g_fragment, STR_NEW(mark, p));
|
997
|
+
VALUE str = rb_hash_aset(hp->env, g_fragment, STR_NEW(mark, p));
|
998
|
+
if (STR_CSTR_EQ(str, "*")) {
|
999
|
+
VALUE str = rb_str_new("*", 1);
|
1000
|
+
rb_hash_aset(hp->env, g_path_info, str);
|
1001
|
+
rb_hash_aset(hp->env, g_request_path, str);
|
1002
|
+
}
|
1067
1003
|
}
|
1068
1004
|
goto st18;
|
1069
1005
|
tr113:
|
1070
|
-
#line
|
1006
|
+
#line 346 "pitchfork_http.rl"
|
1071
1007
|
{
|
1072
1008
|
VALIDATE_MAX_URI_LENGTH(LEN(mark, p), FRAGMENT);
|
1073
|
-
rb_hash_aset(hp->env, g_fragment, STR_NEW(mark, p));
|
1009
|
+
VALUE str = rb_hash_aset(hp->env, g_fragment, STR_NEW(mark, p));
|
1010
|
+
if (STR_CSTR_EQ(str, "*")) {
|
1011
|
+
VALUE str = rb_str_new("*", 1);
|
1012
|
+
rb_hash_aset(hp->env, g_path_info, str);
|
1013
|
+
rb_hash_aset(hp->env, g_request_path, str);
|
1014
|
+
}
|
1074
1015
|
}
|
1075
1016
|
goto st18;
|
1076
1017
|
tr118:
|
1077
|
-
#line
|
1018
|
+
#line 361 "pitchfork_http.rl"
|
1078
1019
|
{
|
1079
1020
|
VALUE val;
|
1080
1021
|
|
@@ -1085,94 +1026,61 @@ tr118:
|
|
1085
1026
|
if (!STR_CSTR_EQ(val, "*"))
|
1086
1027
|
rb_hash_aset(hp->env, g_path_info, val);
|
1087
1028
|
}
|
1088
|
-
#line
|
1029
|
+
#line 342 "pitchfork_http.rl"
|
1089
1030
|
{
|
1090
|
-
VALUE str;
|
1091
|
-
|
1092
1031
|
VALIDATE_MAX_URI_LENGTH(LEN(mark, p), REQUEST_URI);
|
1093
|
-
|
1094
|
-
/*
|
1095
|
-
* "OPTIONS * HTTP/1.1\r\n" is a valid request, but we can't have '*'
|
1096
|
-
* in REQUEST_PATH or PATH_INFO or else Rack::Lint will complain
|
1097
|
-
*/
|
1098
|
-
if (STR_CSTR_EQ(str, "*")) {
|
1099
|
-
str = rb_str_new(NULL, 0);
|
1100
|
-
rb_hash_aset(hp->env, g_path_info, str);
|
1101
|
-
rb_hash_aset(hp->env, g_request_path, str);
|
1102
|
-
}
|
1032
|
+
rb_hash_aset(hp->env, g_request_uri, STR_NEW(mark, p));
|
1103
1033
|
}
|
1104
1034
|
goto st18;
|
1105
1035
|
tr125:
|
1106
|
-
#line
|
1036
|
+
#line 355 "pitchfork_http.rl"
|
1107
1037
|
{MARK(start.query, p); }
|
1108
|
-
#line
|
1038
|
+
#line 356 "pitchfork_http.rl"
|
1109
1039
|
{
|
1110
1040
|
VALIDATE_MAX_URI_LENGTH(LEN(start.query, p), QUERY_STRING);
|
1111
1041
|
rb_hash_aset(hp->env, g_query_string, STR_NEW(start.query, p));
|
1112
1042
|
}
|
1113
|
-
#line
|
1043
|
+
#line 342 "pitchfork_http.rl"
|
1114
1044
|
{
|
1115
|
-
VALUE str;
|
1116
|
-
|
1117
1045
|
VALIDATE_MAX_URI_LENGTH(LEN(mark, p), REQUEST_URI);
|
1118
|
-
|
1119
|
-
/*
|
1120
|
-
* "OPTIONS * HTTP/1.1\r\n" is a valid request, but we can't have '*'
|
1121
|
-
* in REQUEST_PATH or PATH_INFO or else Rack::Lint will complain
|
1122
|
-
*/
|
1123
|
-
if (STR_CSTR_EQ(str, "*")) {
|
1124
|
-
str = rb_str_new(NULL, 0);
|
1125
|
-
rb_hash_aset(hp->env, g_path_info, str);
|
1126
|
-
rb_hash_aset(hp->env, g_request_path, str);
|
1127
|
-
}
|
1046
|
+
rb_hash_aset(hp->env, g_request_uri, STR_NEW(mark, p));
|
1128
1047
|
}
|
1129
1048
|
goto st18;
|
1130
1049
|
tr130:
|
1131
|
-
#line
|
1050
|
+
#line 356 "pitchfork_http.rl"
|
1132
1051
|
{
|
1133
1052
|
VALIDATE_MAX_URI_LENGTH(LEN(start.query, p), QUERY_STRING);
|
1134
1053
|
rb_hash_aset(hp->env, g_query_string, STR_NEW(start.query, p));
|
1135
1054
|
}
|
1136
|
-
#line
|
1055
|
+
#line 342 "pitchfork_http.rl"
|
1137
1056
|
{
|
1138
|
-
VALUE str;
|
1139
|
-
|
1140
1057
|
VALIDATE_MAX_URI_LENGTH(LEN(mark, p), REQUEST_URI);
|
1141
|
-
|
1142
|
-
/*
|
1143
|
-
* "OPTIONS * HTTP/1.1\r\n" is a valid request, but we can't have '*'
|
1144
|
-
* in REQUEST_PATH or PATH_INFO or else Rack::Lint will complain
|
1145
|
-
*/
|
1146
|
-
if (STR_CSTR_EQ(str, "*")) {
|
1147
|
-
str = rb_str_new(NULL, 0);
|
1148
|
-
rb_hash_aset(hp->env, g_path_info, str);
|
1149
|
-
rb_hash_aset(hp->env, g_request_path, str);
|
1150
|
-
}
|
1058
|
+
rb_hash_aset(hp->env, g_request_uri, STR_NEW(mark, p));
|
1151
1059
|
}
|
1152
1060
|
goto st18;
|
1153
1061
|
st18:
|
1154
1062
|
if ( ++p == pe )
|
1155
1063
|
goto _test_eof18;
|
1156
1064
|
case 18:
|
1157
|
-
#line
|
1065
|
+
#line 1066 "pitchfork_http.c"
|
1158
1066
|
if ( (*p) == 10 )
|
1159
1067
|
goto tr21;
|
1160
1068
|
goto st0;
|
1161
1069
|
tr23:
|
1162
|
-
#line
|
1070
|
+
#line 330 "pitchfork_http.rl"
|
1163
1071
|
{ MARK(start.field, p); }
|
1164
|
-
#line
|
1072
|
+
#line 331 "pitchfork_http.rl"
|
1165
1073
|
{ snake_upcase_char(deconst(p)); }
|
1166
1074
|
goto st19;
|
1167
1075
|
tr32:
|
1168
|
-
#line
|
1076
|
+
#line 331 "pitchfork_http.rl"
|
1169
1077
|
{ snake_upcase_char(deconst(p)); }
|
1170
1078
|
goto st19;
|
1171
1079
|
st19:
|
1172
1080
|
if ( ++p == pe )
|
1173
1081
|
goto _test_eof19;
|
1174
1082
|
case 19:
|
1175
|
-
#line
|
1083
|
+
#line 1084 "pitchfork_http.c"
|
1176
1084
|
switch( (*p) ) {
|
1177
1085
|
case 33: goto tr32;
|
1178
1086
|
case 58: goto tr33;
|
@@ -1198,18 +1106,18 @@ case 19:
|
|
1198
1106
|
goto tr32;
|
1199
1107
|
goto st0;
|
1200
1108
|
tr35:
|
1201
|
-
#line
|
1109
|
+
#line 334 "pitchfork_http.rl"
|
1202
1110
|
{ MARK(mark, p); }
|
1203
1111
|
goto st20;
|
1204
1112
|
tr33:
|
1205
|
-
#line
|
1113
|
+
#line 333 "pitchfork_http.rl"
|
1206
1114
|
{ hp->s.field_len = LEN(start.field, p); }
|
1207
1115
|
goto st20;
|
1208
1116
|
st20:
|
1209
1117
|
if ( ++p == pe )
|
1210
1118
|
goto _test_eof20;
|
1211
1119
|
case 20:
|
1212
|
-
#line
|
1120
|
+
#line 1121 "pitchfork_http.c"
|
1213
1121
|
switch( (*p) ) {
|
1214
1122
|
case 9: goto tr35;
|
1215
1123
|
case 10: goto tr36;
|
@@ -1221,14 +1129,14 @@ case 20:
|
|
1221
1129
|
goto st0;
|
1222
1130
|
goto tr34;
|
1223
1131
|
tr34:
|
1224
|
-
#line
|
1132
|
+
#line 334 "pitchfork_http.rl"
|
1225
1133
|
{ MARK(mark, p); }
|
1226
1134
|
goto st21;
|
1227
1135
|
st21:
|
1228
1136
|
if ( ++p == pe )
|
1229
1137
|
goto _test_eof21;
|
1230
1138
|
case 21:
|
1231
|
-
#line
|
1139
|
+
#line 1140 "pitchfork_http.c"
|
1232
1140
|
switch( (*p) ) {
|
1233
1141
|
case 10: goto tr39;
|
1234
1142
|
case 13: goto tr40;
|
@@ -1241,25 +1149,14 @@ case 21:
|
|
1241
1149
|
goto st0;
|
1242
1150
|
goto st21;
|
1243
1151
|
tr9:
|
1244
|
-
#line
|
1152
|
+
#line 342 "pitchfork_http.rl"
|
1245
1153
|
{
|
1246
|
-
VALUE str;
|
1247
|
-
|
1248
1154
|
VALIDATE_MAX_URI_LENGTH(LEN(mark, p), REQUEST_URI);
|
1249
|
-
|
1250
|
-
/*
|
1251
|
-
* "OPTIONS * HTTP/1.1\r\n" is a valid request, but we can't have '*'
|
1252
|
-
* in REQUEST_PATH or PATH_INFO or else Rack::Lint will complain
|
1253
|
-
*/
|
1254
|
-
if (STR_CSTR_EQ(str, "*")) {
|
1255
|
-
str = rb_str_new(NULL, 0);
|
1256
|
-
rb_hash_aset(hp->env, g_path_info, str);
|
1257
|
-
rb_hash_aset(hp->env, g_request_path, str);
|
1258
|
-
}
|
1155
|
+
rb_hash_aset(hp->env, g_request_uri, STR_NEW(mark, p));
|
1259
1156
|
}
|
1260
1157
|
goto st22;
|
1261
1158
|
tr50:
|
1262
|
-
#line
|
1159
|
+
#line 361 "pitchfork_http.rl"
|
1263
1160
|
{
|
1264
1161
|
VALUE val;
|
1265
1162
|
|
@@ -1270,76 +1167,43 @@ tr50:
|
|
1270
1167
|
if (!STR_CSTR_EQ(val, "*"))
|
1271
1168
|
rb_hash_aset(hp->env, g_path_info, val);
|
1272
1169
|
}
|
1273
|
-
#line
|
1170
|
+
#line 342 "pitchfork_http.rl"
|
1274
1171
|
{
|
1275
|
-
VALUE str;
|
1276
|
-
|
1277
1172
|
VALIDATE_MAX_URI_LENGTH(LEN(mark, p), REQUEST_URI);
|
1278
|
-
|
1279
|
-
/*
|
1280
|
-
* "OPTIONS * HTTP/1.1\r\n" is a valid request, but we can't have '*'
|
1281
|
-
* in REQUEST_PATH or PATH_INFO or else Rack::Lint will complain
|
1282
|
-
*/
|
1283
|
-
if (STR_CSTR_EQ(str, "*")) {
|
1284
|
-
str = rb_str_new(NULL, 0);
|
1285
|
-
rb_hash_aset(hp->env, g_path_info, str);
|
1286
|
-
rb_hash_aset(hp->env, g_request_path, str);
|
1287
|
-
}
|
1173
|
+
rb_hash_aset(hp->env, g_request_uri, STR_NEW(mark, p));
|
1288
1174
|
}
|
1289
1175
|
goto st22;
|
1290
1176
|
tr56:
|
1291
|
-
#line
|
1177
|
+
#line 355 "pitchfork_http.rl"
|
1292
1178
|
{MARK(start.query, p); }
|
1293
|
-
#line
|
1179
|
+
#line 356 "pitchfork_http.rl"
|
1294
1180
|
{
|
1295
1181
|
VALIDATE_MAX_URI_LENGTH(LEN(start.query, p), QUERY_STRING);
|
1296
1182
|
rb_hash_aset(hp->env, g_query_string, STR_NEW(start.query, p));
|
1297
1183
|
}
|
1298
|
-
#line
|
1184
|
+
#line 342 "pitchfork_http.rl"
|
1299
1185
|
{
|
1300
|
-
VALUE str;
|
1301
|
-
|
1302
1186
|
VALIDATE_MAX_URI_LENGTH(LEN(mark, p), REQUEST_URI);
|
1303
|
-
|
1304
|
-
/*
|
1305
|
-
* "OPTIONS * HTTP/1.1\r\n" is a valid request, but we can't have '*'
|
1306
|
-
* in REQUEST_PATH or PATH_INFO or else Rack::Lint will complain
|
1307
|
-
*/
|
1308
|
-
if (STR_CSTR_EQ(str, "*")) {
|
1309
|
-
str = rb_str_new(NULL, 0);
|
1310
|
-
rb_hash_aset(hp->env, g_path_info, str);
|
1311
|
-
rb_hash_aset(hp->env, g_request_path, str);
|
1312
|
-
}
|
1187
|
+
rb_hash_aset(hp->env, g_request_uri, STR_NEW(mark, p));
|
1313
1188
|
}
|
1314
1189
|
goto st22;
|
1315
1190
|
tr60:
|
1316
|
-
#line
|
1191
|
+
#line 356 "pitchfork_http.rl"
|
1317
1192
|
{
|
1318
1193
|
VALIDATE_MAX_URI_LENGTH(LEN(start.query, p), QUERY_STRING);
|
1319
1194
|
rb_hash_aset(hp->env, g_query_string, STR_NEW(start.query, p));
|
1320
1195
|
}
|
1321
|
-
#line
|
1196
|
+
#line 342 "pitchfork_http.rl"
|
1322
1197
|
{
|
1323
|
-
VALUE str;
|
1324
|
-
|
1325
1198
|
VALIDATE_MAX_URI_LENGTH(LEN(mark, p), REQUEST_URI);
|
1326
|
-
|
1327
|
-
/*
|
1328
|
-
* "OPTIONS * HTTP/1.1\r\n" is a valid request, but we can't have '*'
|
1329
|
-
* in REQUEST_PATH or PATH_INFO or else Rack::Lint will complain
|
1330
|
-
*/
|
1331
|
-
if (STR_CSTR_EQ(str, "*")) {
|
1332
|
-
str = rb_str_new(NULL, 0);
|
1333
|
-
rb_hash_aset(hp->env, g_path_info, str);
|
1334
|
-
rb_hash_aset(hp->env, g_request_path, str);
|
1335
|
-
}
|
1199
|
+
rb_hash_aset(hp->env, g_request_uri, STR_NEW(mark, p));
|
1336
1200
|
}
|
1337
1201
|
goto st22;
|
1338
1202
|
st22:
|
1339
1203
|
if ( ++p == pe )
|
1340
1204
|
goto _test_eof22;
|
1341
1205
|
case 22:
|
1342
|
-
#line
|
1206
|
+
#line 1207 "pitchfork_http.c"
|
1343
1207
|
switch( (*p) ) {
|
1344
1208
|
case 32: goto tr42;
|
1345
1209
|
case 35: goto st0;
|
@@ -1350,14 +1214,14 @@ case 22:
|
|
1350
1214
|
goto st0;
|
1351
1215
|
goto tr41;
|
1352
1216
|
tr41:
|
1353
|
-
#line
|
1217
|
+
#line 328 "pitchfork_http.rl"
|
1354
1218
|
{MARK(mark, p); }
|
1355
1219
|
goto st23;
|
1356
1220
|
st23:
|
1357
1221
|
if ( ++p == pe )
|
1358
1222
|
goto _test_eof23;
|
1359
1223
|
case 23:
|
1360
|
-
#line
|
1224
|
+
#line 1225 "pitchfork_http.c"
|
1361
1225
|
switch( (*p) ) {
|
1362
1226
|
case 32: goto tr45;
|
1363
1227
|
case 35: goto st0;
|
@@ -1368,14 +1232,14 @@ case 23:
|
|
1368
1232
|
goto st0;
|
1369
1233
|
goto st23;
|
1370
1234
|
tr43:
|
1371
|
-
#line
|
1235
|
+
#line 328 "pitchfork_http.rl"
|
1372
1236
|
{MARK(mark, p); }
|
1373
1237
|
goto st24;
|
1374
1238
|
st24:
|
1375
1239
|
if ( ++p == pe )
|
1376
1240
|
goto _test_eof24;
|
1377
1241
|
case 24:
|
1378
|
-
#line
|
1242
|
+
#line 1243 "pitchfork_http.c"
|
1379
1243
|
if ( (*p) < 65 ) {
|
1380
1244
|
if ( 48 <= (*p) && (*p) <= 57 )
|
1381
1245
|
goto st25;
|
@@ -1399,20 +1263,20 @@ case 25:
|
|
1399
1263
|
goto st23;
|
1400
1264
|
goto st0;
|
1401
1265
|
tr6:
|
1402
|
-
#line
|
1266
|
+
#line 328 "pitchfork_http.rl"
|
1403
1267
|
{MARK(mark, p); }
|
1404
1268
|
goto st26;
|
1405
1269
|
tr76:
|
1406
|
-
#line
|
1270
|
+
#line 341 "pitchfork_http.rl"
|
1407
1271
|
{ rb_hash_aset(hp->env, g_http_host, STR_NEW(mark, p)); }
|
1408
|
-
#line
|
1272
|
+
#line 328 "pitchfork_http.rl"
|
1409
1273
|
{MARK(mark, p); }
|
1410
1274
|
goto st26;
|
1411
1275
|
st26:
|
1412
1276
|
if ( ++p == pe )
|
1413
1277
|
goto _test_eof26;
|
1414
1278
|
case 26:
|
1415
|
-
#line
|
1279
|
+
#line 1280 "pitchfork_http.c"
|
1416
1280
|
switch( (*p) ) {
|
1417
1281
|
case 32: goto tr49;
|
1418
1282
|
case 35: goto tr50;
|
@@ -1450,7 +1314,7 @@ case 28:
|
|
1450
1314
|
goto st26;
|
1451
1315
|
goto st0;
|
1452
1316
|
tr52:
|
1453
|
-
#line
|
1317
|
+
#line 361 "pitchfork_http.rl"
|
1454
1318
|
{
|
1455
1319
|
VALUE val;
|
1456
1320
|
|
@@ -1466,7 +1330,7 @@ st29:
|
|
1466
1330
|
if ( ++p == pe )
|
1467
1331
|
goto _test_eof29;
|
1468
1332
|
case 29:
|
1469
|
-
#line
|
1333
|
+
#line 1334 "pitchfork_http.c"
|
1470
1334
|
switch( (*p) ) {
|
1471
1335
|
case 32: goto tr55;
|
1472
1336
|
case 35: goto tr56;
|
@@ -1477,14 +1341,14 @@ case 29:
|
|
1477
1341
|
goto st0;
|
1478
1342
|
goto tr54;
|
1479
1343
|
tr54:
|
1480
|
-
#line
|
1344
|
+
#line 355 "pitchfork_http.rl"
|
1481
1345
|
{MARK(start.query, p); }
|
1482
1346
|
goto st30;
|
1483
1347
|
st30:
|
1484
1348
|
if ( ++p == pe )
|
1485
1349
|
goto _test_eof30;
|
1486
1350
|
case 30:
|
1487
|
-
#line
|
1351
|
+
#line 1352 "pitchfork_http.c"
|
1488
1352
|
switch( (*p) ) {
|
1489
1353
|
case 32: goto tr59;
|
1490
1354
|
case 35: goto tr60;
|
@@ -1495,14 +1359,14 @@ case 30:
|
|
1495
1359
|
goto st0;
|
1496
1360
|
goto st30;
|
1497
1361
|
tr57:
|
1498
|
-
#line
|
1362
|
+
#line 355 "pitchfork_http.rl"
|
1499
1363
|
{MARK(start.query, p); }
|
1500
1364
|
goto st31;
|
1501
1365
|
st31:
|
1502
1366
|
if ( ++p == pe )
|
1503
1367
|
goto _test_eof31;
|
1504
1368
|
case 31:
|
1505
|
-
#line
|
1369
|
+
#line 1370 "pitchfork_http.c"
|
1506
1370
|
if ( (*p) < 65 ) {
|
1507
1371
|
if ( 48 <= (*p) && (*p) <= 57 )
|
1508
1372
|
goto st32;
|
@@ -1526,58 +1390,58 @@ case 32:
|
|
1526
1390
|
goto st30;
|
1527
1391
|
goto st0;
|
1528
1392
|
tr7:
|
1529
|
-
#line
|
1393
|
+
#line 328 "pitchfork_http.rl"
|
1530
1394
|
{MARK(mark, p); }
|
1531
|
-
#line
|
1395
|
+
#line 332 "pitchfork_http.rl"
|
1532
1396
|
{ downcase_char(deconst(p)); }
|
1533
1397
|
goto st33;
|
1534
1398
|
st33:
|
1535
1399
|
if ( ++p == pe )
|
1536
1400
|
goto _test_eof33;
|
1537
1401
|
case 33:
|
1538
|
-
#line
|
1402
|
+
#line 1403 "pitchfork_http.c"
|
1539
1403
|
switch( (*p) ) {
|
1540
1404
|
case 84: goto tr63;
|
1541
1405
|
case 116: goto tr63;
|
1542
1406
|
}
|
1543
1407
|
goto st0;
|
1544
1408
|
tr63:
|
1545
|
-
#line
|
1409
|
+
#line 332 "pitchfork_http.rl"
|
1546
1410
|
{ downcase_char(deconst(p)); }
|
1547
1411
|
goto st34;
|
1548
1412
|
st34:
|
1549
1413
|
if ( ++p == pe )
|
1550
1414
|
goto _test_eof34;
|
1551
1415
|
case 34:
|
1552
|
-
#line
|
1416
|
+
#line 1417 "pitchfork_http.c"
|
1553
1417
|
switch( (*p) ) {
|
1554
1418
|
case 84: goto tr64;
|
1555
1419
|
case 116: goto tr64;
|
1556
1420
|
}
|
1557
1421
|
goto st0;
|
1558
1422
|
tr64:
|
1559
|
-
#line
|
1423
|
+
#line 332 "pitchfork_http.rl"
|
1560
1424
|
{ downcase_char(deconst(p)); }
|
1561
1425
|
goto st35;
|
1562
1426
|
st35:
|
1563
1427
|
if ( ++p == pe )
|
1564
1428
|
goto _test_eof35;
|
1565
1429
|
case 35:
|
1566
|
-
#line
|
1430
|
+
#line 1431 "pitchfork_http.c"
|
1567
1431
|
switch( (*p) ) {
|
1568
1432
|
case 80: goto tr65;
|
1569
1433
|
case 112: goto tr65;
|
1570
1434
|
}
|
1571
1435
|
goto st0;
|
1572
1436
|
tr65:
|
1573
|
-
#line
|
1437
|
+
#line 332 "pitchfork_http.rl"
|
1574
1438
|
{ downcase_char(deconst(p)); }
|
1575
1439
|
goto st36;
|
1576
1440
|
st36:
|
1577
1441
|
if ( ++p == pe )
|
1578
1442
|
goto _test_eof36;
|
1579
1443
|
case 36:
|
1580
|
-
#line
|
1444
|
+
#line 1445 "pitchfork_http.c"
|
1581
1445
|
switch( (*p) ) {
|
1582
1446
|
case 58: goto tr66;
|
1583
1447
|
case 83: goto tr67;
|
@@ -1585,7 +1449,7 @@ case 36:
|
|
1585
1449
|
}
|
1586
1450
|
goto st0;
|
1587
1451
|
tr66:
|
1588
|
-
#line
|
1452
|
+
#line 338 "pitchfork_http.rl"
|
1589
1453
|
{
|
1590
1454
|
rb_hash_aset(hp->env, g_rack_url_scheme, STR_NEW(mark, p));
|
1591
1455
|
}
|
@@ -1594,7 +1458,7 @@ st37:
|
|
1594
1458
|
if ( ++p == pe )
|
1595
1459
|
goto _test_eof37;
|
1596
1460
|
case 37:
|
1597
|
-
#line
|
1461
|
+
#line 1462 "pitchfork_http.c"
|
1598
1462
|
if ( (*p) == 47 )
|
1599
1463
|
goto st38;
|
1600
1464
|
goto st0;
|
@@ -1682,14 +1546,14 @@ case 42:
|
|
1682
1546
|
goto st40;
|
1683
1547
|
goto st0;
|
1684
1548
|
tr72:
|
1685
|
-
#line
|
1549
|
+
#line 328 "pitchfork_http.rl"
|
1686
1550
|
{MARK(mark, p); }
|
1687
1551
|
goto st43;
|
1688
1552
|
st43:
|
1689
1553
|
if ( ++p == pe )
|
1690
1554
|
goto _test_eof43;
|
1691
1555
|
case 43:
|
1692
|
-
#line
|
1556
|
+
#line 1557 "pitchfork_http.c"
|
1693
1557
|
switch( (*p) ) {
|
1694
1558
|
case 37: goto st41;
|
1695
1559
|
case 47: goto tr76;
|
@@ -1741,14 +1605,14 @@ case 44:
|
|
1741
1605
|
goto st0;
|
1742
1606
|
goto st40;
|
1743
1607
|
tr73:
|
1744
|
-
#line
|
1608
|
+
#line 328 "pitchfork_http.rl"
|
1745
1609
|
{MARK(mark, p); }
|
1746
1610
|
goto st45;
|
1747
1611
|
st45:
|
1748
1612
|
if ( ++p == pe )
|
1749
1613
|
goto _test_eof45;
|
1750
1614
|
case 45:
|
1751
|
-
#line
|
1615
|
+
#line 1616 "pitchfork_http.c"
|
1752
1616
|
switch( (*p) ) {
|
1753
1617
|
case 37: goto st41;
|
1754
1618
|
case 47: goto st0;
|
@@ -1826,14 +1690,14 @@ case 47:
|
|
1826
1690
|
goto st0;
|
1827
1691
|
goto st40;
|
1828
1692
|
tr67:
|
1829
|
-
#line
|
1693
|
+
#line 332 "pitchfork_http.rl"
|
1830
1694
|
{ downcase_char(deconst(p)); }
|
1831
1695
|
goto st48;
|
1832
1696
|
st48:
|
1833
1697
|
if ( ++p == pe )
|
1834
1698
|
goto _test_eof48;
|
1835
1699
|
case 48:
|
1836
|
-
#line
|
1700
|
+
#line 1701 "pitchfork_http.c"
|
1837
1701
|
if ( (*p) == 58 )
|
1838
1702
|
goto tr66;
|
1839
1703
|
goto st0;
|
@@ -2349,14 +2213,14 @@ case 67:
|
|
2349
2213
|
goto tr3;
|
2350
2214
|
goto st0;
|
2351
2215
|
tr2:
|
2352
|
-
#line
|
2216
|
+
#line 328 "pitchfork_http.rl"
|
2353
2217
|
{MARK(mark, p); }
|
2354
2218
|
goto st68;
|
2355
2219
|
st68:
|
2356
2220
|
if ( ++p == pe )
|
2357
2221
|
goto _test_eof68;
|
2358
2222
|
case 68:
|
2359
|
-
#line
|
2223
|
+
#line 2224 "pitchfork_http.c"
|
2360
2224
|
switch( (*p) ) {
|
2361
2225
|
case 32: goto tr3;
|
2362
2226
|
case 33: goto st49;
|
@@ -2440,14 +2304,14 @@ case 70:
|
|
2440
2304
|
goto st51;
|
2441
2305
|
goto st0;
|
2442
2306
|
tr100:
|
2443
|
-
#line
|
2307
|
+
#line 337 "pitchfork_http.rl"
|
2444
2308
|
{ request_method(hp, PTR_TO(mark), LEN(mark, p)); }
|
2445
2309
|
goto st71;
|
2446
2310
|
st71:
|
2447
2311
|
if ( ++p == pe )
|
2448
2312
|
goto _test_eof71;
|
2449
2313
|
case 71:
|
2450
|
-
#line
|
2314
|
+
#line 2315 "pitchfork_http.c"
|
2451
2315
|
switch( (*p) ) {
|
2452
2316
|
case 42: goto tr101;
|
2453
2317
|
case 47: goto tr102;
|
@@ -2456,14 +2320,14 @@ case 71:
|
|
2456
2320
|
}
|
2457
2321
|
goto st0;
|
2458
2322
|
tr101:
|
2459
|
-
#line
|
2323
|
+
#line 328 "pitchfork_http.rl"
|
2460
2324
|
{MARK(mark, p); }
|
2461
2325
|
goto st72;
|
2462
2326
|
st72:
|
2463
2327
|
if ( ++p == pe )
|
2464
2328
|
goto _test_eof72;
|
2465
2329
|
case 72:
|
2466
|
-
#line
|
2330
|
+
#line 2331 "pitchfork_http.c"
|
2467
2331
|
switch( (*p) ) {
|
2468
2332
|
case 10: goto tr104;
|
2469
2333
|
case 13: goto tr105;
|
@@ -2472,25 +2336,14 @@ case 72:
|
|
2472
2336
|
}
|
2473
2337
|
goto st0;
|
2474
2338
|
tr106:
|
2475
|
-
#line
|
2339
|
+
#line 342 "pitchfork_http.rl"
|
2476
2340
|
{
|
2477
|
-
VALUE str;
|
2478
|
-
|
2479
2341
|
VALIDATE_MAX_URI_LENGTH(LEN(mark, p), REQUEST_URI);
|
2480
|
-
|
2481
|
-
/*
|
2482
|
-
* "OPTIONS * HTTP/1.1\r\n" is a valid request, but we can't have '*'
|
2483
|
-
* in REQUEST_PATH or PATH_INFO or else Rack::Lint will complain
|
2484
|
-
*/
|
2485
|
-
if (STR_CSTR_EQ(str, "*")) {
|
2486
|
-
str = rb_str_new(NULL, 0);
|
2487
|
-
rb_hash_aset(hp->env, g_path_info, str);
|
2488
|
-
rb_hash_aset(hp->env, g_request_path, str);
|
2489
|
-
}
|
2342
|
+
rb_hash_aset(hp->env, g_request_uri, STR_NEW(mark, p));
|
2490
2343
|
}
|
2491
2344
|
goto st73;
|
2492
2345
|
tr119:
|
2493
|
-
#line
|
2346
|
+
#line 361 "pitchfork_http.rl"
|
2494
2347
|
{
|
2495
2348
|
VALUE val;
|
2496
2349
|
|
@@ -2501,76 +2354,43 @@ tr119:
|
|
2501
2354
|
if (!STR_CSTR_EQ(val, "*"))
|
2502
2355
|
rb_hash_aset(hp->env, g_path_info, val);
|
2503
2356
|
}
|
2504
|
-
#line
|
2357
|
+
#line 342 "pitchfork_http.rl"
|
2505
2358
|
{
|
2506
|
-
VALUE str;
|
2507
|
-
|
2508
2359
|
VALIDATE_MAX_URI_LENGTH(LEN(mark, p), REQUEST_URI);
|
2509
|
-
|
2510
|
-
/*
|
2511
|
-
* "OPTIONS * HTTP/1.1\r\n" is a valid request, but we can't have '*'
|
2512
|
-
* in REQUEST_PATH or PATH_INFO or else Rack::Lint will complain
|
2513
|
-
*/
|
2514
|
-
if (STR_CSTR_EQ(str, "*")) {
|
2515
|
-
str = rb_str_new(NULL, 0);
|
2516
|
-
rb_hash_aset(hp->env, g_path_info, str);
|
2517
|
-
rb_hash_aset(hp->env, g_request_path, str);
|
2518
|
-
}
|
2360
|
+
rb_hash_aset(hp->env, g_request_uri, STR_NEW(mark, p));
|
2519
2361
|
}
|
2520
2362
|
goto st73;
|
2521
2363
|
tr126:
|
2522
|
-
#line
|
2364
|
+
#line 355 "pitchfork_http.rl"
|
2523
2365
|
{MARK(start.query, p); }
|
2524
|
-
#line
|
2366
|
+
#line 356 "pitchfork_http.rl"
|
2525
2367
|
{
|
2526
2368
|
VALIDATE_MAX_URI_LENGTH(LEN(start.query, p), QUERY_STRING);
|
2527
2369
|
rb_hash_aset(hp->env, g_query_string, STR_NEW(start.query, p));
|
2528
2370
|
}
|
2529
|
-
#line
|
2371
|
+
#line 342 "pitchfork_http.rl"
|
2530
2372
|
{
|
2531
|
-
VALUE str;
|
2532
|
-
|
2533
2373
|
VALIDATE_MAX_URI_LENGTH(LEN(mark, p), REQUEST_URI);
|
2534
|
-
|
2535
|
-
/*
|
2536
|
-
* "OPTIONS * HTTP/1.1\r\n" is a valid request, but we can't have '*'
|
2537
|
-
* in REQUEST_PATH or PATH_INFO or else Rack::Lint will complain
|
2538
|
-
*/
|
2539
|
-
if (STR_CSTR_EQ(str, "*")) {
|
2540
|
-
str = rb_str_new(NULL, 0);
|
2541
|
-
rb_hash_aset(hp->env, g_path_info, str);
|
2542
|
-
rb_hash_aset(hp->env, g_request_path, str);
|
2543
|
-
}
|
2374
|
+
rb_hash_aset(hp->env, g_request_uri, STR_NEW(mark, p));
|
2544
2375
|
}
|
2545
2376
|
goto st73;
|
2546
2377
|
tr131:
|
2547
|
-
#line
|
2378
|
+
#line 356 "pitchfork_http.rl"
|
2548
2379
|
{
|
2549
2380
|
VALIDATE_MAX_URI_LENGTH(LEN(start.query, p), QUERY_STRING);
|
2550
2381
|
rb_hash_aset(hp->env, g_query_string, STR_NEW(start.query, p));
|
2551
2382
|
}
|
2552
|
-
#line
|
2383
|
+
#line 342 "pitchfork_http.rl"
|
2553
2384
|
{
|
2554
|
-
VALUE str;
|
2555
|
-
|
2556
2385
|
VALIDATE_MAX_URI_LENGTH(LEN(mark, p), REQUEST_URI);
|
2557
|
-
|
2558
|
-
/*
|
2559
|
-
* "OPTIONS * HTTP/1.1\r\n" is a valid request, but we can't have '*'
|
2560
|
-
* in REQUEST_PATH or PATH_INFO or else Rack::Lint will complain
|
2561
|
-
*/
|
2562
|
-
if (STR_CSTR_EQ(str, "*")) {
|
2563
|
-
str = rb_str_new(NULL, 0);
|
2564
|
-
rb_hash_aset(hp->env, g_path_info, str);
|
2565
|
-
rb_hash_aset(hp->env, g_request_path, str);
|
2566
|
-
}
|
2386
|
+
rb_hash_aset(hp->env, g_request_uri, STR_NEW(mark, p));
|
2567
2387
|
}
|
2568
2388
|
goto st73;
|
2569
2389
|
st73:
|
2570
2390
|
if ( ++p == pe )
|
2571
2391
|
goto _test_eof73;
|
2572
2392
|
case 73:
|
2573
|
-
#line
|
2393
|
+
#line 2394 "pitchfork_http.c"
|
2574
2394
|
switch( (*p) ) {
|
2575
2395
|
case 10: goto tr108;
|
2576
2396
|
case 13: goto tr109;
|
@@ -2583,14 +2403,14 @@ case 73:
|
|
2583
2403
|
goto st0;
|
2584
2404
|
goto tr107;
|
2585
2405
|
tr107:
|
2586
|
-
#line
|
2406
|
+
#line 328 "pitchfork_http.rl"
|
2587
2407
|
{MARK(mark, p); }
|
2588
2408
|
goto st74;
|
2589
2409
|
st74:
|
2590
2410
|
if ( ++p == pe )
|
2591
2411
|
goto _test_eof74;
|
2592
2412
|
case 74:
|
2593
|
-
#line
|
2413
|
+
#line 2414 "pitchfork_http.c"
|
2594
2414
|
switch( (*p) ) {
|
2595
2415
|
case 10: goto tr112;
|
2596
2416
|
case 13: goto tr113;
|
@@ -2603,14 +2423,14 @@ case 74:
|
|
2603
2423
|
goto st0;
|
2604
2424
|
goto st74;
|
2605
2425
|
tr110:
|
2606
|
-
#line
|
2426
|
+
#line 328 "pitchfork_http.rl"
|
2607
2427
|
{MARK(mark, p); }
|
2608
2428
|
goto st75;
|
2609
2429
|
st75:
|
2610
2430
|
if ( ++p == pe )
|
2611
2431
|
goto _test_eof75;
|
2612
2432
|
case 75:
|
2613
|
-
#line
|
2433
|
+
#line 2434 "pitchfork_http.c"
|
2614
2434
|
if ( (*p) < 65 ) {
|
2615
2435
|
if ( 48 <= (*p) && (*p) <= 57 )
|
2616
2436
|
goto st76;
|
@@ -2634,20 +2454,20 @@ case 76:
|
|
2634
2454
|
goto st74;
|
2635
2455
|
goto st0;
|
2636
2456
|
tr102:
|
2637
|
-
#line
|
2457
|
+
#line 328 "pitchfork_http.rl"
|
2638
2458
|
{MARK(mark, p); }
|
2639
2459
|
goto st77;
|
2640
2460
|
tr147:
|
2641
|
-
#line
|
2461
|
+
#line 341 "pitchfork_http.rl"
|
2642
2462
|
{ rb_hash_aset(hp->env, g_http_host, STR_NEW(mark, p)); }
|
2643
|
-
#line
|
2463
|
+
#line 328 "pitchfork_http.rl"
|
2644
2464
|
{MARK(mark, p); }
|
2645
2465
|
goto st77;
|
2646
2466
|
st77:
|
2647
2467
|
if ( ++p == pe )
|
2648
2468
|
goto _test_eof77;
|
2649
2469
|
case 77:
|
2650
|
-
#line
|
2470
|
+
#line 2471 "pitchfork_http.c"
|
2651
2471
|
switch( (*p) ) {
|
2652
2472
|
case 10: goto tr117;
|
2653
2473
|
case 13: goto tr118;
|
@@ -2687,7 +2507,7 @@ case 79:
|
|
2687
2507
|
goto st77;
|
2688
2508
|
goto st0;
|
2689
2509
|
tr121:
|
2690
|
-
#line
|
2510
|
+
#line 361 "pitchfork_http.rl"
|
2691
2511
|
{
|
2692
2512
|
VALUE val;
|
2693
2513
|
|
@@ -2703,7 +2523,7 @@ st80:
|
|
2703
2523
|
if ( ++p == pe )
|
2704
2524
|
goto _test_eof80;
|
2705
2525
|
case 80:
|
2706
|
-
#line
|
2526
|
+
#line 2527 "pitchfork_http.c"
|
2707
2527
|
switch( (*p) ) {
|
2708
2528
|
case 10: goto tr124;
|
2709
2529
|
case 13: goto tr125;
|
@@ -2716,14 +2536,14 @@ case 80:
|
|
2716
2536
|
goto st0;
|
2717
2537
|
goto tr123;
|
2718
2538
|
tr123:
|
2719
|
-
#line
|
2539
|
+
#line 355 "pitchfork_http.rl"
|
2720
2540
|
{MARK(start.query, p); }
|
2721
2541
|
goto st81;
|
2722
2542
|
st81:
|
2723
2543
|
if ( ++p == pe )
|
2724
2544
|
goto _test_eof81;
|
2725
2545
|
case 81:
|
2726
|
-
#line
|
2546
|
+
#line 2547 "pitchfork_http.c"
|
2727
2547
|
switch( (*p) ) {
|
2728
2548
|
case 10: goto tr129;
|
2729
2549
|
case 13: goto tr130;
|
@@ -2736,14 +2556,14 @@ case 81:
|
|
2736
2556
|
goto st0;
|
2737
2557
|
goto st81;
|
2738
2558
|
tr127:
|
2739
|
-
#line
|
2559
|
+
#line 355 "pitchfork_http.rl"
|
2740
2560
|
{MARK(start.query, p); }
|
2741
2561
|
goto st82;
|
2742
2562
|
st82:
|
2743
2563
|
if ( ++p == pe )
|
2744
2564
|
goto _test_eof82;
|
2745
2565
|
case 82:
|
2746
|
-
#line
|
2566
|
+
#line 2567 "pitchfork_http.c"
|
2747
2567
|
if ( (*p) < 65 ) {
|
2748
2568
|
if ( 48 <= (*p) && (*p) <= 57 )
|
2749
2569
|
goto st83;
|
@@ -2767,58 +2587,58 @@ case 83:
|
|
2767
2587
|
goto st81;
|
2768
2588
|
goto st0;
|
2769
2589
|
tr103:
|
2770
|
-
#line
|
2590
|
+
#line 328 "pitchfork_http.rl"
|
2771
2591
|
{MARK(mark, p); }
|
2772
|
-
#line
|
2592
|
+
#line 332 "pitchfork_http.rl"
|
2773
2593
|
{ downcase_char(deconst(p)); }
|
2774
2594
|
goto st84;
|
2775
2595
|
st84:
|
2776
2596
|
if ( ++p == pe )
|
2777
2597
|
goto _test_eof84;
|
2778
2598
|
case 84:
|
2779
|
-
#line
|
2599
|
+
#line 2600 "pitchfork_http.c"
|
2780
2600
|
switch( (*p) ) {
|
2781
2601
|
case 84: goto tr134;
|
2782
2602
|
case 116: goto tr134;
|
2783
2603
|
}
|
2784
2604
|
goto st0;
|
2785
2605
|
tr134:
|
2786
|
-
#line
|
2606
|
+
#line 332 "pitchfork_http.rl"
|
2787
2607
|
{ downcase_char(deconst(p)); }
|
2788
2608
|
goto st85;
|
2789
2609
|
st85:
|
2790
2610
|
if ( ++p == pe )
|
2791
2611
|
goto _test_eof85;
|
2792
2612
|
case 85:
|
2793
|
-
#line
|
2613
|
+
#line 2614 "pitchfork_http.c"
|
2794
2614
|
switch( (*p) ) {
|
2795
2615
|
case 84: goto tr135;
|
2796
2616
|
case 116: goto tr135;
|
2797
2617
|
}
|
2798
2618
|
goto st0;
|
2799
2619
|
tr135:
|
2800
|
-
#line
|
2620
|
+
#line 332 "pitchfork_http.rl"
|
2801
2621
|
{ downcase_char(deconst(p)); }
|
2802
2622
|
goto st86;
|
2803
2623
|
st86:
|
2804
2624
|
if ( ++p == pe )
|
2805
2625
|
goto _test_eof86;
|
2806
2626
|
case 86:
|
2807
|
-
#line
|
2627
|
+
#line 2628 "pitchfork_http.c"
|
2808
2628
|
switch( (*p) ) {
|
2809
2629
|
case 80: goto tr136;
|
2810
2630
|
case 112: goto tr136;
|
2811
2631
|
}
|
2812
2632
|
goto st0;
|
2813
2633
|
tr136:
|
2814
|
-
#line
|
2634
|
+
#line 332 "pitchfork_http.rl"
|
2815
2635
|
{ downcase_char(deconst(p)); }
|
2816
2636
|
goto st87;
|
2817
2637
|
st87:
|
2818
2638
|
if ( ++p == pe )
|
2819
2639
|
goto _test_eof87;
|
2820
2640
|
case 87:
|
2821
|
-
#line
|
2641
|
+
#line 2642 "pitchfork_http.c"
|
2822
2642
|
switch( (*p) ) {
|
2823
2643
|
case 58: goto tr137;
|
2824
2644
|
case 83: goto tr138;
|
@@ -2826,7 +2646,7 @@ case 87:
|
|
2826
2646
|
}
|
2827
2647
|
goto st0;
|
2828
2648
|
tr137:
|
2829
|
-
#line
|
2649
|
+
#line 338 "pitchfork_http.rl"
|
2830
2650
|
{
|
2831
2651
|
rb_hash_aset(hp->env, g_rack_url_scheme, STR_NEW(mark, p));
|
2832
2652
|
}
|
@@ -2835,7 +2655,7 @@ st88:
|
|
2835
2655
|
if ( ++p == pe )
|
2836
2656
|
goto _test_eof88;
|
2837
2657
|
case 88:
|
2838
|
-
#line
|
2658
|
+
#line 2659 "pitchfork_http.c"
|
2839
2659
|
if ( (*p) == 47 )
|
2840
2660
|
goto st89;
|
2841
2661
|
goto st0;
|
@@ -2923,14 +2743,14 @@ case 93:
|
|
2923
2743
|
goto st91;
|
2924
2744
|
goto st0;
|
2925
2745
|
tr143:
|
2926
|
-
#line
|
2746
|
+
#line 328 "pitchfork_http.rl"
|
2927
2747
|
{MARK(mark, p); }
|
2928
2748
|
goto st94;
|
2929
2749
|
st94:
|
2930
2750
|
if ( ++p == pe )
|
2931
2751
|
goto _test_eof94;
|
2932
2752
|
case 94:
|
2933
|
-
#line
|
2753
|
+
#line 2754 "pitchfork_http.c"
|
2934
2754
|
switch( (*p) ) {
|
2935
2755
|
case 37: goto st92;
|
2936
2756
|
case 47: goto tr147;
|
@@ -2982,14 +2802,14 @@ case 95:
|
|
2982
2802
|
goto st0;
|
2983
2803
|
goto st91;
|
2984
2804
|
tr144:
|
2985
|
-
#line
|
2805
|
+
#line 328 "pitchfork_http.rl"
|
2986
2806
|
{MARK(mark, p); }
|
2987
2807
|
goto st96;
|
2988
2808
|
st96:
|
2989
2809
|
if ( ++p == pe )
|
2990
2810
|
goto _test_eof96;
|
2991
2811
|
case 96:
|
2992
|
-
#line
|
2812
|
+
#line 2813 "pitchfork_http.c"
|
2993
2813
|
switch( (*p) ) {
|
2994
2814
|
case 37: goto st92;
|
2995
2815
|
case 47: goto st0;
|
@@ -3067,14 +2887,14 @@ case 98:
|
|
3067
2887
|
goto st0;
|
3068
2888
|
goto st91;
|
3069
2889
|
tr138:
|
3070
|
-
#line
|
2890
|
+
#line 332 "pitchfork_http.rl"
|
3071
2891
|
{ downcase_char(deconst(p)); }
|
3072
2892
|
goto st99;
|
3073
2893
|
st99:
|
3074
2894
|
if ( ++p == pe )
|
3075
2895
|
goto _test_eof99;
|
3076
2896
|
case 99:
|
3077
|
-
#line
|
2897
|
+
#line 2898 "pitchfork_http.c"
|
3078
2898
|
if ( (*p) == 58 )
|
3079
2899
|
goto tr137;
|
3080
2900
|
goto st0;
|
@@ -3094,7 +2914,7 @@ case 100:
|
|
3094
2914
|
goto tr152;
|
3095
2915
|
goto st0;
|
3096
2916
|
tr151:
|
3097
|
-
#line
|
2917
|
+
#line 371 "pitchfork_http.rl"
|
3098
2918
|
{
|
3099
2919
|
hp->len.chunk = step_incr(hp->len.chunk, (*p), 16);
|
3100
2920
|
if (hp->len.chunk < 0)
|
@@ -3105,7 +2925,7 @@ st101:
|
|
3105
2925
|
if ( ++p == pe )
|
3106
2926
|
goto _test_eof101;
|
3107
2927
|
case 101:
|
3108
|
-
#line
|
2928
|
+
#line 2929 "pitchfork_http.c"
|
3109
2929
|
switch( (*p) ) {
|
3110
2930
|
case 10: goto tr153;
|
3111
2931
|
case 13: goto st102;
|
@@ -3122,7 +2942,7 @@ case 101:
|
|
3122
2942
|
goto tr152;
|
3123
2943
|
goto st0;
|
3124
2944
|
tr153:
|
3125
|
-
#line
|
2945
|
+
#line 400 "pitchfork_http.rl"
|
3126
2946
|
{
|
3127
2947
|
HP_FL_SET(hp, INTRAILER);
|
3128
2948
|
cs = http_parser_en_Trailers;
|
@@ -3135,7 +2955,7 @@ st123:
|
|
3135
2955
|
if ( ++p == pe )
|
3136
2956
|
goto _test_eof123;
|
3137
2957
|
case 123:
|
3138
|
-
#line
|
2958
|
+
#line 2959 "pitchfork_http.c"
|
3139
2959
|
goto st0;
|
3140
2960
|
st102:
|
3141
2961
|
if ( ++p == pe )
|
@@ -3145,7 +2965,7 @@ case 102:
|
|
3145
2965
|
goto tr153;
|
3146
2966
|
goto st0;
|
3147
2967
|
tr152:
|
3148
|
-
#line
|
2968
|
+
#line 371 "pitchfork_http.rl"
|
3149
2969
|
{
|
3150
2970
|
hp->len.chunk = step_incr(hp->len.chunk, (*p), 16);
|
3151
2971
|
if (hp->len.chunk < 0)
|
@@ -3156,7 +2976,7 @@ st103:
|
|
3156
2976
|
if ( ++p == pe )
|
3157
2977
|
goto _test_eof103;
|
3158
2978
|
case 103:
|
3159
|
-
#line
|
2979
|
+
#line 2980 "pitchfork_http.c"
|
3160
2980
|
switch( (*p) ) {
|
3161
2981
|
case 10: goto st104;
|
3162
2982
|
case 13: goto st107;
|
@@ -3177,7 +2997,7 @@ st104:
|
|
3177
2997
|
case 104:
|
3178
2998
|
goto tr159;
|
3179
2999
|
tr159:
|
3180
|
-
#line
|
3000
|
+
#line 408 "pitchfork_http.rl"
|
3181
3001
|
{
|
3182
3002
|
skip_chunk_data_hack: {
|
3183
3003
|
size_t nr = MIN((size_t)hp->len.chunk, REMAINING);
|
@@ -3199,7 +3019,7 @@ st105:
|
|
3199
3019
|
if ( ++p == pe )
|
3200
3020
|
goto _test_eof105;
|
3201
3021
|
case 105:
|
3202
|
-
#line
|
3022
|
+
#line 3023 "pitchfork_http.c"
|
3203
3023
|
switch( (*p) ) {
|
3204
3024
|
case 10: goto st100;
|
3205
3025
|
case 13: goto st106;
|
@@ -3406,30 +3226,30 @@ case 113:
|
|
3406
3226
|
goto st113;
|
3407
3227
|
goto st0;
|
3408
3228
|
tr172:
|
3409
|
-
#line
|
3229
|
+
#line 334 "pitchfork_http.rl"
|
3410
3230
|
{ MARK(mark, p); }
|
3411
|
-
#line
|
3231
|
+
#line 336 "pitchfork_http.rl"
|
3412
3232
|
{ write_cont_value(hp, buffer, p); }
|
3413
3233
|
goto st114;
|
3414
3234
|
tr175:
|
3415
|
-
#line
|
3235
|
+
#line 336 "pitchfork_http.rl"
|
3416
3236
|
{ write_cont_value(hp, buffer, p); }
|
3417
3237
|
goto st114;
|
3418
3238
|
tr182:
|
3419
|
-
#line
|
3239
|
+
#line 334 "pitchfork_http.rl"
|
3420
3240
|
{ MARK(mark, p); }
|
3421
|
-
#line
|
3241
|
+
#line 335 "pitchfork_http.rl"
|
3422
3242
|
{ write_value(self, hp, buffer, p); }
|
3423
3243
|
goto st114;
|
3424
3244
|
tr185:
|
3425
|
-
#line
|
3245
|
+
#line 335 "pitchfork_http.rl"
|
3426
3246
|
{ write_value(self, hp, buffer, p); }
|
3427
3247
|
goto st114;
|
3428
3248
|
st114:
|
3429
3249
|
if ( ++p == pe )
|
3430
3250
|
goto _test_eof114;
|
3431
3251
|
case 114:
|
3432
|
-
#line
|
3252
|
+
#line 3253 "pitchfork_http.c"
|
3433
3253
|
switch( (*p) ) {
|
3434
3254
|
case 9: goto st115;
|
3435
3255
|
case 10: goto tr167;
|
@@ -3458,14 +3278,14 @@ case 114:
|
|
3458
3278
|
goto tr169;
|
3459
3279
|
goto st0;
|
3460
3280
|
tr171:
|
3461
|
-
#line
|
3281
|
+
#line 334 "pitchfork_http.rl"
|
3462
3282
|
{ MARK(mark, p); }
|
3463
3283
|
goto st115;
|
3464
3284
|
st115:
|
3465
3285
|
if ( ++p == pe )
|
3466
3286
|
goto _test_eof115;
|
3467
3287
|
case 115:
|
3468
|
-
#line
|
3288
|
+
#line 3289 "pitchfork_http.c"
|
3469
3289
|
switch( (*p) ) {
|
3470
3290
|
case 9: goto tr171;
|
3471
3291
|
case 10: goto tr172;
|
@@ -3477,14 +3297,14 @@ case 115:
|
|
3477
3297
|
goto st0;
|
3478
3298
|
goto tr170;
|
3479
3299
|
tr170:
|
3480
|
-
#line
|
3300
|
+
#line 334 "pitchfork_http.rl"
|
3481
3301
|
{ MARK(mark, p); }
|
3482
3302
|
goto st116;
|
3483
3303
|
st116:
|
3484
3304
|
if ( ++p == pe )
|
3485
3305
|
goto _test_eof116;
|
3486
3306
|
case 116:
|
3487
|
-
#line
|
3307
|
+
#line 3308 "pitchfork_http.c"
|
3488
3308
|
switch( (*p) ) {
|
3489
3309
|
case 10: goto tr175;
|
3490
3310
|
case 13: goto tr176;
|
@@ -3497,35 +3317,35 @@ case 116:
|
|
3497
3317
|
goto st0;
|
3498
3318
|
goto st116;
|
3499
3319
|
tr173:
|
3500
|
-
#line
|
3320
|
+
#line 334 "pitchfork_http.rl"
|
3501
3321
|
{ MARK(mark, p); }
|
3502
|
-
#line
|
3322
|
+
#line 336 "pitchfork_http.rl"
|
3503
3323
|
{ write_cont_value(hp, buffer, p); }
|
3504
3324
|
goto st117;
|
3505
3325
|
tr176:
|
3506
|
-
#line
|
3326
|
+
#line 336 "pitchfork_http.rl"
|
3507
3327
|
{ write_cont_value(hp, buffer, p); }
|
3508
3328
|
goto st117;
|
3509
3329
|
tr183:
|
3510
|
-
#line
|
3330
|
+
#line 334 "pitchfork_http.rl"
|
3511
3331
|
{ MARK(mark, p); }
|
3512
|
-
#line
|
3332
|
+
#line 335 "pitchfork_http.rl"
|
3513
3333
|
{ write_value(self, hp, buffer, p); }
|
3514
3334
|
goto st117;
|
3515
3335
|
tr186:
|
3516
|
-
#line
|
3336
|
+
#line 335 "pitchfork_http.rl"
|
3517
3337
|
{ write_value(self, hp, buffer, p); }
|
3518
3338
|
goto st117;
|
3519
3339
|
st117:
|
3520
3340
|
if ( ++p == pe )
|
3521
3341
|
goto _test_eof117;
|
3522
3342
|
case 117:
|
3523
|
-
#line
|
3343
|
+
#line 3344 "pitchfork_http.c"
|
3524
3344
|
if ( (*p) == 10 )
|
3525
3345
|
goto st114;
|
3526
3346
|
goto st0;
|
3527
3347
|
tr167:
|
3528
|
-
#line
|
3348
|
+
#line 395 "pitchfork_http.rl"
|
3529
3349
|
{
|
3530
3350
|
cs = http_parser_first_final;
|
3531
3351
|
goto post_exec;
|
@@ -3535,7 +3355,7 @@ st124:
|
|
3535
3355
|
if ( ++p == pe )
|
3536
3356
|
goto _test_eof124;
|
3537
3357
|
case 124:
|
3538
|
-
#line
|
3358
|
+
#line 3359 "pitchfork_http.c"
|
3539
3359
|
goto st0;
|
3540
3360
|
st118:
|
3541
3361
|
if ( ++p == pe )
|
@@ -3545,20 +3365,20 @@ case 118:
|
|
3545
3365
|
goto tr167;
|
3546
3366
|
goto st0;
|
3547
3367
|
tr169:
|
3548
|
-
#line
|
3368
|
+
#line 330 "pitchfork_http.rl"
|
3549
3369
|
{ MARK(start.field, p); }
|
3550
|
-
#line
|
3370
|
+
#line 331 "pitchfork_http.rl"
|
3551
3371
|
{ snake_upcase_char(deconst(p)); }
|
3552
3372
|
goto st119;
|
3553
3373
|
tr178:
|
3554
|
-
#line
|
3374
|
+
#line 331 "pitchfork_http.rl"
|
3555
3375
|
{ snake_upcase_char(deconst(p)); }
|
3556
3376
|
goto st119;
|
3557
3377
|
st119:
|
3558
3378
|
if ( ++p == pe )
|
3559
3379
|
goto _test_eof119;
|
3560
3380
|
case 119:
|
3561
|
-
#line
|
3381
|
+
#line 3382 "pitchfork_http.c"
|
3562
3382
|
switch( (*p) ) {
|
3563
3383
|
case 33: goto tr178;
|
3564
3384
|
case 58: goto tr179;
|
@@ -3584,18 +3404,18 @@ case 119:
|
|
3584
3404
|
goto tr178;
|
3585
3405
|
goto st0;
|
3586
3406
|
tr181:
|
3587
|
-
#line
|
3407
|
+
#line 334 "pitchfork_http.rl"
|
3588
3408
|
{ MARK(mark, p); }
|
3589
3409
|
goto st120;
|
3590
3410
|
tr179:
|
3591
|
-
#line
|
3411
|
+
#line 333 "pitchfork_http.rl"
|
3592
3412
|
{ hp->s.field_len = LEN(start.field, p); }
|
3593
3413
|
goto st120;
|
3594
3414
|
st120:
|
3595
3415
|
if ( ++p == pe )
|
3596
3416
|
goto _test_eof120;
|
3597
3417
|
case 120:
|
3598
|
-
#line
|
3418
|
+
#line 3419 "pitchfork_http.c"
|
3599
3419
|
switch( (*p) ) {
|
3600
3420
|
case 9: goto tr181;
|
3601
3421
|
case 10: goto tr182;
|
@@ -3607,14 +3427,14 @@ case 120:
|
|
3607
3427
|
goto st0;
|
3608
3428
|
goto tr180;
|
3609
3429
|
tr180:
|
3610
|
-
#line
|
3430
|
+
#line 334 "pitchfork_http.rl"
|
3611
3431
|
{ MARK(mark, p); }
|
3612
3432
|
goto st121;
|
3613
3433
|
st121:
|
3614
3434
|
if ( ++p == pe )
|
3615
3435
|
goto _test_eof121;
|
3616
3436
|
case 121:
|
3617
|
-
#line
|
3437
|
+
#line 3438 "pitchfork_http.c"
|
3618
3438
|
switch( (*p) ) {
|
3619
3439
|
case 10: goto tr185;
|
3620
3440
|
case 13: goto tr186;
|
@@ -3755,7 +3575,7 @@ case 121:
|
|
3755
3575
|
_out: {}
|
3756
3576
|
}
|
3757
3577
|
|
3758
|
-
#line
|
3578
|
+
#line 469 "pitchfork_http.rl"
|
3759
3579
|
post_exec: /* "_out:" also goes here */
|
3760
3580
|
if (hp->cs != http_parser_error)
|
3761
3581
|
hp->cs = cs;
|
@@ -3906,6 +3726,12 @@ static VALUE HttpParser_alloc(VALUE klass)
|
|
3906
3726
|
return TypedData_Make_Struct(klass, struct http_parser, &hp_type, hp);
|
3907
3727
|
}
|
3908
3728
|
|
3729
|
+
#ifndef HAVE_RB_HASH_NEW_CAPA
|
3730
|
+
static inline VALUE rb_hash_new_capa(long capa) {
|
3731
|
+
return rb_hash_new();
|
3732
|
+
}
|
3733
|
+
#endif
|
3734
|
+
|
3909
3735
|
/**
|
3910
3736
|
* call-seq:
|
3911
3737
|
* parser.new => parser
|
@@ -3918,7 +3744,7 @@ static VALUE HttpParser_init(VALUE self)
|
|
3918
3744
|
|
3919
3745
|
http_parser_init(hp);
|
3920
3746
|
RB_OBJ_WRITE(self, &hp->buf, rb_str_new(NULL, 0));
|
3921
|
-
RB_OBJ_WRITE(self, &hp->env,
|
3747
|
+
RB_OBJ_WRITE(self, &hp->env, rb_hash_new_capa(32)); // Even the simplest request will have 10 keys
|
3922
3748
|
|
3923
3749
|
return self;
|
3924
3750
|
}
|
@@ -4304,8 +4130,6 @@ RUBY_FUNC_EXPORTED void Init_pitchfork_http(void)
|
|
4304
4130
|
*/
|
4305
4131
|
rb_define_const(cHttpParser, "LENGTH_MAX", OFFT2NUM(UH_OFF_T_MAX));
|
4306
4132
|
|
4307
|
-
rb_define_singleton_method(cHttpParser, "max_header_len=", set_maxhdrlen, 1);
|
4308
|
-
|
4309
4133
|
init_common_fields();
|
4310
4134
|
SET_GLOBAL(g_http_host, "HOST");
|
4311
4135
|
SET_GLOBAL(g_http_trailer, "TRAILER");
|