From 317dfcb6e2abffd2c2d1a0c206238ac16e0aced1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emysl=20Janouch?=
Date: Sun, 19 Apr 2020 06:57:55 +0200 Subject: [PATCH] Improve setjmp safety in config parser --- liberty.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/liberty.c b/liberty.c index eadace3..92974cc 100644 --- a/liberty.c +++ b/liberty.c @@ -5254,7 +5254,9 @@ static struct config_item * config_item_parse (const char *script, size_t len, bool single_value_only, struct error **e) { - struct config_parser parser = config_parser_make (script, len); + volatile struct config_parser parser = config_parser_make (script, len); + struct config_parser *volatile self = (struct config_parser *) &parser; + struct config_item *volatile object = NULL; jmp_buf err; @@ -5276,13 +5278,13 @@ config_item_parse (const char *script, size_t len, // This is really only intended for in-program configuration // and telling the line number would look awkward parser.tokenizer.report_line = false; - object = config_parser_parse_value (&parser, err); + object = config_parser_parse_value (self, err); } else - object = config_parser_parse_object (&parser, err); - config_parser_expect (&parser, CONFIG_T_ABORT, err); + object = config_parser_parse_object (self, err); + config_parser_expect (self, CONFIG_T_ABORT, err); end: - config_parser_free (&parser); + config_parser_free (self); return object; }