summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2023-03-13 23:11:46 +0100
committerBruno Haible <bruno@clisp.org>2023-03-14 02:57:28 +0100
commit78a692f1b0997d321122765f6c899938d61f805e (patch)
tree62e3d0b584ebd17933ed047c4358bebce93d39ea
parentc00beb5944c6e447773d5358e237ebfc6f844ca1 (diff)
downloadgettext-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.c28
-rw-r--r--gettext-tools/src/format-scheme.c28
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;
}