RCL_CHARACTER_DENIED, RCL_CHARACTER_DENIED, RCL_CHARACTER_DENIED,
RCL_CHARACTER_DENIED, RCL_CHARACTER_DENIED, RCL_CHARACTER_DENIED,
RCL_CHARACTER_DENIED, RCL_CHARACTER_DENIED,
-RCL_CHARACTER_WHITESPACE|RCL_CHARACTER_VALUE_STR, RCL_CHARACTER_VALUE_STR,
-RCL_CHARACTER_VALUE_STR, RCL_CHARACTER_VALUE_END, RCL_CHARACTER_VALUE_STR,
-RCL_CHARACTER_VALUE_STR, RCL_CHARACTER_VALUE_STR, RCL_CHARACTER_VALUE_STR,
-RCL_CHARACTER_VALUE_STR, RCL_CHARACTER_VALUE_STR, RCL_CHARACTER_VALUE_STR,
-RCL_CHARACTER_VALUE_STR|RCL_CHARACTER_VALUE_DIGIT, RCL_CHARACTER_VALUE_STR,
-RCL_CHARACTER_KEY|RCL_CHARACTER_VALUE_STR|RCL_CHARACTER_VALUE_DIGIT_START|RCL_CHARACTER_VALUE_DIGIT,
-RCL_CHARACTER_VALUE_STR|RCL_CHARACTER_VALUE_DIGIT, RCL_CHARACTER_VALUE_END,
+RCL_CHARACTER_WHITESPACE|RCL_CHARACTER_VALUE_STR /* */,
+RCL_CHARACTER_VALUE_STR /* ! */, RCL_CHARACTER_VALUE_STR /* " */,
+RCL_CHARACTER_VALUE_END /* # */, RCL_CHARACTER_VALUE_STR /* $ */,
+RCL_CHARACTER_VALUE_STR /* % */, RCL_CHARACTER_VALUE_STR /* & */,
+RCL_CHARACTER_VALUE_STR /* ' */, RCL_CHARACTER_VALUE_STR /* ( */,
+RCL_CHARACTER_VALUE_STR /* ) */, RCL_CHARACTER_VALUE_STR /* * */,
+RCL_CHARACTER_VALUE_STR|RCL_CHARACTER_VALUE_DIGIT /* + */,
+RCL_CHARACTER_VALUE_END /* , */,
+RCL_CHARACTER_KEY|RCL_CHARACTER_VALUE_STR|RCL_CHARACTER_VALUE_DIGIT_START|RCL_CHARACTER_VALUE_DIGIT /* - */,
+RCL_CHARACTER_VALUE_STR|RCL_CHARACTER_VALUE_DIGIT /* . */,
+RCL_CHARACTER_VALUE_STR /* / */,
RCL_CHARACTER_KEY|RCL_CHARACTER_VALUE_STR|RCL_CHARACTER_VALUE_DIGIT_START|RCL_CHARACTER_VALUE_DIGIT /* 0 */,
RCL_CHARACTER_KEY|RCL_CHARACTER_VALUE_STR|RCL_CHARACTER_VALUE_DIGIT_START|RCL_CHARACTER_VALUE_DIGIT /* 1 */,
RCL_CHARACTER_KEY|RCL_CHARACTER_VALUE_STR|RCL_CHARACTER_VALUE_DIGIT_START|RCL_CHARACTER_VALUE_DIGIT /* 2 */,
RCL_CHARACTER_KEY|RCL_CHARACTER_VALUE_STR|RCL_CHARACTER_VALUE_DIGIT_START|RCL_CHARACTER_VALUE_DIGIT /* 7 */,
RCL_CHARACTER_KEY|RCL_CHARACTER_VALUE_STR|RCL_CHARACTER_VALUE_DIGIT_START|RCL_CHARACTER_VALUE_DIGIT /* 8 */,
RCL_CHARACTER_KEY|RCL_CHARACTER_VALUE_STR|RCL_CHARACTER_VALUE_DIGIT_START|RCL_CHARACTER_VALUE_DIGIT /* 9 */,
-RCL_CHARACTER_VALUE_STR, RCL_CHARACTER_VALUE_END, RCL_CHARACTER_VALUE_STR,
-RCL_CHARACTER_VALUE_STR, RCL_CHARACTER_VALUE_STR, RCL_CHARACTER_VALUE_STR,
-RCL_CHARACTER_VALUE_STR,
+RCL_CHARACTER_VALUE_STR /* : */, RCL_CHARACTER_VALUE_END /* ; */,
+RCL_CHARACTER_VALUE_STR /* < */, RCL_CHARACTER_VALUE_STR /* = */,
+RCL_CHARACTER_VALUE_STR /* > */, RCL_CHARACTER_VALUE_STR /* ? */,
+RCL_CHARACTER_VALUE_STR /* @ */,
RCL_CHARACTER_KEY_START|RCL_CHARACTER_KEY|RCL_CHARACTER_VALUE_STR|RCL_CHARACTER_VALUE_DIGIT /* A */,
RCL_CHARACTER_KEY_START|RCL_CHARACTER_KEY|RCL_CHARACTER_VALUE_STR|RCL_CHARACTER_VALUE_DIGIT /* B */,
RCL_CHARACTER_KEY_START|RCL_CHARACTER_KEY|RCL_CHARACTER_VALUE_STR|RCL_CHARACTER_VALUE_DIGIT /* C */,
RCL_CHARACTER_KEY_START|RCL_CHARACTER_KEY|RCL_CHARACTER_VALUE_STR|RCL_CHARACTER_VALUE_DIGIT /* X */,
RCL_CHARACTER_KEY_START|RCL_CHARACTER_KEY|RCL_CHARACTER_VALUE_STR|RCL_CHARACTER_VALUE_DIGIT /* Y */,
RCL_CHARACTER_KEY_START|RCL_CHARACTER_KEY|RCL_CHARACTER_VALUE_STR|RCL_CHARACTER_VALUE_DIGIT /* Z */,
-RCL_CHARACTER_VALUE_END, RCL_CHARACTER_VALUE_STR, RCL_CHARACTER_VALUE_STR,
-RCL_CHARACTER_VALUE_STR, RCL_CHARACTER_KEY|RCL_CHARACTER_VALUE_STR,
-RCL_CHARACTER_VALUE_STR,
+RCL_CHARACTER_VALUE_STR /* [ */, RCL_CHARACTER_VALUE_STR /* \ */,
+RCL_CHARACTER_VALUE_END /* ] */, RCL_CHARACTER_VALUE_STR /* ^ */,
+RCL_CHARACTER_KEY|RCL_CHARACTER_VALUE_STR /* _ */,
+RCL_CHARACTER_VALUE_STR /* ` */,
RCL_CHARACTER_KEY_START|RCL_CHARACTER_KEY|RCL_CHARACTER_VALUE_STR|RCL_CHARACTER_VALUE_DIGIT /* a */,
RCL_CHARACTER_KEY_START|RCL_CHARACTER_KEY|RCL_CHARACTER_VALUE_STR|RCL_CHARACTER_VALUE_DIGIT /* b */,
RCL_CHARACTER_KEY_START|RCL_CHARACTER_KEY|RCL_CHARACTER_VALUE_STR|RCL_CHARACTER_VALUE_DIGIT /* c */,
RCL_CHARACTER_KEY_START|RCL_CHARACTER_KEY|RCL_CHARACTER_VALUE_STR|RCL_CHARACTER_VALUE_DIGIT /* x */,
RCL_CHARACTER_KEY_START|RCL_CHARACTER_KEY|RCL_CHARACTER_VALUE_STR|RCL_CHARACTER_VALUE_DIGIT /* y */,
RCL_CHARACTER_KEY_START|RCL_CHARACTER_KEY|RCL_CHARACTER_VALUE_STR|RCL_CHARACTER_VALUE_DIGIT /* z */,
-RCL_CHARACTER_VALUE_END, RCL_CHARACTER_VALUE_STR, RCL_CHARACTER_VALUE_STR,
-RCL_CHARACTER_VALUE_STR, RCL_CHARACTER_DENIED,
+RCL_CHARACTER_VALUE_STR /* { */, RCL_CHARACTER_VALUE_STR /* | */,
+RCL_CHARACTER_VALUE_END /* } */, RCL_CHARACTER_VALUE_STR /* ~ */,
+RCL_CHARACTER_DENIED,
RCL_CHARACTER_KEY_START|RCL_CHARACTER_KEY|RCL_CHARACTER_VALUE_STR,
RCL_CHARACTER_KEY_START|RCL_CHARACTER_KEY|RCL_CHARACTER_VALUE_STR,
RCL_CHARACTER_KEY_START|RCL_CHARACTER_KEY|RCL_CHARACTER_VALUE_STR,
};
+
#endif /* RCL_CHARTABLE_H_ */
p = chunk->pos;
+start:
if (*p == '#') {
if (parser->state != RSPAMD_RCL_STATE_SCOMMENT &&
parser->state != RSPAMD_RCL_STATE_MCOMMENT) {
while (p < chunk->end) {
if (*p == '\n') {
rspamd_cl_chunk_skipc (chunk, *++p);
- break;
+ /* Check comments again */
+ goto start;
}
rspamd_cl_chunk_skipc (chunk, *++p);
}
}
}
else if (*p == '/' && chunk->remain >= 2) {
- rspamd_cl_chunk_skipc (chunk, *++p);
- if (*p == '/' && parser->state != RSPAMD_RCL_STATE_SCOMMENT &&
+ if (p[1] == '/' && parser->state != RSPAMD_RCL_STATE_SCOMMENT &&
parser->state != RSPAMD_RCL_STATE_MCOMMENT) {
+ rspamd_cl_chunk_skipc (chunk, *++p);
chunk->pos = p;
while (p < chunk->end) {
if (*p == '\n') {
rspamd_cl_chunk_skipc (chunk, *++p);
- break;
+ goto start;
}
rspamd_cl_chunk_skipc (chunk, *++p);
}
}
- else if (*p == '*') {
+ else if (p[1] == '*') {
+ rspamd_cl_chunk_skipc (chunk, *++p);
comments_nested ++;
rspamd_cl_chunk_skipc (chunk, *++p);
comments_nested --;
if (comments_nested == 0) {
rspamd_cl_chunk_skipc (chunk, *++p);
- break;
+ goto start;
}
}
rspamd_cl_chunk_skipc (chunk, *++p);
p = chunk->pos;
while (p < chunk->end) {
- if (rspamd_cl_lex_is_atom_end (*p)) {
+ if (rspamd_cl_lex_is_atom_end (*p) || rspamd_cl_lex_is_comment (p[0], p[1])) {
break;
}
rspamd_cl_chunk_skipc (chunk, *p);
const guchar *p, *c;
struct rspamd_cl_stack *st;
rspamd_cl_object_t *obj = NULL;
+ guint stripped_spaces;
p = chunk->pos;
return FALSE;
}
if (!rspamd_cl_maybe_parse_boolean (obj, c, chunk->pos - c)) {
- obj->value.sv = g_malloc (chunk->pos - c + 1);
- rspamd_strlcpy (obj->value.sv, c, chunk->pos - c + 1);
+ /* Cut trailing spaces */
+ stripped_spaces = 0;
+ while (g_ascii_isspace (*(chunk->pos - 1 - stripped_spaces))) {
+ stripped_spaces ++;
+ }
+ obj->value.sv = g_malloc (chunk->pos - c + 1 - stripped_spaces);
+ rspamd_strlcpy (obj->value.sv, c, chunk->pos - c + 1 - stripped_spaces);
rspamd_cl_unescape_json_string (obj->value.sv);
obj->type = RSPAMD_CL_STRING;
}