]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
psk: guard against the case where psk_auth_info_t has NULL username
authorDaiki Ueno <ueno@gnu.org>
Sun, 19 Mar 2023 04:01:39 +0000 (13:01 +0900)
committerDaiki Ueno <ueno@gnu.org>
Mon, 20 Mar 2023 22:55:03 +0000 (07:55 +0900)
This happens when gnutls_psk_server_get_username is called from a
client.  Also simplify the embedded NUL-byte check with memchr.

Signed-off-by: Daiki Ueno <ueno@gnu.org>
lib/psk.c
lib/str.h
lib/x509/email-verify.c
lib/x509/hostname-verify.c

index b9823439e8e0626ff83bfd11dc53bd89fc5c6c84..2524a8ecb241e856135f85b42814aa4f8c6ab5d6 100644 (file)
--- a/lib/psk.c
+++ b/lib/psk.c
@@ -476,8 +476,7 @@ const char *gnutls_psk_server_get_username(gnutls_session_t session)
        if (info == NULL)
                return NULL;
 
-       if (info->username[0] != 0
-           && !_gnutls_has_embedded_null(info->username, info->username_len))
+       if (info->username && !memchr(info->username, '\0', info->username_len))
                return info->username;
 
        return NULL;
index ac0ef6e134138ae9f9c11e9385c92048c5f8de97..13b7fa1b372cca90706d781d14ffc6617eeab65f 100644 (file)
--- a/lib/str.h
+++ b/lib/str.h
@@ -73,13 +73,6 @@ inline static unsigned _gnutls_dnsname_is_valid(const char *str, unsigned size)
        return 1;
 }
 
-inline static bool _gnutls_has_embedded_null(const char *str, unsigned size)
-{
-       if (strlen(str) != size)
-               return true;
-       return false;
-}
-
 void _gnutls_str_cpy(char *dest, size_t dest_tot_size, const char *src);
 void _gnutls_str_cat(char *dest, size_t dest_tot_size, const char *src);
 
index bedbcd2e20e941fd4075a91dceac330df5b52f86..c9ece51dcb3d5c65523aaf8499a1da01c1d3b3d0 100644 (file)
@@ -82,8 +82,7 @@ gnutls_x509_crt_check_email(gnutls_x509_crt_t cert,
                if (ret == GNUTLS_SAN_RFC822NAME) {
                        found_rfc822name = 1;
 
-                       if (_gnutls_has_embedded_null
-                           (rfc822name, rfc822namesize)) {
+                       if (memchr(rfc822name, '\0', rfc822namesize)) {
                                _gnutls_debug_log
                                    ("certificate has %s with embedded null in rfc822name\n",
                                     rfc822name);
@@ -132,7 +131,7 @@ gnutls_x509_crt_check_email(gnutls_x509_crt_t cert,
                        goto cleanup;
                }
 
-               if (_gnutls_has_embedded_null(rfc822name, rfc822namesize)) {
+               if (memchr(rfc822name, '\0', rfc822namesize)) {
                        _gnutls_debug_log
                            ("certificate has EMAIL %s with embedded null in name\n",
                             rfc822name);
index c3c6a3e70ae65c5bb64d8a2f12388f72ac3f7e2e..fbe7f1a3893da9d0409cba4d5b49c7b99324604c 100644 (file)
@@ -220,7 +220,7 @@ gnutls_x509_crt_check_hostname2(gnutls_x509_crt_t cert,
                if (ret == GNUTLS_SAN_DNSNAME) {
                        found_dnsname = 1;
 
-                       if (_gnutls_has_embedded_null(dnsname, dnsnamesize)) {
+                       if (memchr(dnsname, '\0', dnsnamesize)) {
                                _gnutls_debug_log
                                    ("certificate has %s with embedded null in name\n",
                                     dnsname);
@@ -274,7 +274,7 @@ gnutls_x509_crt_check_hostname2(gnutls_x509_crt_t cert,
                        goto cleanup;
                }
 
-               if (_gnutls_has_embedded_null(dnsname, dnsnamesize)) {
+               if (memchr(dnsname, '\0', dnsnamesize)) {
                        _gnutls_debug_log
                            ("certificate has CN %s with embedded null in name\n",
                             dnsname);