浏览代码

core: parser - handle comma inside quoted params of via

Daniel-Constantin Mierla 2 年之前
父节点
当前提交
d3acf9cc56
共有 2 个文件被更改,包括 12 次插入0 次删除
  1. 9 0
      src/core/parser/parse_via.c
  2. 3 0
      src/core/parser/parse_via.h

+ 9 - 0
src/core/parser/parse_via.c

@@ -1162,10 +1162,18 @@ find_value:
 			case ',':
 				switch(state) {
 					case P_VALUE:
+						if(param->flags & VIA_PARAM_F_QUOTED) {
+							/* inside a quoted value */
+							break;
+						}
 						param->value.len = tmp - param->value.s;
 						state = F_VIA;
 						goto endofvalue;
 					case P_STRING:
+						if(param->flags & VIA_PARAM_F_QUOTED) {
+							/* inside a quoted value */
+							break;
+						}
 					case F_LF:
 					case F_CR:
 					case F_CRLF:
@@ -1217,6 +1225,7 @@ find_value:
 					case F_VALUE:
 						state = P_STRING;
 						param->value.s = tmp + 1;
+						param->flags |= VIA_PARAM_F_QUOTED;
 						break;
 					case P_STRING:
 						state = L_PARAM;

+ 3 - 0
src/core/parser/parse_via.h

@@ -53,9 +53,12 @@ enum
 };
 
 
+#define VIA_PARAM_F_QUOTED (1)
+
 typedef struct via_param
 {
 	int type;				/* Type of the parameter */
+	unsigned int flags;		/* Flags for the parameter */
 	str name;				/* Name of the parameter */
 	str value;				/* Value of the parameter */
 	char *start;			/* Pointer to param start, just after ';',