lsqpack 0.1.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 +7 -0
- data/Gemfile +19 -0
- data/Gemfile.lock +82 -0
- data/LICENSE +21 -0
- data/README.md +36 -0
- data/Rakefile +19 -0
- data/Steepfile +6 -0
- data/ext/lsqpack/extconf.rb +18 -0
- data/ext/lsqpack/lsqpack.c +426 -0
- data/ext/lsqpack/lsqpack.h +6 -0
- data/lib/lsqpack/version.rb +5 -0
- data/lib/lsqpack.rb +30 -0
- data/ls-qpack/.appveyor.yml +14 -0
- data/ls-qpack/.cirrus.yml +6 -0
- data/ls-qpack/.travis.yml +32 -0
- data/ls-qpack/CMakeLists.txt +66 -0
- data/ls-qpack/LICENSE +21 -0
- data/ls-qpack/README.md +65 -0
- data/ls-qpack/bin/CMakeLists.txt +21 -0
- data/ls-qpack/bin/encode-int.c +87 -0
- data/ls-qpack/bin/fuzz-decode.c +247 -0
- data/ls-qpack/bin/interop-decode.c +433 -0
- data/ls-qpack/bin/interop-encode.c +554 -0
- data/ls-qpack/deps/xxhash/xxhash.c +941 -0
- data/ls-qpack/deps/xxhash/xxhash.h +160 -0
- data/ls-qpack/fuzz/decode/a/README +3 -0
- data/ls-qpack/fuzz/decode/a/preamble +0 -0
- data/ls-qpack/fuzz/decode/a/test-cases/id_000000,sig_06,src_000390,op_havoc,rep_4 +0 -0
- data/ls-qpack/fuzz/decode/a/test-cases/id_000000,sig_06,src_000579,op_flip1,pos_14 +0 -0
- data/ls-qpack/fuzz/decode/a/test-cases/id_000000,src_000000,op_flip2,pos_12 +0 -0
- data/ls-qpack/fuzz/decode/a/test-cases/id_000001,sig_11,src_000579,op_havoc,rep_4 +0 -0
- data/ls-qpack/fuzz/decode/a/test-cases/id_000002,sig_11,src_000481,op_int16,pos_15,val_-1 +0 -0
- data/ls-qpack/fuzz/decode/a/test-cases/id_000002,src_000000,op_havoc,rep_8 +0 -0
- data/ls-qpack/fuzz/decode/a/test-cases/id_000006,src_000285,op_flip2,pos_14 +0 -0
- data/ls-qpack/fuzz/decode/a/test-cases/id_000008,src_000285,op_flip2,pos_20 +0 -0
- data/ls-qpack/fuzz/decode/a/test-cases/id_000010,src_000306,op_flip2,pos_75 +0 -0
- data/ls-qpack/fuzz/decode/a/test-cases/id_000011,src_000344,op_havoc,rep_2 +0 -0
- data/ls-qpack/fuzz/decode/a/test-cases/id_000014,src_000366,op_flip2,pos_28 +0 -0
- data/ls-qpack/fuzz/decode/b/README +1 -0
- data/ls-qpack/fuzz/decode/b/preamble +0 -0
- data/ls-qpack/fuzz/decode/b/test-cases/seed +0 -0
- data/ls-qpack/fuzz/decode/c/setup.sh +3 -0
- data/ls-qpack/fuzz/decode/c/test-cases/fb-req.qif.proxygen.out.256.100.0-chopped +0 -0
- data/ls-qpack/fuzz/decode/d/preamble +0 -0
- data/ls-qpack/fuzz/decode/d/setup.sh +3 -0
- data/ls-qpack/fuzz/decode/d/test-cases/fb-resp.minhq.256.128.0.ack +0 -0
- data/ls-qpack/fuzz/input/256.100.1/fb-req.out.256.100.1 +0 -0
- data/ls-qpack/fuzz/input/256.100.1/fb-resp.out.256.100.1 +0 -0
- data/ls-qpack/fuzz/input/256.100.1/netbsd.out.256.100.1 +0 -0
- data/ls-qpack/huff-tables.h +136247 -0
- data/ls-qpack/lsqpack.c +5547 -0
- data/ls-qpack/lsqpack.h +768 -0
- data/ls-qpack/test/CMakeLists.txt +76 -0
- data/ls-qpack/test/lsqpack-test.h +43 -0
- data/ls-qpack/test/qifs/fb-req.qif +4917 -0
- data/ls-qpack/test/qifs/fb-resp.qif +5982 -0
- data/ls-qpack/test/qifs/long-codes.qif +5984 -0
- data/ls-qpack/test/qifs/netbsd.qif +235 -0
- data/ls-qpack/test/run-qif.pl +97 -0
- data/ls-qpack/test/run-scenario.sh +68 -0
- data/ls-qpack/test/scenarios/0.95-reset.sce +10 -0
- data/ls-qpack/test/scenarios/cancel-stream.sce +22 -0
- data/ls-qpack/test/scenarios/drain-2.sce +37 -0
- data/ls-qpack/test/scenarios/drain.sce +37 -0
- data/ls-qpack/test/scenarios/end-dst-2.sce +14 -0
- data/ls-qpack/test/scenarios/end-dst.sce +14 -0
- data/ls-qpack/test/scenarios/incl-name.sce +13 -0
- data/ls-qpack/test/scenarios/multi-byte-int-dyn-ref-1.sce +110 -0
- data/ls-qpack/test/scenarios/multi-byte-int-dyn-ref-2.sce +161 -0
- data/ls-qpack/test/scenarios/post-base-1.sce +10 -0
- data/ls-qpack/test/scenarios/post-base-2.sce +13 -0
- data/ls-qpack/test/scenarios/post-base-nr.sce +10 -0
- data/ls-qpack/test/scenarios/set-max-cap.sce +15 -0
- data/ls-qpack/test/test_enc_str.c +139 -0
- data/ls-qpack/test/test_get_stx_id.c +144 -0
- data/ls-qpack/test/test_huff_dec.c +399 -0
- data/ls-qpack/test/test_int.c +220 -0
- data/ls-qpack/test/test_qpack.c +856 -0
- data/ls-qpack/test/test_read_enc_stream.c +256 -0
- data/ls-qpack/tools/har2qif.pl +139 -0
- data/ls-qpack/tools/randomize-cookies.pl +41 -0
- data/ls-qpack/tools/sort-qif.pl +31 -0
- data/ls-qpack/wincompat/getopt.c +758 -0
- data/ls-qpack/wincompat/getopt.h +131 -0
- data/ls-qpack/wincompat/getopt1.c +188 -0
- data/ls-qpack/wincompat/sys/queue.h +859 -0
- data/lsqpack.gemspec +39 -0
- data/sig/lsqpack.rbs +29 -0
- metadata +135 -0
@@ -0,0 +1,161 @@
|
|
1
|
+
# This scenario is designed to reach the `case EHA_INDEXED_DYN`
|
2
|
+
# in the `lsqpack_enc_encode` function. It is intended to fail the integer
|
3
|
+
# encoding due to buffer length. To trigger this case, many names and values
|
4
|
+
# must be inserted into the dynamic table so that the integer encoding requires
|
5
|
+
# more than one byte.
|
6
|
+
TABLE_SIZE=16384
|
7
|
+
AGGRESSIVE=1
|
8
|
+
IMMEDIATE_ACK=0
|
9
|
+
RISKED_STREAMS=1000
|
10
|
+
QIF=$(cat<<'EOQ'
|
11
|
+
aaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaa
|
12
|
+
bbbbbbbbbbbbb bbbbbbbbbbbbbbbbbbbbbbbbbb
|
13
|
+
ccccccccccccc cccccccccccccccccccccccccc
|
14
|
+
ddddddddddddd dddddddddddddddddddddddddd
|
15
|
+
eeeeeeeeeeeee eeeeeeeeeeeeeeeeeeeeeeeeee
|
16
|
+
fffffffffffff ffffffffffffffffffffffffff
|
17
|
+
ggggggggggggg gggggggggggggggggggggggggg
|
18
|
+
aaaa oneeeeeeeee
|
19
|
+
bbbb oneeeeeeeee
|
20
|
+
cccc oneeeeeeeee
|
21
|
+
dddd oneeeeeeeee
|
22
|
+
eeee oneeeeeeeee
|
23
|
+
ffff oneeeeeeeee
|
24
|
+
gggg oneeeeeeeee
|
25
|
+
hhhh oneeeeeeeee
|
26
|
+
iiii oneeeeeeeee
|
27
|
+
jjjj oneeeeeeeee
|
28
|
+
kkkk oneeeeeeeee
|
29
|
+
llll oneeeeeeeee
|
30
|
+
mmmm oneeeeeeeee
|
31
|
+
nnnn oneeeeeeeee
|
32
|
+
oooo oneeeeeeeee
|
33
|
+
pppp oneeeeeeeee
|
34
|
+
qqqq oneeeeeeeee
|
35
|
+
rrrr oneeeeeeeee
|
36
|
+
ssss oneeeeeeeee
|
37
|
+
tttt oneeeeeeeee
|
38
|
+
uuuu oneeeeeeeee
|
39
|
+
vvvv oneeeeeeeee
|
40
|
+
wwww oneeeeeeeee
|
41
|
+
xxxx oneeeeeeeee
|
42
|
+
yyyy oneeeeeeeee
|
43
|
+
zzzz oneeeeeeeee
|
44
|
+
aabb oneeeeeeeee
|
45
|
+
bbcc oneeeeeeeee
|
46
|
+
ccdd oneeeeeeeee
|
47
|
+
ddee oneeeeeeeee
|
48
|
+
eeff oneeeeeeeee
|
49
|
+
ffgg oneeeeeeeee
|
50
|
+
gghh oneeeeeeeee
|
51
|
+
hhii oneeeeeeeee
|
52
|
+
iijj oneeeeeeeee
|
53
|
+
jjkk oneeeeeeeee
|
54
|
+
kkll oneeeeeeeee
|
55
|
+
llmm oneeeeeeeee
|
56
|
+
mmnn oneeeeeeeee
|
57
|
+
nnoo oneeeeeeeee
|
58
|
+
oopp oneeeeeeeee
|
59
|
+
ppqq oneeeeeeeee
|
60
|
+
qqrr oneeeeeeeee
|
61
|
+
rrss oneeeeeeeee
|
62
|
+
sstt oneeeeeeeee
|
63
|
+
ttuu oneeeeeeeee
|
64
|
+
uuvv oneeeeeeeee
|
65
|
+
vvww oneeeeeeeee
|
66
|
+
wwxx oneeeeeeeee
|
67
|
+
xxyy oneeeeeeeee
|
68
|
+
yyzz oneeeeeeeee
|
69
|
+
abcd oneeeeeeeee
|
70
|
+
bcde oneeeeeeeee
|
71
|
+
cdef oneeeeeeeee
|
72
|
+
defg oneeeeeeeee
|
73
|
+
efgh oneeeeeeeee
|
74
|
+
fghi oneeeeeeeee
|
75
|
+
ghij oneeeeeeeee
|
76
|
+
hijk oneeeeeeeee
|
77
|
+
ijkl oneeeeeeeee
|
78
|
+
jklm oneeeeeeeee
|
79
|
+
klmn oneeeeeeeee
|
80
|
+
lmno oneeeeeeeee
|
81
|
+
mnop oneeeeeeeee
|
82
|
+
nopq oneeeeeeeee
|
83
|
+
opqr oneeeeeeeee
|
84
|
+
pqrs oneeeeeeeee
|
85
|
+
qrst oneeeeeeeee
|
86
|
+
rstu oneeeeeeeee
|
87
|
+
|
88
|
+
aaaa oneeeeeeeee
|
89
|
+
bbbb oneeeeeeeee
|
90
|
+
cccc oneeeeeeeee
|
91
|
+
dddd oneeeeeeeee
|
92
|
+
eeee oneeeeeeeee
|
93
|
+
ffff oneeeeeeeee
|
94
|
+
gggg oneeeeeeeee
|
95
|
+
hhhh oneeeeeeeee
|
96
|
+
iiii oneeeeeeeee
|
97
|
+
jjjj oneeeeeeeee
|
98
|
+
kkkk oneeeeeeeee
|
99
|
+
llll oneeeeeeeee
|
100
|
+
mmmm oneeeeeeeee
|
101
|
+
nnnn oneeeeeeeee
|
102
|
+
oooo oneeeeeeeee
|
103
|
+
pppp oneeeeeeeee
|
104
|
+
qqqq oneeeeeeeee
|
105
|
+
rrrr oneeeeeeeee
|
106
|
+
ssss oneeeeeeeee
|
107
|
+
tttt oneeeeeeeee
|
108
|
+
uuuu oneeeeeeeee
|
109
|
+
vvvv oneeeeeeeee
|
110
|
+
wwww oneeeeeeeee
|
111
|
+
xxxx oneeeeeeeee
|
112
|
+
yyyy oneeeeeeeee
|
113
|
+
zzzz oneeeeeeeee
|
114
|
+
aabb oneeeeeeeee
|
115
|
+
bbcc oneeeeeeeee
|
116
|
+
ccdd oneeeeeeeee
|
117
|
+
ddee oneeeeeeeee
|
118
|
+
eeff oneeeeeeeee
|
119
|
+
ffgg oneeeeeeeee
|
120
|
+
gghh oneeeeeeeee
|
121
|
+
hhii oneeeeeeeee
|
122
|
+
iijj oneeeeeeeee
|
123
|
+
jjkk oneeeeeeeee
|
124
|
+
kkll oneeeeeeeee
|
125
|
+
llmm oneeeeeeeee
|
126
|
+
mmnn oneeeeeeeee
|
127
|
+
nnoo oneeeeeeeee
|
128
|
+
oopp oneeeeeeeee
|
129
|
+
ppqq oneeeeeeeee
|
130
|
+
qqrr oneeeeeeeee
|
131
|
+
rrss oneeeeeeeee
|
132
|
+
sstt oneeeeeeeee
|
133
|
+
ttuu oneeeeeeeee
|
134
|
+
uuvv oneeeeeeeee
|
135
|
+
vvww oneeeeeeeee
|
136
|
+
wwxx oneeeeeeeee
|
137
|
+
xxyy oneeeeeeeee
|
138
|
+
yyzz oneeeeeeeee
|
139
|
+
aaaa oneeeeeeeee
|
140
|
+
abcd oneeeeeeeee
|
141
|
+
bcde oneeeeeeeee
|
142
|
+
cdef oneeeeeeeee
|
143
|
+
defg oneeeeeeeee
|
144
|
+
efgh oneeeeeeeee
|
145
|
+
fghi oneeeeeeeee
|
146
|
+
ghij oneeeeeeeee
|
147
|
+
hijk oneeeeeeeee
|
148
|
+
ijkl oneeeeeeeee
|
149
|
+
jklm oneeeeeeeee
|
150
|
+
klmn oneeeeeeeee
|
151
|
+
lmno oneeeeeeeee
|
152
|
+
mnop oneeeeeeeee
|
153
|
+
nopq oneeeeeeeee
|
154
|
+
opqr oneeeeeeeee
|
155
|
+
pqrs oneeeeeeeee
|
156
|
+
qrst oneeeeeeeee
|
157
|
+
rstu oneeeeeeeee
|
158
|
+
aaaa oneeeeeeeee
|
159
|
+
|
160
|
+
EOQ
|
161
|
+
)
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# This scenario is designed to reach 'case DATA_STATE_LFPBNR_READ_VAL_PLAIN'
|
2
|
+
# in parse_header_data(). It has a number of repeated names with values that
|
3
|
+
# would be too small for Huffman coding.
|
4
|
+
TABLE_SIZE=256
|
5
|
+
AGGRESSIVE=1
|
6
|
+
RISKED_STREAMS=1
|
7
|
+
QIF=$(cat<<'EOQ'
|
8
|
+
dude n
|
9
|
+
dude nu
|
10
|
+
dude where is my car?
|
11
|
+
|
12
|
+
EOQ
|
13
|
+
)
|
@@ -0,0 +1,139 @@
|
|
1
|
+
#include <assert.h>
|
2
|
+
#include <stdlib.h>
|
3
|
+
#include <string.h>
|
4
|
+
#include <sys/queue.h>
|
5
|
+
|
6
|
+
#include "lsqpack.h"
|
7
|
+
#include "lsqpack-test.h"
|
8
|
+
|
9
|
+
|
10
|
+
struct str_test
|
11
|
+
{
|
12
|
+
int strt_lineno;
|
13
|
+
unsigned strt_prefix_bits;
|
14
|
+
const unsigned char *strt_in_str;
|
15
|
+
unsigned strt_in_len;
|
16
|
+
const unsigned char *strt_out_buf;
|
17
|
+
int strt_retval;
|
18
|
+
};
|
19
|
+
|
20
|
+
|
21
|
+
static const struct str_test tests[] =
|
22
|
+
{
|
23
|
+
|
24
|
+
{
|
25
|
+
__LINE__,
|
26
|
+
3,
|
27
|
+
(unsigned char *) "",
|
28
|
+
0,
|
29
|
+
(unsigned char *) "\x00",
|
30
|
+
1,
|
31
|
+
},
|
32
|
+
|
33
|
+
{
|
34
|
+
__LINE__,
|
35
|
+
3,
|
36
|
+
(unsigned char *) "a",
|
37
|
+
1,
|
38
|
+
(unsigned char *) "\x01" "a",
|
39
|
+
2,
|
40
|
+
},
|
41
|
+
|
42
|
+
{
|
43
|
+
__LINE__,
|
44
|
+
3,
|
45
|
+
(unsigned char *) "aa",
|
46
|
+
2,
|
47
|
+
(unsigned char *) "\x02" "aa",
|
48
|
+
3,
|
49
|
+
},
|
50
|
+
|
51
|
+
{
|
52
|
+
__LINE__,
|
53
|
+
3,
|
54
|
+
(unsigned char *) "aaa",
|
55
|
+
3,
|
56
|
+
(unsigned char *) "\x0A\x18\xc7",
|
57
|
+
3,
|
58
|
+
},
|
59
|
+
|
60
|
+
{
|
61
|
+
__LINE__,
|
62
|
+
3,
|
63
|
+
(unsigned char *) "aaaaaaaaa",
|
64
|
+
9,
|
65
|
+
(unsigned char *) "\x0E\x18\xc6\x31\x8c\x63\x1f",
|
66
|
+
7,
|
67
|
+
},
|
68
|
+
|
69
|
+
{
|
70
|
+
__LINE__,
|
71
|
+
3,
|
72
|
+
(unsigned char *) "aaaaaaaaaa",
|
73
|
+
10,
|
74
|
+
(unsigned char *) "\x0F\x00\x18\xc6\x31\x8c\x63\x18\xff",
|
75
|
+
9,
|
76
|
+
},
|
77
|
+
|
78
|
+
{
|
79
|
+
__LINE__,
|
80
|
+
3,
|
81
|
+
(unsigned char *) "aaaaaaaaaabbb",
|
82
|
+
13,
|
83
|
+
(unsigned char *) "\x0F\x02\x18\xc6\x31\x8c\x63\x18\xe3\x8e\x3f",
|
84
|
+
11,
|
85
|
+
},
|
86
|
+
|
87
|
+
{
|
88
|
+
__LINE__,
|
89
|
+
3,
|
90
|
+
(unsigned char *) "\x80\x90\xA0\xBA",
|
91
|
+
4,
|
92
|
+
(unsigned char *) "\x04\x80\x90\xA0\xBA",
|
93
|
+
5,
|
94
|
+
},
|
95
|
+
|
96
|
+
{
|
97
|
+
__LINE__,
|
98
|
+
3,
|
99
|
+
(unsigned char *) "\x80\x90\xA0\xBA\x80\x90\xA0",
|
100
|
+
7,
|
101
|
+
(unsigned char *) "\x07\x00\x80\x90\xA0\xBA\x80\x90\xA0",
|
102
|
+
9,
|
103
|
+
},
|
104
|
+
|
105
|
+
{
|
106
|
+
__LINE__,
|
107
|
+
3,
|
108
|
+
(unsigned char *) "\x80\x90\xA0\xBA\x80\x90\xA0" "foo",
|
109
|
+
10,
|
110
|
+
(unsigned char *) "\x07\x03\x80\x90\xA0\xBA\x80\x90\xA0" "foo",
|
111
|
+
12,
|
112
|
+
},
|
113
|
+
|
114
|
+
};
|
115
|
+
|
116
|
+
|
117
|
+
int
|
118
|
+
main (void)
|
119
|
+
{
|
120
|
+
const struct str_test *test;
|
121
|
+
int r;
|
122
|
+
unsigned char *out= malloc(0x1000);
|
123
|
+
|
124
|
+
if (!out)
|
125
|
+
return 1;
|
126
|
+
|
127
|
+
for (test = tests; test < tests + sizeof(tests) / sizeof(tests[0]); ++test)
|
128
|
+
{
|
129
|
+
out[0] = 0;
|
130
|
+
r = lsqpack_enc_enc_str(test->strt_prefix_bits, out, 0x1000,
|
131
|
+
test->strt_in_str, test->strt_in_len);
|
132
|
+
assert(r == test->strt_retval);
|
133
|
+
if (r > 0)
|
134
|
+
assert(0 == memcmp(test->strt_out_buf, out, r));
|
135
|
+
}
|
136
|
+
|
137
|
+
free(out);
|
138
|
+
return 0;
|
139
|
+
}
|
@@ -0,0 +1,144 @@
|
|
1
|
+
/* Test that lsqpack_get_stx_tab_id() works */
|
2
|
+
|
3
|
+
#include <assert.h>
|
4
|
+
#include <stdlib.h>
|
5
|
+
#include <string.h>
|
6
|
+
|
7
|
+
#include "lsqpack.h"
|
8
|
+
|
9
|
+
static const struct pair { const char *name, *value; } list[] =
|
10
|
+
{
|
11
|
+
{":authority", "",},
|
12
|
+
{":path", "/",},
|
13
|
+
{"age", "0",},
|
14
|
+
{"content-disposition", "",},
|
15
|
+
{"content-length", "0",},
|
16
|
+
{"cookie", "",},
|
17
|
+
{"date", "",},
|
18
|
+
{"etag", "",},
|
19
|
+
{"if-modified-since", "",},
|
20
|
+
{"if-none-match", "",},
|
21
|
+
{"last-modified", "",},
|
22
|
+
{"link", "",},
|
23
|
+
{"location", "",},
|
24
|
+
{"referer", "",},
|
25
|
+
{"set-cookie", "",},
|
26
|
+
{":method", "CONNECT",},
|
27
|
+
{":method", "DELETE",},
|
28
|
+
{":method", "GET",},
|
29
|
+
{":method", "HEAD",},
|
30
|
+
{":method", "OPTIONS",},
|
31
|
+
{":method", "POST",},
|
32
|
+
{":method", "PUT",},
|
33
|
+
{":scheme", "http",},
|
34
|
+
{":scheme", "https",},
|
35
|
+
{":status", "103",},
|
36
|
+
{":status", "200",},
|
37
|
+
{":status", "304",},
|
38
|
+
{":status", "404",},
|
39
|
+
{":status", "503",},
|
40
|
+
{"accept", "*/*",},
|
41
|
+
{"accept", "application/dns-message",},
|
42
|
+
{"accept-encoding", "gzip, deflate, br",},
|
43
|
+
{"accept-ranges", "bytes",},
|
44
|
+
{"access-control-allow-headers", "cache-control",},
|
45
|
+
{"access-control-allow-headers", "content-type",},
|
46
|
+
{"access-control-allow-origin", "*",},
|
47
|
+
{"cache-control", "max-age=0",},
|
48
|
+
{"cache-control", "max-age=2592000",},
|
49
|
+
{"cache-control", "max-age=604800",},
|
50
|
+
{"cache-control", "no-cache",},
|
51
|
+
{"cache-control", "no-store",},
|
52
|
+
{"cache-control", "public, max-age=31536000",},
|
53
|
+
{"content-encoding", "br",},
|
54
|
+
{"content-encoding", "gzip",},
|
55
|
+
{"content-type", "application/dns-message",},
|
56
|
+
{"content-type", "application/javascript",},
|
57
|
+
{"content-type", "application/json",},
|
58
|
+
{"content-type", "application/x-www-form-urlencoded",},
|
59
|
+
{"content-type", "image/gif",},
|
60
|
+
{"content-type", "image/jpeg",},
|
61
|
+
{"content-type", "image/png",},
|
62
|
+
{"content-type", "text/css",},
|
63
|
+
{"content-type", "text/html; charset=utf-8",},
|
64
|
+
{"content-type", "text/plain",},
|
65
|
+
{"content-type", "text/plain;charset=utf-8",},
|
66
|
+
{"range", "bytes=0-",},
|
67
|
+
{"strict-transport-security", "max-age=31536000",},
|
68
|
+
{"strict-transport-security", "max-age=31536000; includesubdomains",
|
69
|
+
},
|
70
|
+
{"strict-transport-security",
|
71
|
+
"max-age=31536000; includesubdomains; preload",},
|
72
|
+
{"vary", "accept-encoding",},
|
73
|
+
{"vary", "origin",},
|
74
|
+
{"x-content-type-options", "nosniff",},
|
75
|
+
{"x-xss-protection", "1; mode=block",},
|
76
|
+
{":status", "100",},
|
77
|
+
{":status", "204",},
|
78
|
+
{":status", "206",},
|
79
|
+
{":status", "302",},
|
80
|
+
{":status", "400",},
|
81
|
+
{":status", "403",},
|
82
|
+
{":status", "421",},
|
83
|
+
{":status", "425",},
|
84
|
+
{":status", "500",},
|
85
|
+
{"accept-language", "",},
|
86
|
+
{"access-control-allow-credentials", "FALSE",},
|
87
|
+
{"access-control-allow-credentials", "TRUE",},
|
88
|
+
{"access-control-allow-headers", "*",},
|
89
|
+
{"access-control-allow-methods", "get",},
|
90
|
+
{"access-control-allow-methods", "get, post, options",},
|
91
|
+
{"access-control-allow-methods", "options",},
|
92
|
+
{"access-control-expose-headers", "content-length",},
|
93
|
+
{"access-control-request-headers", "content-type",},
|
94
|
+
{"access-control-request-method", "get",},
|
95
|
+
{"access-control-request-method", "post",},
|
96
|
+
{"alt-svc", "clear",},
|
97
|
+
{"authorization", "",},
|
98
|
+
{"content-security-policy",
|
99
|
+
"script-src 'none'; object-src 'none'; base-uri 'none'",},
|
100
|
+
{"early-data", "1",},
|
101
|
+
{"expect-ct", "",},
|
102
|
+
{"forwarded", "",},
|
103
|
+
{"if-range", "",},
|
104
|
+
{"origin", "",},
|
105
|
+
{"purpose", "prefetch",},
|
106
|
+
{"server", "",},
|
107
|
+
{"timing-allow-origin", "*",},
|
108
|
+
{"upgrade-insecure-requests", "1",},
|
109
|
+
{"user-agent", "",},
|
110
|
+
{"x-forwarded-for", "",},
|
111
|
+
{"x-frame-options", "deny",},
|
112
|
+
{"x-frame-options", "sameorigin",},
|
113
|
+
};
|
114
|
+
|
115
|
+
|
116
|
+
int
|
117
|
+
main (void)
|
118
|
+
{
|
119
|
+
const struct pair *cur;
|
120
|
+
size_t name_len, val_len;
|
121
|
+
int id;
|
122
|
+
char name_copy[100];
|
123
|
+
|
124
|
+
for (cur = list; cur < list + sizeof(list) / sizeof(list[0]); ++cur)
|
125
|
+
{
|
126
|
+
name_len = strlen(cur->name);
|
127
|
+
val_len = strlen(cur->value);
|
128
|
+
/* Test that we find exact match: */
|
129
|
+
id = lsqpack_get_stx_tab_id(cur->name, name_len, cur->value, val_len);
|
130
|
+
assert(id == cur - list);
|
131
|
+
/* Test that we find just the header: */
|
132
|
+
id = lsqpack_get_stx_tab_id(cur->name, name_len, "WHATEVER!", 9);
|
133
|
+
assert(id >= 0);
|
134
|
+
if (id != cur - list)
|
135
|
+
assert(0 == strcmp(cur->name, list[id].name));
|
136
|
+
/* Test that we don't find wrong entry: */
|
137
|
+
strcpy(name_copy, cur->name);
|
138
|
+
name_copy[0] = 'z'; /* No header in the table starts with 'z' */
|
139
|
+
id = lsqpack_get_stx_tab_id(name_copy, name_len, cur->value, val_len);
|
140
|
+
assert(id < 0);
|
141
|
+
}
|
142
|
+
|
143
|
+
return 0;
|
144
|
+
}
|