]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
build: fix confusions between libtasn1 and GnuTLS error codes
authorDaiki Ueno <ueno@gnu.org>
Sun, 5 May 2024 22:46:29 +0000 (07:46 +0900)
committerDaiki Ueno <ueno@gnu.org>
Mon, 6 May 2024 08:51:45 +0000 (17:51 +0900)
libtasn1 error codes returned from asn1_{read,write}_value are always
positive. Check against ASN1_SUCCESS instead.

Signed-off-by: Daiki Ueno <ueno@gnu.org>
lib/dh.c
lib/x509/crl.c
lib/x509/crq.c
lib/x509/dn.c
lib/x509/key_encode.c
lib/x509/time.c
lib/x509/x509_ext.c
tests/crq_apis.c

index 5654163bced6cdda40d32af8b0c968546bc78ae6..c3745264ce2639cd41d2e6e689d449feb207d2e4 100644 (file)
--- a/lib/dh.c
+++ b/lib/dh.c
@@ -735,8 +735,11 @@ int gnutls_dh_params_export2_pkcs3(gnutls_dh_params_t params,
        if (params->q_bits > 0)
                result = _gnutls_x509_write_uint32(c2, "privateValueLength",
                                                   params->q_bits);
-       else
+       else {
                result = asn1_write_value(c2, "privateValueLength", NULL, 0);
+               if (result != ASN1_SUCCESS)
+                       result = _gnutls_asn2err(result);
+       }
 
        if (result < 0) {
                gnutls_assert();
index 66d7ea6316c8ea1eb5336adad1247fef30b3e79c..7247cbda036542947f5c5ef94864017b7b4ae3f6 100644 (file)
@@ -908,7 +908,7 @@ int gnutls_x509_crl_get_authority_key_gn_serial(
 
                *serial_size = len;
 
-               if (result < 0) {
+               if (result != ASN1_SUCCESS) {
                        ret = _gnutls_asn2err(result);
                        goto fail;
                }
@@ -1177,7 +1177,7 @@ int gnutls_x509_crl_get_extension_data(gnutls_x509_crl_t crl, unsigned indx,
 
        if (result == ASN1_ELEMENT_NOT_FOUND)
                return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE;
-       else if (result < 0) {
+       else if (result != ASN1_SUCCESS) {
                gnutls_assert();
                return _gnutls_asn2err(result);
        }
index 19e13623c6bd5cdcea06a149e5acc7a50c829dff..dfa0fa877879a2cba10b406c05bae364fabc2f65 100644 (file)
@@ -1189,7 +1189,7 @@ int gnutls_x509_crq_get_attribute_info(gnutls_x509_crq_t crq, unsigned indx,
 
        if (result == ASN1_ELEMENT_NOT_FOUND)
                return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE;
-       else if (result < 0) {
+       else if (result != ASN1_SUCCESS) {
                gnutls_assert();
                return _gnutls_asn2err(result);
        }
@@ -1240,7 +1240,7 @@ int gnutls_x509_crq_get_attribute_data(gnutls_x509_crq_t crq, unsigned indx,
 
        if (result == ASN1_ELEMENT_NOT_FOUND)
                return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE;
-       else if (result < 0) {
+       else if (result != ASN1_SUCCESS) {
                gnutls_assert();
                return _gnutls_asn2err(result);
        }
@@ -1336,7 +1336,7 @@ int gnutls_x509_crq_get_extension_info(gnutls_x509_crq_t crq, unsigned indx,
                asn1_delete_structure(&c2);
                result = GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE;
                goto out;
-       } else if (result < 0) {
+       } else if (result != ASN1_SUCCESS) {
                gnutls_assert();
                asn1_delete_structure(&c2);
                result = _gnutls_asn2err(result);
@@ -1349,7 +1349,7 @@ int gnutls_x509_crq_get_extension_info(gnutls_x509_crq_t crq, unsigned indx,
 
        asn1_delete_structure(&c2);
 
-       if (result < 0) {
+       if (result != ASN1_SUCCESS) {
                gnutls_assert();
                result = _gnutls_asn2err(result);
                goto out;
index 3306f1095998982bd7c3f599b24145e2365478ac..493caafafe0e99da36d8a80e09b0b64509628ab6 100644 (file)
@@ -587,7 +587,7 @@ static int _gnutls_x509_write_attribute(const char *given_oid,
        _gnutls_str_cat(tmp, sizeof(tmp), ".value");
 
        result = asn1_write_value(asn1_struct, tmp, _data, sizeof_data);
-       if (result < 0) {
+       if (result != ASN1_SUCCESS) {
                gnutls_assert();
                return _gnutls_asn2err(result);
        }
index 6ced52dfe3f740c1abd9a4c364319b8b654a6a6a..2b090fd5e46e49f2dd049a3bd369f657186d0ab4 100644 (file)
@@ -656,7 +656,7 @@ int _gnutls_x509_write_rsa_oaep_params(const gnutls_x509_spki_st *params,
 
        result = asn1_write_value(spk, "pSourceFunc.parameters", label.data,
                                  label.size);
-       if (result < 0) {
+       if (result != ASN1_SUCCESS) {
                gnutls_assert();
                result = _gnutls_asn2err(result);
                goto cleanup;
index 3f8b0571b32f24fbe6c95cd2153cc6ace950ba7f..afd538243ea057d697efdc2414d5abf0fafe3810 100644 (file)
@@ -404,14 +404,15 @@ int _gnutls_x509_set_time(asn1_node c2, const char *where, time_t tim,
 
        _gnutls_str_cpy(name, sizeof(name), where);
        if (tag == ASN1_TAG_UTCTime) {
-               if ((result = asn1_write_value(c2, where, "utcTime", 1)) < 0) {
+               if ((result = asn1_write_value(c2, where, "utcTime", 1)) !=
+                   ASN1_SUCCESS) {
                        gnutls_assert();
                        return _gnutls_asn2err(result);
                }
                _gnutls_str_cat(name, sizeof(name), ".utcTime");
        } else {
-               if ((result = asn1_write_value(c2, where, "generalTime", 1)) <
-                   0) {
+               if ((result = asn1_write_value(c2, where, "generalTime", 1)) !=
+                   ASN1_SUCCESS) {
                        gnutls_assert();
                        return _gnutls_asn2err(result);
                }
index ad3af1430af5f04abb00a112e0b2bf3c43e15c53..ae7216f23f41050a01a1bbf945053f7d6c7fc5ef 100644 (file)
@@ -1466,7 +1466,7 @@ int gnutls_x509_ext_export_basic_constraints(unsigned int ca, int pathlen,
 
        if (pathlen < 0) {
                result = asn1_write_value(c2, "pathLenConstraint", NULL, 0);
-               if (result < 0)
+               if (result != ASN1_SUCCESS)
                        result = _gnutls_asn2err(result);
        } else
                result = _gnutls_x509_write_uint32(c2, "pathLenConstraint",
@@ -1633,7 +1633,7 @@ int gnutls_x509_ext_export_proxy(int pathLenConstraint,
 
        result = asn1_write_value(c2, "proxyPolicy.policyLanguage",
                                  policyLanguage, 1);
-       if (result < 0) {
+       if (result != ASN1_SUCCESS) {
                gnutls_assert();
                result = _gnutls_asn2err(result);
                goto cleanup;
@@ -1641,7 +1641,7 @@ int gnutls_x509_ext_export_proxy(int pathLenConstraint,
 
        result = asn1_write_value(c2, "proxyPolicy.policy", policy,
                                  sizeof_policy);
-       if (result < 0) {
+       if (result != ASN1_SUCCESS) {
                gnutls_assert();
                result = _gnutls_asn2err(result);
                goto cleanup;
index 70d2cd1c268e13ac399808e4d47e1c82007dce6e..9ccae54d4ea441709a50971e84999053188ee131 100644 (file)
@@ -97,6 +97,7 @@ static gnutls_x509_crq_t generate_crq(void)
        int ret;
        size_t s = 0;
        char smallbuf[10];
+       char oidbuf[128];
        gnutls_datum_t out;
        unsigned crit;
 
@@ -163,9 +164,13 @@ static gnutls_x509_crq_t generate_crq(void)
 
        s = 0;
        ret = gnutls_x509_crq_get_extension_info(crq, 0, NULL, &s, NULL);
-       if (ret != 0)
+       if (ret != GNUTLS_E_SHORT_MEMORY_BUFFER || s > sizeof(oidbuf))
                fail("gnutls_x509_crq_get_extension_info2\n");
 
+       ret = gnutls_x509_crq_get_extension_info(crq, 0, oidbuf, &s, NULL);
+       if (ret != 0)
+               fail("gnutls_x509_crq_get_extension_info3\n");
+
        s = 0;
        ret = gnutls_x509_crq_get_extension_data(crq, 0, NULL, &s);
        if (ret != 0)