]> git.ipfire.org Git - thirdparty/gettext.git/commitdiff
lisp-format, scheme-format: Improve run-time checks.
authorBruno Haible <bruno@clisp.org>
Mon, 13 Mar 2023 22:11:46 +0000 (23:11 +0100)
committerBruno Haible <bruno@clisp.org>
Tue, 14 Mar 2023 01:57:28 +0000 (02:57 +0100)
* 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.

gettext-tools/src/format-lisp.c
gettext-tools/src/format-scheme.c

index c3d8136b84083334d1d43e7bf62823708d068cb0..58b2428403fc013ae86d04026493416478df0af7 100644 (file)
@@ -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;
 }
index 8cbf615e3688bdf57f50e075d159fe59695ca5f5..f3e2ddff4c1172b58fa7f6a9215b7f5941e611da 100644 (file)
@@ -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;
 }