From 333fa52f1c292ea030c76dadfd13d0fd1eac111d Mon Sep 17 00:00:00 2001
From: Bruno Haible <bruno@clisp.org>
Date: Fri, 2 Jun 2023 20:11:57 +0200
Subject: [PATCH] javacomp: Silence -Wanalyzer-possible-null-argument warning.

* lib/javacomp.c: Include verify.h.
(is_envjavac_gcj43_usable, is_envjavac_oldgcj_14_13_usable,
is_envjavac_nongcj_usable, compile_java_class): Assert that the
xasprintf results are non-NULL. This is possible since all involved
format strings are valid and don't use %ls, and all argument strings
are small compared to INT_MAX.
* modules/javacomp (Depends-on): Add verify.
---
 ChangeLog        | 11 +++++++++++
 lib/javacomp.c   |  9 +++++++++
 modules/javacomp |  1 +
 3 files changed, 21 insertions(+)

diff --git a/ChangeLog b/ChangeLog
index 69e7f19cea..fbe73fc047 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2023-06-02  Bruno Haible  <bruno@clisp.org>
+
+	javacomp: Silence -Wanalyzer-possible-null-argument warning.
+	* lib/javacomp.c: Include verify.h.
+	(is_envjavac_gcj43_usable, is_envjavac_oldgcj_14_13_usable,
+	is_envjavac_nongcj_usable, compile_java_class): Assert that the
+	xasprintf results are non-NULL. This is possible since all involved
+	format strings are valid and don't use %ls, and all argument strings
+	are small compared to INT_MAX.
+	* modules/javacomp (Depends-on): Add verify.
+
 2023-06-02  Bruno Haible  <bruno@clisp.org>
 
 	striconveha: Don't crash if malloc() returns NULL.
diff --git a/lib/javacomp.c b/lib/javacomp.c
index 802742dd95..bb4ef919f4 100644
--- a/lib/javacomp.c
+++ b/lib/javacomp.c
@@ -46,6 +46,7 @@
 #include "clean-temp.h"
 #include "error.h"
 #include "xvasprintf.h"
+#include "verify.h"
 #include "c-strstr.h"
 #include "gettext.h"
 
@@ -849,6 +850,7 @@ is_envjavac_gcj43_usable (const char *javac,
           /* Try adding -fsource option if it is useful.  */
           char *javac_source =
             xasprintf ("%s -fsource=%s", javac, source_version);
+          assume (javac_source != NULL);
 
           unlink (compiled_file_name);
 
@@ -917,6 +919,7 @@ is_envjavac_gcj43_usable (const char *javac,
           char *javac_target =
             xasprintf ("%s -fsource=%s -ftarget=%s",
                        javac, source_version, target_version);
+          assume (javac_target != NULL);
 
           unlink (compiled_file_name);
 
@@ -1060,6 +1063,7 @@ is_envjavac_oldgcj_14_13_usable (const char *javac,
       unlink (compiled_file_name);
 
       javac_noassert = xasprintf ("%s -fno-assert", javac);
+      assume (javac_noassert != NULL);
 
       java_sources[0] = conftest_file_name;
       if (!compile_using_envjavac (javac_noassert,
@@ -1200,6 +1204,7 @@ is_envjavac_nongcj_usable (const char *javac,
           /* Try adding -source option if it is useful.  */
           char *javac_source =
             xasprintf ("%s -source %s", javac, source_version_for_javac);
+          assume (javac_source != NULL);
 
           unlink (compiled_file_name);
 
@@ -1268,6 +1273,7 @@ is_envjavac_nongcj_usable (const char *javac,
              option but no -source option.)  */
           char *javac_target =
             xasprintf ("%s -target %s", javac, target_version);
+          assume (javac_target != NULL);
 
           unlink (compiled_file_name);
 
@@ -1284,6 +1290,7 @@ is_envjavac_nongcj_usable (const char *javac,
               /* Try adding -source option if it is useful.  */
               char *javac_target_source =
                 xasprintf ("%s -source %s", javac_target, source_version_for_javac);
+              assume (javac_target_source != NULL);
 
               unlink (compiled_file_name);
 
@@ -1358,6 +1365,7 @@ is_envjavac_nongcj_usable (const char *javac,
                  higher.)  */
               char *javac_target_source =
                 xasprintf ("%s -source %s", javac_target, source_version_for_javac);
+              assume (javac_target_source != NULL);
 
               unlink (compiled_file_name);
 
@@ -2267,6 +2275,7 @@ compile_java_class (const char * const *java_sources,
                             fsource_option ? source_version : "",
                             ftarget_option ? " -ftarget=" : "",
                             ftarget_option ? target_version : ""));
+            assume (javac_with_options != NULL);
 
             err = compile_using_envjavac (javac_with_options,
                                           java_sources, java_sources_count,
diff --git a/modules/javacomp b/modules/javacomp
index cdd6473c4e..f3ce944100 100644
--- a/modules/javacomp
+++ b/modules/javacomp
@@ -28,6 +28,7 @@ clean-temp
 stat
 error
 xvasprintf
+verify
 c-strstr
 gettext-h
 javacomp-script
-- 
2.39.5