Преглед изворни кода

coroparse: Use key_name for error message

Signed-off-by: Jan Friesse <jfriesse@redhat.com>
Reviewed-by: Christine Caulfield <ccaulfie@redhat.com>
Jan Friesse пре 7 година
родитељ
комит
0ac659608d
1 измењених фајлова са 22 додато и 4 уклоњено
  1. 22 4
      exec/coroparse.c

+ 22 - 4
exec/coroparse.c

@@ -569,7 +569,7 @@ static int main_config_parser_cb(const char *path,
 	icmap_value_types_t val_type = ICMAP_VALUETYPE_BINARY;
 	unsigned long long int ull;
 	int add_as_string;
-	char key_name[ICMAP_KEYNAME_MAXLEN];
+	char key_name[ICMAP_KEYNAME_MAXLEN + 1];
 	static char formated_err[256];
 	struct main_cp_cb_data *data = (struct main_cp_cb_data *)user_data;
 	struct key_value_list_item *kv_item;
@@ -579,6 +579,24 @@ static int main_config_parser_cb(const char *path,
 
 	cs_err = CS_OK;
 
+	/*
+	 * Formally this check is not needed because length is checked by parse_section
+	 */
+	if (strlen(path) >= sizeof(key_name)) {
+		if (snprintf(formated_err, sizeof(formated_err),
+		    "Can't store path \"%s\" into key_name", path) >= sizeof(formated_err)) {
+			*error_string = "Can't format path into key_name error message";
+		} else {
+			*error_string = formated_err;
+		}
+		return (0);
+	}
+	/*
+	 * Key_name is used in atoi_error/icmap_set_error, but many of icmap_set*
+	 * are using path, so initialize key_name to valid value
+	 */
+	strncpy(key_name, path, sizeof(key_name));
+
 	switch (type) {
 	case PARSER_CB_START:
 		memset(data, 0, sizeof(struct main_cp_cb_data));
@@ -1405,7 +1423,7 @@ atoi_error:
 
 	snprintf(formated_err, sizeof(formated_err),
 	    "Value of key \"%s\" is expected to be integer in range (%lld..%lld), but \"%s\" was given",
-	    key, min_val, max_val, value);
+	    key_name, min_val, max_val, value);
 	*error_string = formated_err;
 
 	return (0);
@@ -1413,7 +1431,7 @@ atoi_error:
 icmap_set_error:
 	if (snprintf(formated_err, sizeof(formated_err),
 	    "Can't store key \"%s\" into icmap, returned error is %s",
-	    key, cs_strerror(cs_err)) >= sizeof(formated_err)) {
+	    key_name, cs_strerror(cs_err)) >= sizeof(formated_err)) {
 		*error_string = "Can't format parser error message";
 	} else {
 		*error_string = formated_err;
@@ -1486,7 +1504,7 @@ static int uidgid_config_parser_cb(const char *path,
 icmap_set_error:
 	if (snprintf(formated_err, sizeof(formated_err),
 	    "Can't store key \"%s\" into icmap, returned error is %s",
-	    key, cs_strerror(cs_err)) >= sizeof(formated_err)) {
+	    key_name, cs_strerror(cs_err)) >= sizeof(formated_err)) {
 		*error_string = "Can't format parser error message";
 	} else {
 		*error_string = formated_err;