]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
cert-auth: suppress false-positive warnings with GCC analyzer
authorDaiki Ueno <ueno@gnu.org>
Sun, 9 Jan 2022 07:34:52 +0000 (08:34 +0100)
committerDaiki Ueno <ueno@gnu.org>
Wed, 12 Jan 2022 07:14:41 +0000 (08:14 +0100)
When compiled with gcc -fanalyzer, it reports:

  cert.c: In function '_gnutls_pcert_to_auth_info':
  cert.c:85:17: error: dereference of NULL 'info' [CWE-476] [-Werror=analyzer-null-dereference]
     85 |         if (info->raw_certificate_list != NULL) {

Signed-off-by: Daiki Ueno <ueno@gnu.org>
lib/auth.c
lib/auth/cert.c

index f9e690080347f72bf980b32d15e334aed88da8ba..1a341c78f68a4ee3263b44681185f9a1f7da0c3d 100644 (file)
@@ -439,7 +439,7 @@ _gnutls_auth_info_init(gnutls_session_t session,
 
                                _gnutls_free_auth_info(session);
 
-                               session->key.auth_info = calloc(1, size);
+                               session->key.auth_info = gnutls_calloc(1, size);
                                if (session->key.auth_info == NULL) {
                                        gnutls_assert();
                                        return GNUTLS_E_MEMORY_ERROR;
index c4fc01f9e99805e7f8b88efbe050cf0b66bb1ef5..454070642c424991c46bc61259e03bfcb3fa4d08 100644 (file)
@@ -790,6 +790,10 @@ _gnutls_proc_x509_crt(gnutls_session_t session,
        }
 
        info = _gnutls_get_auth_info(session, GNUTLS_CRD_CERTIFICATE);
+       if (unlikely(!info)) {
+               gnutls_assert();
+               return ret;
+       }
 
        if (data == NULL || data_size == 0) {
                gnutls_assert();
@@ -962,13 +966,17 @@ int _gnutls_proc_rawpk_crt(gnutls_session_t session,
        }
 
        ret = _gnutls_auth_info_init(session, GNUTLS_CRD_CERTIFICATE,
-                                                                                                                       sizeof(cert_auth_info_st), 1);
+                                    sizeof(cert_auth_info_st), 1);
        if (ret < 0) {
                gnutls_assert();
                goto cleanup;
        }
 
        info = _gnutls_get_auth_info(session, GNUTLS_CRD_CERTIFICATE);
+       if (unlikely(!info)) {
+               gnutls_assert();
+               goto cleanup;
+       }
 
        /* Copy our imported certificate into the auth info structure
         * and free our temporary cert storage peer_certificate.