From: Bruno Haible Date: Mon, 13 Mar 2023 22:11:46 +0000 (+0100) Subject: lisp-format, scheme-format: Improve run-time checks. X-Git-Tag: v0.22~109 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=78a692f1b0997d321122765f6c899938d61f805e;p=thirdparty%2Fgettext.git 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. --- 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; }