Commit 1f0bb6c595ef5be0c950fdf38b765e9917114ab3
1 parent
d04b76ae
Exists in
master
and in
3 other branches
Fixing segfault on CRL download.
Showing
1 changed file
with
11 additions
and
7 deletions
Show diff stats
src/ssl/crl.c
| @@ -179,7 +179,7 @@ int lib3270_crl_new_from_dist_points(H3270 *hSession, void *ssl_error, CRL_DIST_ | @@ -179,7 +179,7 @@ int lib3270_crl_new_from_dist_points(H3270 *hSession, void *ssl_error, CRL_DIST_ | ||
| 179 | // https://nougat.cablelabs.com/DLNA-RUI/openssl/commit/57912ed329f870b237f2fd9f2de8dec3477d1729 | 179 | // https://nougat.cablelabs.com/DLNA-RUI/openssl/commit/57912ed329f870b237f2fd9f2de8dec3477d1729 |
| 180 | // | 180 | // |
| 181 | size_t ix; | 181 | size_t ix; |
| 182 | - int i, gtype; | 182 | + int i; |
| 183 | 183 | ||
| 184 | lib3270_autoptr(LIB3270_STRING_ARRAY) uris = lib3270_string_array_new(); | 184 | lib3270_autoptr(LIB3270_STRING_ARRAY) uris = lib3270_string_array_new(); |
| 185 | 185 | ||
| @@ -194,19 +194,23 @@ int lib3270_crl_new_from_dist_points(H3270 *hSession, void *ssl_error, CRL_DIST_ | @@ -194,19 +194,23 @@ int lib3270_crl_new_from_dist_points(H3270 *hSession, void *ssl_error, CRL_DIST_ | ||
| 194 | 194 | ||
| 195 | for (i = 0; i < sk_GENERAL_NAME_num(gens); i++) | 195 | for (i = 0; i < sk_GENERAL_NAME_num(gens); i++) |
| 196 | { | 196 | { |
| 197 | + int gtype; | ||
| 197 | GENERAL_NAME *gen = sk_GENERAL_NAME_value(gens, i); | 198 | GENERAL_NAME *gen = sk_GENERAL_NAME_value(gens, i); |
| 198 | ASN1_STRING *uri = GENERAL_NAME_get0_value(gen, >ype); | 199 | ASN1_STRING *uri = GENERAL_NAME_get0_value(gen, >ype); |
| 199 | - if(uri) | 200 | + |
| 201 | + if(uri && gtype == GEN_URI) | ||
| 200 | { | 202 | { |
| 203 | + int length = ASN1_STRING_length(uri); | ||
| 204 | + | ||
| 201 | #if (OPENSSL_VERSION_NUMBER >= 0x10100000L) // OpenSSL 1.1.0+ | 205 | #if (OPENSSL_VERSION_NUMBER >= 0x10100000L) // OpenSSL 1.1.0+ |
| 202 | const unsigned char * data = ASN1_STRING_get0_data(uri); | 206 | const unsigned char * data = ASN1_STRING_get0_data(uri); |
| 203 | #else | 207 | #else |
| 204 | - const unsigned char * data = ASN1_STRING_data(uri); // ASN1_STRING_get0_data(uri); | 208 | + const unsigned char * data = ASN1_STRING_data(uri); |
| 205 | #endif // OpenSSL 1.1.0+ | 209 | #endif // OpenSSL 1.1.0+ |
| 206 | - if(data) | ||
| 207 | - { | ||
| 208 | - lib3270_string_array_append_with_length(uris,(char *) data, (size_t) ASN1_STRING_length(uri)); | ||
| 209 | - } | 210 | + |
| 211 | + if(data && length > 0) | ||
| 212 | + lib3270_string_array_append_with_length(uris,(char *) data, (size_t) length); | ||
| 213 | + | ||
| 210 | } | 214 | } |
| 211 | 215 | ||
| 212 | } | 216 | } |