1
0
Fork 0
mirror of https://github.com/warmcat/libwebsockets.git synced 2025-03-09 00:00:04 +01:00

tokenize: asterisk-nonterm

This commit is contained in:
Andy Green 2021-01-17 09:29:51 +00:00
parent e2f18957c1
commit 4dbf5454c9
2 changed files with 10 additions and 4 deletions

View file

@ -43,6 +43,8 @@
#define LWS_TOKENIZE_F_HASH_COMMENT (1 << 7)
/* Do not treat / as a terminal character, so "multipart/related" is one token */
#define LWS_TOKENIZE_F_SLASH_NONTERM (1 << 8)
/* Do not treat * as a terminal character, so "myfile*" is one token */
#define LWS_TOKENIZE_F_ASTERISK_NONTERM (1 << 9)
typedef enum {

View file

@ -768,8 +768,8 @@ lws_tokenize(struct lws_tokenize *ts)
{
const char *rfc7230_delims = "(),/:;<=>?@[\\]{}";
lws_tokenize_state state = LWS_TOKZS_LEADING_WHITESPACE;
char c, flo = 0, d_minus = '-', d_dot = '.', s_minus = '\0',
s_dot = '\0', skipping = 0;
char c, flo = 0, d_minus = '-', d_dot = '.', d_star = '*', s_minus = '\0',
s_dot = '\0', s_star = '\0', skipping = 0;
signed char num = (ts->flags & LWS_TOKENIZE_F_NO_INTEGERS) ? 0 : -1;
int utf8 = 0;
@ -783,6 +783,10 @@ lws_tokenize(struct lws_tokenize *ts)
d_dot = '\0';
s_dot = '.';
}
if (ts->flags & LWS_TOKENIZE_F_ASTERISK_NONTERM) {
d_star = '\0';
s_star = '*';
}
ts->token = NULL;
ts->token_len = 0;
@ -905,8 +909,8 @@ lws_tokenize(struct lws_tokenize *ts)
((!(ts->flags & LWS_TOKENIZE_F_RFC7230_DELIMS) &&
(c < '0' || c > '9') && (c < 'A' || c > 'Z') &&
(c < 'a' || c > 'z') && c != '_') &&
c != s_minus && c != s_dot) ||
c == d_minus || c == d_dot
c != s_minus && c != s_dot && c != s_star) ||
c == d_minus || c == d_dot || c == d_star
) &&
!((ts->flags & LWS_TOKENIZE_F_SLASH_NONTERM) && c == '/')) {
switch (state) {