@@ -15,226 +15,3 @@ index 35c77d1d..47bd63f5 100644
15
15
endif()
16
16
# AC_TYPE_UINT8_T
17
17
# AC_TYPE_UINT16_T
18
- diff --git a/doc/Makefile.am b/doc/Makefile.am
19
- index c17d93382..4d73cef50 100644
20
- --- a/doc/Makefile.am
21
- +++ b/doc/Makefile.am
22
- @@ -27,6 +27,7 @@ APIDOCS= \
23
- macros.rst \
24
- enums.rst \
25
- types.rst \
26
- + nghttp2_check_authority.rst \
27
- nghttp2_check_header_name.rst \
28
- nghttp2_check_header_value.rst \
29
- nghttp2_hd_deflate_bound.rst \
30
- diff --git a/lib/includes/nghttp2/nghttp2.h b/lib/includes/nghttp2/nghttp2.h
31
- index 313fb23da..e3aeb9fed 100644
32
- --- a/lib/includes/nghttp2/nghttp2.h
33
- +++ b/lib/includes/nghttp2/nghttp2.h
34
- @@ -4769,6 +4769,19 @@ NGHTTP2_EXTERN int nghttp2_check_header_name(const uint8_t *name, size_t len);
35
- */
36
- NGHTTP2_EXTERN int nghttp2_check_header_value(const uint8_t *value, size_t len);
37
-
38
- + /**
39
- + * @function
40
- + *
41
- + * Returns nonzero if the |value| which is supposed to the value of
42
- + * :authority or host header field is valid according to
43
- + * https://tools.ietf.org/html/rfc3986#section-3.2
44
- + *
45
- + * |value| is valid if it merely consists of the allowed characters.
46
- + * In particular, it does not check whether |value| follows the syntax
47
- + * of authority.
48
- + */
49
- + NGHTTP2_EXTERN int nghttp2_check_authority(const uint8_t *value, size_t len);
50
- +
51
- /* HPACK API */
52
-
53
- struct nghttp2_hd_deflater;
54
- diff --git a/lib/nghttp2_helper.c b/lib/nghttp2_helper.c
55
- index 81a8a0cf9..91136a619 100644
56
- --- a/lib/nghttp2_helper.c
57
- +++ b/lib/nghttp2_helper.c
58
- @@ -505,6 +505,84 @@ int nghttp2_check_header_value(const uint8_t *value, size_t len) {
59
- return 1;
60
- }
61
-
62
- + /* Generated by genauthroitychartbl.py */
63
- + static char VALID_AUTHORITY_CHARS[] = {
64
- + 0 /* NUL */, 0 /* SOH */, 0 /* STX */, 0 /* ETX */,
65
- + 0 /* EOT */, 0 /* ENQ */, 0 /* ACK */, 0 /* BEL */,
66
- + 0 /* BS */, 0 /* HT */, 0 /* LF */, 0 /* VT */,
67
- + 0 /* FF */, 0 /* CR */, 0 /* SO */, 0 /* SI */,
68
- + 0 /* DLE */, 0 /* DC1 */, 0 /* DC2 */, 0 /* DC3 */,
69
- + 0 /* DC4 */, 0 /* NAK */, 0 /* SYN */, 0 /* ETB */,
70
- + 0 /* CAN */, 0 /* EM */, 0 /* SUB */, 0 /* ESC */,
71
- + 0 /* FS */, 0 /* GS */, 0 /* RS */, 0 /* US */,
72
- + 0 /* SPC */, 1 /* ! */, 0 /* " */, 0 /* # */,
73
- + 1 /* $ */, 1 /* % */, 1 /* & */, 1 /* ' */,
74
- + 1 /* ( */, 1 /* ) */, 1 /* * */, 1 /* + */,
75
- + 1 /* , */, 1 /* - */, 1 /* . */, 0 /* / */,
76
- + 1 /* 0 */, 1 /* 1 */, 1 /* 2 */, 1 /* 3 */,
77
- + 1 /* 4 */, 1 /* 5 */, 1 /* 6 */, 1 /* 7 */,
78
- + 1 /* 8 */, 1 /* 9 */, 1 /* : */, 1 /* ; */,
79
- + 0 /* < */, 1 /* = */, 0 /* > */, 0 /* ? */,
80
- + 1 /* @ */, 1 /* A */, 1 /* B */, 1 /* C */,
81
- + 1 /* D */, 1 /* E */, 1 /* F */, 1 /* G */,
82
- + 1 /* H */, 1 /* I */, 1 /* J */, 1 /* K */,
83
- + 1 /* L */, 1 /* M */, 1 /* N */, 1 /* O */,
84
- + 1 /* P */, 1 /* Q */, 1 /* R */, 1 /* S */,
85
- + 1 /* T */, 1 /* U */, 1 /* V */, 1 /* W */,
86
- + 1 /* X */, 1 /* Y */, 1 /* Z */, 1 /* [ */,
87
- + 0 /* \ */, 1 /* ] */, 0 /* ^ */, 1 /* _ */,
88
- + 0 /* ` */, 1 /* a */, 1 /* b */, 1 /* c */,
89
- + 1 /* d */, 1 /* e */, 1 /* f */, 1 /* g */,
90
- + 1 /* h */, 1 /* i */, 1 /* j */, 1 /* k */,
91
- + 1 /* l */, 1 /* m */, 1 /* n */, 1 /* o */,
92
- + 1 /* p */, 1 /* q */, 1 /* r */, 1 /* s */,
93
- + 1 /* t */, 1 /* u */, 1 /* v */, 1 /* w */,
94
- + 1 /* x */, 1 /* y */, 1 /* z */, 0 /* { */,
95
- + 0 /* | */, 0 /* } */, 1 /* ~ */, 0 /* DEL */,
96
- + 0 /* 0x80 */, 0 /* 0x81 */, 0 /* 0x82 */, 0 /* 0x83 */,
97
- + 0 /* 0x84 */, 0 /* 0x85 */, 0 /* 0x86 */, 0 /* 0x87 */,
98
- + 0 /* 0x88 */, 0 /* 0x89 */, 0 /* 0x8a */, 0 /* 0x8b */,
99
- + 0 /* 0x8c */, 0 /* 0x8d */, 0 /* 0x8e */, 0 /* 0x8f */,
100
- + 0 /* 0x90 */, 0 /* 0x91 */, 0 /* 0x92 */, 0 /* 0x93 */,
101
- + 0 /* 0x94 */, 0 /* 0x95 */, 0 /* 0x96 */, 0 /* 0x97 */,
102
- + 0 /* 0x98 */, 0 /* 0x99 */, 0 /* 0x9a */, 0 /* 0x9b */,
103
- + 0 /* 0x9c */, 0 /* 0x9d */, 0 /* 0x9e */, 0 /* 0x9f */,
104
- + 0 /* 0xa0 */, 0 /* 0xa1 */, 0 /* 0xa2 */, 0 /* 0xa3 */,
105
- + 0 /* 0xa4 */, 0 /* 0xa5 */, 0 /* 0xa6 */, 0 /* 0xa7 */,
106
- + 0 /* 0xa8 */, 0 /* 0xa9 */, 0 /* 0xaa */, 0 /* 0xab */,
107
- + 0 /* 0xac */, 0 /* 0xad */, 0 /* 0xae */, 0 /* 0xaf */,
108
- + 0 /* 0xb0 */, 0 /* 0xb1 */, 0 /* 0xb2 */, 0 /* 0xb3 */,
109
- + 0 /* 0xb4 */, 0 /* 0xb5 */, 0 /* 0xb6 */, 0 /* 0xb7 */,
110
- + 0 /* 0xb8 */, 0 /* 0xb9 */, 0 /* 0xba */, 0 /* 0xbb */,
111
- + 0 /* 0xbc */, 0 /* 0xbd */, 0 /* 0xbe */, 0 /* 0xbf */,
112
- + 0 /* 0xc0 */, 0 /* 0xc1 */, 0 /* 0xc2 */, 0 /* 0xc3 */,
113
- + 0 /* 0xc4 */, 0 /* 0xc5 */, 0 /* 0xc6 */, 0 /* 0xc7 */,
114
- + 0 /* 0xc8 */, 0 /* 0xc9 */, 0 /* 0xca */, 0 /* 0xcb */,
115
- + 0 /* 0xcc */, 0 /* 0xcd */, 0 /* 0xce */, 0 /* 0xcf */,
116
- + 0 /* 0xd0 */, 0 /* 0xd1 */, 0 /* 0xd2 */, 0 /* 0xd3 */,
117
- + 0 /* 0xd4 */, 0 /* 0xd5 */, 0 /* 0xd6 */, 0 /* 0xd7 */,
118
- + 0 /* 0xd8 */, 0 /* 0xd9 */, 0 /* 0xda */, 0 /* 0xdb */,
119
- + 0 /* 0xdc */, 0 /* 0xdd */, 0 /* 0xde */, 0 /* 0xdf */,
120
- + 0 /* 0xe0 */, 0 /* 0xe1 */, 0 /* 0xe2 */, 0 /* 0xe3 */,
121
- + 0 /* 0xe4 */, 0 /* 0xe5 */, 0 /* 0xe6 */, 0 /* 0xe7 */,
122
- + 0 /* 0xe8 */, 0 /* 0xe9 */, 0 /* 0xea */, 0 /* 0xeb */,
123
- + 0 /* 0xec */, 0 /* 0xed */, 0 /* 0xee */, 0 /* 0xef */,
124
- + 0 /* 0xf0 */, 0 /* 0xf1 */, 0 /* 0xf2 */, 0 /* 0xf3 */,
125
- + 0 /* 0xf4 */, 0 /* 0xf5 */, 0 /* 0xf6 */, 0 /* 0xf7 */,
126
- + 0 /* 0xf8 */, 0 /* 0xf9 */, 0 /* 0xfa */, 0 /* 0xfb */,
127
- + 0 /* 0xfc */, 0 /* 0xfd */, 0 /* 0xfe */, 0 /* 0xff */
128
- + };
129
- +
130
- + int nghttp2_check_authority(const uint8_t *value, size_t len) {
131
- + const uint8_t *last;
132
- + for (last = value + len; value != last; ++value) {
133
- + if (!VALID_AUTHORITY_CHARS[*value]) {
134
- + return 0;
135
- + }
136
- + }
137
- + return 1;
138
- + }
139
- +
140
- uint8_t *nghttp2_cpymem(uint8_t *dest, const void *src, size_t len) {
141
- if (len == 0) {
142
- return dest;
143
- diff --git a/lib/nghttp2_http.c b/lib/nghttp2_http.c
144
- index 8d9902998..62f57b6ae 100644
145
- --- a/lib/nghttp2_http.c
146
- +++ b/lib/nghttp2_http.c
147
- @@ -305,84 +305,6 @@ static int http_response_on_header(nghttp2_stream *stream, nghttp2_hd_nv *nv,
148
- return 0;
149
- }
150
-
151
- - /* Generated by genauthroitychartbl.py */
152
- - static char VALID_AUTHORITY_CHARS[] = {
153
- - 0 /* NUL */, 0 /* SOH */, 0 /* STX */, 0 /* ETX */,
154
- - 0 /* EOT */, 0 /* ENQ */, 0 /* ACK */, 0 /* BEL */,
155
- - 0 /* BS */, 0 /* HT */, 0 /* LF */, 0 /* VT */,
156
- - 0 /* FF */, 0 /* CR */, 0 /* SO */, 0 /* SI */,
157
- - 0 /* DLE */, 0 /* DC1 */, 0 /* DC2 */, 0 /* DC3 */,
158
- - 0 /* DC4 */, 0 /* NAK */, 0 /* SYN */, 0 /* ETB */,
159
- - 0 /* CAN */, 0 /* EM */, 0 /* SUB */, 0 /* ESC */,
160
- - 0 /* FS */, 0 /* GS */, 0 /* RS */, 0 /* US */,
161
- - 0 /* SPC */, 1 /* ! */, 0 /* " */, 0 /* # */,
162
- - 1 /* $ */, 1 /* % */, 1 /* & */, 1 /* ' */,
163
- - 1 /* ( */, 1 /* ) */, 1 /* * */, 1 /* + */,
164
- - 1 /* , */, 1 /* - */, 1 /* . */, 0 /* / */,
165
- - 1 /* 0 */, 1 /* 1 */, 1 /* 2 */, 1 /* 3 */,
166
- - 1 /* 4 */, 1 /* 5 */, 1 /* 6 */, 1 /* 7 */,
167
- - 1 /* 8 */, 1 /* 9 */, 1 /* : */, 1 /* ; */,
168
- - 0 /* < */, 1 /* = */, 0 /* > */, 0 /* ? */,
169
- - 1 /* @ */, 1 /* A */, 1 /* B */, 1 /* C */,
170
- - 1 /* D */, 1 /* E */, 1 /* F */, 1 /* G */,
171
- - 1 /* H */, 1 /* I */, 1 /* J */, 1 /* K */,
172
- - 1 /* L */, 1 /* M */, 1 /* N */, 1 /* O */,
173
- - 1 /* P */, 1 /* Q */, 1 /* R */, 1 /* S */,
174
- - 1 /* T */, 1 /* U */, 1 /* V */, 1 /* W */,
175
- - 1 /* X */, 1 /* Y */, 1 /* Z */, 1 /* [ */,
176
- - 0 /* \ */, 1 /* ] */, 0 /* ^ */, 1 /* _ */,
177
- - 0 /* ` */, 1 /* a */, 1 /* b */, 1 /* c */,
178
- - 1 /* d */, 1 /* e */, 1 /* f */, 1 /* g */,
179
- - 1 /* h */, 1 /* i */, 1 /* j */, 1 /* k */,
180
- - 1 /* l */, 1 /* m */, 1 /* n */, 1 /* o */,
181
- - 1 /* p */, 1 /* q */, 1 /* r */, 1 /* s */,
182
- - 1 /* t */, 1 /* u */, 1 /* v */, 1 /* w */,
183
- - 1 /* x */, 1 /* y */, 1 /* z */, 0 /* { */,
184
- - 0 /* | */, 0 /* } */, 1 /* ~ */, 0 /* DEL */,
185
- - 0 /* 0x80 */, 0 /* 0x81 */, 0 /* 0x82 */, 0 /* 0x83 */,
186
- - 0 /* 0x84 */, 0 /* 0x85 */, 0 /* 0x86 */, 0 /* 0x87 */,
187
- - 0 /* 0x88 */, 0 /* 0x89 */, 0 /* 0x8a */, 0 /* 0x8b */,
188
- - 0 /* 0x8c */, 0 /* 0x8d */, 0 /* 0x8e */, 0 /* 0x8f */,
189
- - 0 /* 0x90 */, 0 /* 0x91 */, 0 /* 0x92 */, 0 /* 0x93 */,
190
- - 0 /* 0x94 */, 0 /* 0x95 */, 0 /* 0x96 */, 0 /* 0x97 */,
191
- - 0 /* 0x98 */, 0 /* 0x99 */, 0 /* 0x9a */, 0 /* 0x9b */,
192
- - 0 /* 0x9c */, 0 /* 0x9d */, 0 /* 0x9e */, 0 /* 0x9f */,
193
- - 0 /* 0xa0 */, 0 /* 0xa1 */, 0 /* 0xa2 */, 0 /* 0xa3 */,
194
- - 0 /* 0xa4 */, 0 /* 0xa5 */, 0 /* 0xa6 */, 0 /* 0xa7 */,
195
- - 0 /* 0xa8 */, 0 /* 0xa9 */, 0 /* 0xaa */, 0 /* 0xab */,
196
- - 0 /* 0xac */, 0 /* 0xad */, 0 /* 0xae */, 0 /* 0xaf */,
197
- - 0 /* 0xb0 */, 0 /* 0xb1 */, 0 /* 0xb2 */, 0 /* 0xb3 */,
198
- - 0 /* 0xb4 */, 0 /* 0xb5 */, 0 /* 0xb6 */, 0 /* 0xb7 */,
199
- - 0 /* 0xb8 */, 0 /* 0xb9 */, 0 /* 0xba */, 0 /* 0xbb */,
200
- - 0 /* 0xbc */, 0 /* 0xbd */, 0 /* 0xbe */, 0 /* 0xbf */,
201
- - 0 /* 0xc0 */, 0 /* 0xc1 */, 0 /* 0xc2 */, 0 /* 0xc3 */,
202
- - 0 /* 0xc4 */, 0 /* 0xc5 */, 0 /* 0xc6 */, 0 /* 0xc7 */,
203
- - 0 /* 0xc8 */, 0 /* 0xc9 */, 0 /* 0xca */, 0 /* 0xcb */,
204
- - 0 /* 0xcc */, 0 /* 0xcd */, 0 /* 0xce */, 0 /* 0xcf */,
205
- - 0 /* 0xd0 */, 0 /* 0xd1 */, 0 /* 0xd2 */, 0 /* 0xd3 */,
206
- - 0 /* 0xd4 */, 0 /* 0xd5 */, 0 /* 0xd6 */, 0 /* 0xd7 */,
207
- - 0 /* 0xd8 */, 0 /* 0xd9 */, 0 /* 0xda */, 0 /* 0xdb */,
208
- - 0 /* 0xdc */, 0 /* 0xdd */, 0 /* 0xde */, 0 /* 0xdf */,
209
- - 0 /* 0xe0 */, 0 /* 0xe1 */, 0 /* 0xe2 */, 0 /* 0xe3 */,
210
- - 0 /* 0xe4 */, 0 /* 0xe5 */, 0 /* 0xe6 */, 0 /* 0xe7 */,
211
- - 0 /* 0xe8 */, 0 /* 0xe9 */, 0 /* 0xea */, 0 /* 0xeb */,
212
- - 0 /* 0xec */, 0 /* 0xed */, 0 /* 0xee */, 0 /* 0xef */,
213
- - 0 /* 0xf0 */, 0 /* 0xf1 */, 0 /* 0xf2 */, 0 /* 0xf3 */,
214
- - 0 /* 0xf4 */, 0 /* 0xf5 */, 0 /* 0xf6 */, 0 /* 0xf7 */,
215
- - 0 /* 0xf8 */, 0 /* 0xf9 */, 0 /* 0xfa */, 0 /* 0xfb */,
216
- - 0 /* 0xfc */, 0 /* 0xfd */, 0 /* 0xfe */, 0 /* 0xff */
217
- - };
218
- -
219
- - static int check_authority(const uint8_t *value, size_t len) {
220
- - const uint8_t *last;
221
- - for (last = value + len; value != last; ++value) {
222
- - if (!VALID_AUTHORITY_CHARS[*value]) {
223
- - return 0;
224
- - }
225
- - }
226
- - return 1;
227
- - }
228
- -
229
- static int check_scheme(const uint8_t *value, size_t len) {
230
- const uint8_t *last;
231
- if (len == 0) {
232
- @@ -440,7 +362,7 @@ int nghttp2_http_on_header(nghttp2_session *session, nghttp2_stream *stream,
233
-
234
- if (nv->token == NGHTTP2_TOKEN__AUTHORITY ||
235
- nv->token == NGHTTP2_TOKEN_HOST) {
236
- - rv = check_authority(nv->value->base, nv->value->len);
237
- + rv = nghttp2_check_authority(nv->value->base, nv->value->len);
238
- } else if (nv->token == NGHTTP2_TOKEN__SCHEME) {
239
- rv = check_scheme(nv->value->base, nv->value->len);
240
- } else {
0 commit comments