diff options
author | Bruno Haible <bruno@clisp.org> | 2023-03-13 23:11:46 +0100 |
---|---|---|
committer | Bruno Haible <bruno@clisp.org> | 2023-03-14 02:57:28 +0100 |
commit | 78a692f1b0997d321122765f6c899938d61f805e (patch) | |
tree | 62e3d0b584ebd17933ed047c4358bebce93d39ea | |
parent | c00beb5944c6e447773d5358e237ebfc6f844ca1 (diff) | |
download | gettext-78a692f1b0997d321122765f6c899938d61f805e.tar.gz |
lisp-format, scheme-format: Improve run-time checks.
* gettext-tools/src/format-lisp.c (add_type_constraint,
add_listtype_constraint): Always check the result.
* gettext-tools/src/format-scheme.c (add_type_constraint,
add_listtype_constraint): Likewise.
-rw-r--r-- | gettext-tools/src/format-lisp.c | 28 | ||||
-rw-r--r-- | gettext-tools/src/format-scheme.c | 28 |
2 files changed, 36 insertions, 20 deletions
diff --git a/gettext-tools/src/format-lisp.c b/gettext-tools/src/format-lisp.c index c3d8136b8..58b242840 100644 --- a/gettext-tools/src/format-lisp.c +++ b/gettext-tools/src/format-lisp.c @@ -1974,12 +1974,16 @@ add_type_constraint (struct format_arg_list *list, unsigned int n, newconstraint.type = type; if (!make_intersected_element (&tmpelement, &list->initial.element[s], &newconstraint)) - return add_end_constraint (list, n); - free_element (&list->initial.element[s]); - list->initial.element[s].type = tmpelement.type; - list->initial.element[s].list = tmpelement.list; + list = add_end_constraint (list, n); + else + { + free_element (&list->initial.element[s]); + list->initial.element[s].type = tmpelement.type; + list->initial.element[s].list = tmpelement.list; + } - VERIFY_LIST (list); + if (list != NULL) + VERIFY_LIST (list); return list; } @@ -2011,12 +2015,16 @@ add_listtype_constraint (struct format_arg_list *list, unsigned int n, newconstraint.list = sublist; if (!make_intersected_element (&tmpelement, &list->initial.element[s], &newconstraint)) - return add_end_constraint (list, n); - free_element (&list->initial.element[s]); - list->initial.element[s].type = tmpelement.type; - list->initial.element[s].list = tmpelement.list; + list = add_end_constraint (list, n); + else + { + free_element (&list->initial.element[s]); + list->initial.element[s].type = tmpelement.type; + list->initial.element[s].list = tmpelement.list; + } - VERIFY_LIST (list); + if (list != NULL) + VERIFY_LIST (list); return list; } diff --git a/gettext-tools/src/format-scheme.c b/gettext-tools/src/format-scheme.c index 8cbf615e3..f3e2ddff4 100644 --- a/gettext-tools/src/format-scheme.c +++ b/gettext-tools/src/format-scheme.c @@ -1997,12 +1997,16 @@ add_type_constraint (struct format_arg_list *list, unsigned int n, newconstraint.type = type; if (!make_intersected_element (&tmpelement, &list->initial.element[s], &newconstraint)) - return add_end_constraint (list, n); - free_element (&list->initial.element[s]); - list->initial.element[s].type = tmpelement.type; - list->initial.element[s].list = tmpelement.list; + list = add_end_constraint (list, n); + else + { + free_element (&list->initial.element[s]); + list->initial.element[s].type = tmpelement.type; + list->initial.element[s].list = tmpelement.list; + } - VERIFY_LIST (list); + if (list != NULL) + VERIFY_LIST (list); return list; } @@ -2034,12 +2038,16 @@ add_listtype_constraint (struct format_arg_list *list, unsigned int n, newconstraint.list = sublist; if (!make_intersected_element (&tmpelement, &list->initial.element[s], &newconstraint)) - return add_end_constraint (list, n); - free_element (&list->initial.element[s]); - list->initial.element[s].type = tmpelement.type; - list->initial.element[s].list = tmpelement.list; + list = add_end_constraint (list, n); + else + { + free_element (&list->initial.element[s]); + list->initial.element[s].type = tmpelement.type; + list->initial.element[s].list = tmpelement.list; + } - VERIFY_LIST (list); + if (list != NULL) + VERIFY_LIST (list); return list; } |