diff options
| author | Paul Eggert | 2014-12-09 23:47:16 -0800 |
|---|---|---|
| committer | Paul Eggert | 2014-12-09 23:47:45 -0800 |
| commit | 99be75085cec471fa35a811bddaf09fe91fc3452 (patch) | |
| tree | 40779cfa80181287c13ad44b3a89c03014364d41 /src | |
| parent | c9e3deffab6e9de3a214a3b7f7a5921018fc1a9d (diff) | |
| download | emacs-99be75085cec471fa35a811bddaf09fe91fc3452.tar.gz emacs-99be75085cec471fa35a811bddaf09fe91fc3452.zip | |
Fix glitches in gnutls.c, mostly memory-related
* gnutls.c: Sort macro definitions by name.
(fn_gnutls_transport_set_errno): Omit unreachable definition.
(fn_gnutls_x509_crt_get_signature): Omit unused symbol.
(gnutls_hex_string): Arg is now unsigned char *, to avoid a cast.
Prefer ptrdiff_t for sizes. Check for arithmetic overflow when
calculating string length. Use make_uninit_string, to avoid
copying the string. Cast the char, not the pointer.
(gnutls_certificate_details): Use xmalloc and xfree, not malloc
and free. Work even for dates past the year 9999. Use void *
for buffers, to avoid casts.
Diffstat (limited to 'src')
| -rw-r--r-- | src/ChangeLog | 14 | ||||
| -rw-r--r-- | src/gnutls.c | 139 |
2 files changed, 80 insertions, 73 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 762ce486390..09268d1b6cd 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,3 +1,17 @@ | |||
| 1 | 2014-12-10 Paul Eggert <eggert@cs.ucla.edu> | ||
| 2 | |||
| 3 | Fix glitches in gnutls.c, mostly memory-related | ||
| 4 | * gnutls.c: Sort macro definitions by name. | ||
| 5 | (fn_gnutls_transport_set_errno): Omit unreachable definition. | ||
| 6 | (fn_gnutls_x509_crt_get_signature): Omit unused symbol. | ||
| 7 | (gnutls_hex_string): Arg is now unsigned char *, to avoid a cast. | ||
| 8 | Prefer ptrdiff_t for sizes. Check for arithmetic overflow when | ||
| 9 | calculating string length. Use make_uninit_string, to avoid | ||
| 10 | copying the string. Cast the char, not the pointer. | ||
| 11 | (gnutls_certificate_details): Use xmalloc and xfree, not malloc | ||
| 12 | and free. Work even for dates past the year 9999. Use void * | ||
| 13 | for buffers, to avoid casts. | ||
| 14 | |||
| 1 | 2014-12-09 Andy Moreton <andrewjmoreton@gmail.com> (tiny change) | 15 | 2014-12-09 Andy Moreton <andrewjmoreton@gmail.com> (tiny change) |
| 2 | 16 | ||
| 3 | * gnutls.c (gnutls_protocol_get_name): Fix a copy/paste typo. | 17 | * gnutls.c (gnutls_protocol_get_name): Fix a copy/paste typo. |
diff --git a/src/gnutls.c b/src/gnutls.c index aa800be2576..4de2eaf5b52 100644 --- a/src/gnutls.c +++ b/src/gnutls.c | |||
| @@ -317,65 +317,61 @@ init_gnutls_functions (void) | |||
| 317 | #define fn_gnutls_certificate_set_x509_trust_file gnutls_certificate_set_x509_trust_file | 317 | #define fn_gnutls_certificate_set_x509_trust_file gnutls_certificate_set_x509_trust_file |
| 318 | #define fn_gnutls_certificate_type_get gnutls_certificate_type_get | 318 | #define fn_gnutls_certificate_type_get gnutls_certificate_type_get |
| 319 | #define fn_gnutls_certificate_verify_peers2 gnutls_certificate_verify_peers2 | 319 | #define fn_gnutls_certificate_verify_peers2 gnutls_certificate_verify_peers2 |
| 320 | #define fn_gnutls_cipher_get gnutls_cipher_get | ||
| 321 | #define fn_gnutls_cipher_get_name gnutls_cipher_get_name | ||
| 320 | #define fn_gnutls_credentials_set gnutls_credentials_set | 322 | #define fn_gnutls_credentials_set gnutls_credentials_set |
| 321 | #define fn_gnutls_deinit gnutls_deinit | 323 | #define fn_gnutls_deinit gnutls_deinit |
| 322 | #define fn_gnutls_dh_set_prime_bits gnutls_dh_set_prime_bits | ||
| 323 | #define fn_gnutls_dh_get_prime_bits gnutls_dh_get_prime_bits | 324 | #define fn_gnutls_dh_get_prime_bits gnutls_dh_get_prime_bits |
| 325 | #define fn_gnutls_dh_set_prime_bits gnutls_dh_set_prime_bits | ||
| 324 | #define fn_gnutls_error_is_fatal gnutls_error_is_fatal | 326 | #define fn_gnutls_error_is_fatal gnutls_error_is_fatal |
| 325 | #define fn_gnutls_global_init gnutls_global_init | 327 | #define fn_gnutls_global_init gnutls_global_init |
| 326 | #define fn_gnutls_global_set_log_function gnutls_global_set_log_function | ||
| 327 | #ifdef HAVE_GNUTLS3 | 328 | #ifdef HAVE_GNUTLS3 |
| 328 | #define fn_gnutls_global_set_audit_log_function gnutls_global_set_audit_log_function | 329 | #define fn_gnutls_global_set_audit_log_function gnutls_global_set_audit_log_function |
| 329 | #endif | 330 | #endif |
| 331 | #define fn_gnutls_global_set_log_function gnutls_global_set_log_function | ||
| 330 | #define fn_gnutls_global_set_log_level gnutls_global_set_log_level | 332 | #define fn_gnutls_global_set_log_level gnutls_global_set_log_level |
| 331 | #define fn_gnutls_global_set_mem_functions gnutls_global_set_mem_functions | 333 | #define fn_gnutls_global_set_mem_functions gnutls_global_set_mem_functions |
| 332 | #define fn_gnutls_handshake gnutls_handshake | 334 | #define fn_gnutls_handshake gnutls_handshake |
| 333 | #define fn_gnutls_init gnutls_init | 335 | #define fn_gnutls_init gnutls_init |
| 336 | #define fn_gnutls_kx_get gnutls_kx_get | ||
| 337 | #define fn_gnutls_kx_get_name gnutls_kx_get_name | ||
| 338 | #define fn_gnutls_mac_get gnutls_mac_get | ||
| 339 | #define fn_gnutls_mac_get_name gnutls_mac_get_name | ||
| 340 | #define fn_gnutls_pk_algorithm_get_name gnutls_pk_algorithm_get_name | ||
| 341 | #define fn_gnutls_pk_bits_to_sec_param gnutls_pk_bits_to_sec_param | ||
| 334 | #define fn_gnutls_priority_set_direct gnutls_priority_set_direct | 342 | #define fn_gnutls_priority_set_direct gnutls_priority_set_direct |
| 343 | #define fn_gnutls_protocol_get_name gnutls_protocol_get_name | ||
| 344 | #define fn_gnutls_protocol_get_version gnutls_protocol_get_version | ||
| 335 | #define fn_gnutls_record_check_pending gnutls_record_check_pending | 345 | #define fn_gnutls_record_check_pending gnutls_record_check_pending |
| 336 | #define fn_gnutls_record_recv gnutls_record_recv | 346 | #define fn_gnutls_record_recv gnutls_record_recv |
| 337 | #define fn_gnutls_record_send gnutls_record_send | 347 | #define fn_gnutls_record_send gnutls_record_send |
| 348 | #define fn_gnutls_sec_param_get_name gnutls_sec_param_get_name | ||
| 349 | #define fn_gnutls_server_name_set gnutls_server_name_set | ||
| 350 | #define fn_gnutls_sign_get_name gnutls_sign_get_name | ||
| 338 | #define fn_gnutls_strerror gnutls_strerror | 351 | #define fn_gnutls_strerror gnutls_strerror |
| 339 | #ifdef WINDOWSNT | ||
| 340 | #define fn_gnutls_transport_set_errno gnutls_transport_set_errno | ||
| 341 | #endif | ||
| 342 | #define fn_gnutls_transport_set_ptr2 gnutls_transport_set_ptr2 | 352 | #define fn_gnutls_transport_set_ptr2 gnutls_transport_set_ptr2 |
| 343 | #define fn_gnutls_x509_crt_check_hostname gnutls_x509_crt_check_hostname | 353 | #define fn_gnutls_x509_crt_check_hostname gnutls_x509_crt_check_hostname |
| 344 | #define fn_gnutls_x509_crt_deinit gnutls_x509_crt_deinit | 354 | #define fn_gnutls_x509_crt_deinit gnutls_x509_crt_deinit |
| 345 | #define fn_gnutls_x509_crt_import gnutls_x509_crt_import | ||
| 346 | #define fn_gnutls_x509_crt_init gnutls_x509_crt_init | ||
| 347 | #define fn_gnutls_x509_crt_get_fingerprint gnutls_x509_crt_get_fingerprint | ||
| 348 | #define fn_gnutls_x509_crt_get_version gnutls_x509_crt_get_version | ||
| 349 | #define fn_gnutls_x509_crt_get_serial gnutls_x509_crt_get_serial | ||
| 350 | #define fn_gnutls_x509_crt_get_issuer_dn gnutls_x509_crt_get_issuer_dn | ||
| 351 | #define fn_gnutls_x509_crt_get_activation_time gnutls_x509_crt_get_activation_time | 355 | #define fn_gnutls_x509_crt_get_activation_time gnutls_x509_crt_get_activation_time |
| 352 | #define fn_gnutls_x509_crt_get_expiration_time gnutls_x509_crt_get_expiration_time | ||
| 353 | #define fn_gnutls_x509_crt_get_dn gnutls_x509_crt_get_dn | 356 | #define fn_gnutls_x509_crt_get_dn gnutls_x509_crt_get_dn |
| 354 | #define fn_gnutls_x509_crt_get_pk_algorithm gnutls_x509_crt_get_pk_algorithm | 357 | #define fn_gnutls_x509_crt_get_expiration_time gnutls_x509_crt_get_expiration_time |
| 355 | #define fn_gnutls_pk_algorithm_get_name gnutls_pk_algorithm_get_name | 358 | #define fn_gnutls_x509_crt_get_fingerprint gnutls_x509_crt_get_fingerprint |
| 356 | #define fn_gnutls_pk_bits_to_sec_param gnutls_pk_bits_to_sec_param | 359 | #define fn_gnutls_x509_crt_get_issuer_dn gnutls_x509_crt_get_issuer_dn |
| 357 | #define fn_gnutls_x509_crt_get_issuer_unique_id gnutls_x509_crt_get_issuer_unique_id | 360 | #define fn_gnutls_x509_crt_get_issuer_unique_id gnutls_x509_crt_get_issuer_unique_id |
| 358 | #define fn_gnutls_x509_crt_get_subject_unique_id gnutls_x509_crt_get_subject_unique_id | ||
| 359 | #define fn_gnutls_x509_crt_get_signature_algorithm gnutls_x509_crt_get_signature_algorithm | ||
| 360 | #define fn_gnutls_x509_crt_get_signature gnutls_x509_crt_get_signature | ||
| 361 | #define fn_gnutls_x509_crt_get_key_id gnutls_x509_crt_get_key_id | 361 | #define fn_gnutls_x509_crt_get_key_id gnutls_x509_crt_get_key_id |
| 362 | #define fn_gnutls_sec_param_get_name gnutls_sec_param_get_name | 362 | #define fn_gnutls_x509_crt_get_pk_algorithm gnutls_x509_crt_get_pk_algorithm |
| 363 | #define fn_gnutls_sign_get_name gnutls_sign_get_name | 363 | #define fn_gnutls_x509_crt_get_serial gnutls_x509_crt_get_serial |
| 364 | #define fn_gnutls_server_name_set gnutls_server_name_set | 364 | #define fn_gnutls_x509_crt_get_signature_algorithm gnutls_x509_crt_get_signature_algorithm |
| 365 | #define fn_gnutls_kx_get gnutls_kx_get | 365 | #define fn_gnutls_x509_crt_get_subject_unique_id gnutls_x509_crt_get_subject_unique_id |
| 366 | #define fn_gnutls_kx_get_name gnutls_kx_get_name | 366 | #define fn_gnutls_x509_crt_get_version gnutls_x509_crt_get_version |
| 367 | #define fn_gnutls_protocol_get_version gnutls_protocol_get_version | 367 | #define fn_gnutls_x509_crt_import gnutls_x509_crt_import |
| 368 | #define fn_gnutls_protocol_get_name gnutls_protocol_get_name | 368 | #define fn_gnutls_x509_crt_init gnutls_x509_crt_init |
| 369 | #define fn_gnutls_cipher_get gnutls_cipher_get | ||
| 370 | #define fn_gnutls_cipher_get_name gnutls_cipher_get_name | ||
| 371 | #define fn_gnutls_mac_get gnutls_mac_get | ||
| 372 | #define fn_gnutls_mac_get_name gnutls_mac_get_name | ||
| 373 | 369 | ||
| 374 | #endif /* !WINDOWSNT */ | 370 | #endif /* !WINDOWSNT */ |
| 375 | 371 | ||
| 376 | 372 | ||
| 377 | #ifdef HAVE_GNUTLS3 | 373 | #ifdef HAVE_GNUTLS3 |
| 378 | /* Function to log a simple audit message. */ | 374 | /* Log a simple audit message. */ |
| 379 | static void | 375 | static void |
| 380 | gnutls_audit_log_function (gnutls_session_t session, const char *string) | 376 | gnutls_audit_log_function (gnutls_session_t session, const char *string) |
| 381 | { | 377 | { |
| @@ -386,21 +382,21 @@ gnutls_audit_log_function (gnutls_session_t session, const char *string) | |||
| 386 | } | 382 | } |
| 387 | #endif | 383 | #endif |
| 388 | 384 | ||
| 389 | /* Function to log a simple message. */ | 385 | /* Log a simple message. */ |
| 390 | static void | 386 | static void |
| 391 | gnutls_log_function (int level, const char *string) | 387 | gnutls_log_function (int level, const char *string) |
| 392 | { | 388 | { |
| 393 | message ("gnutls.c: [%d] %s", level, string); | 389 | message ("gnutls.c: [%d] %s", level, string); |
| 394 | } | 390 | } |
| 395 | 391 | ||
| 396 | /* Function to log a message and a string. */ | 392 | /* Log a message and a string. */ |
| 397 | static void | 393 | static void |
| 398 | gnutls_log_function2 (int level, const char *string, const char *extra) | 394 | gnutls_log_function2 (int level, const char *string, const char *extra) |
| 399 | { | 395 | { |
| 400 | message ("gnutls.c: [%d] %s %s", level, string, extra); | 396 | message ("gnutls.c: [%d] %s %s", level, string, extra); |
| 401 | } | 397 | } |
| 402 | 398 | ||
| 403 | /* Function to log a message and an integer. */ | 399 | /* Log a message and an integer. */ |
| 404 | static void | 400 | static void |
| 405 | gnutls_log_function2i (int level, const char *string, int extra) | 401 | gnutls_log_function2i (int level, const char *string, int extra) |
| 406 | { | 402 | { |
| @@ -804,21 +800,21 @@ DEFUN ("gnutls-available-p", Fgnutls_available_p, Sgnutls_available_p, 0, 0, 0, | |||
| 804 | } | 800 | } |
| 805 | 801 | ||
| 806 | static Lisp_Object | 802 | static Lisp_Object |
| 807 | gnutls_hex_string (char *buf, size_t buf_size, const char *prefix) | 803 | gnutls_hex_string (unsigned char *buf, ptrdiff_t buf_size, const char *prefix) |
| 808 | { | 804 | { |
| 809 | size_t prefix_length = strlen (prefix); | 805 | ptrdiff_t prefix_length = strlen (prefix); |
| 810 | char *string = malloc (buf_size * 3 + prefix_length); | 806 | if ((STRING_BYTES_BOUND - prefix_length) / 3 < buf_size) |
| 811 | Lisp_Object ret; | 807 | string_overflow (); |
| 812 | 808 | Lisp_Object ret = make_uninit_string (prefix_length + 3 * buf_size | |
| 809 | - (buf_size != 0)); | ||
| 810 | char *string = SSDATA (ret); | ||
| 813 | strcpy (string, prefix); | 811 | strcpy (string, prefix); |
| 814 | 812 | ||
| 815 | for (int i = 0; i < buf_size; i++) | 813 | for (ptrdiff_t i = 0; i < buf_size; i++) |
| 816 | sprintf (string + i * 3 + prefix_length, | 814 | sprintf (string + i * 3 + prefix_length, |
| 817 | i == buf_size - 1 ? "%02x" : "%02x:", | 815 | i == buf_size - 1 ? "%02x" : "%02x:", |
| 818 | ((unsigned char*) buf)[i]); | 816 | buf[i]); |
| 819 | 817 | ||
| 820 | ret = build_string (string); | ||
| 821 | free (string); | ||
| 822 | return ret; | 818 | return ret; |
| 823 | } | 819 | } |
| 824 | 820 | ||
| @@ -842,12 +838,12 @@ gnutls_certificate_details (gnutls_x509_crt_t cert) | |||
| 842 | err = fn_gnutls_x509_crt_get_serial (cert, NULL, &buf_size); | 838 | err = fn_gnutls_x509_crt_get_serial (cert, NULL, &buf_size); |
| 843 | if (err == GNUTLS_E_SHORT_MEMORY_BUFFER) | 839 | if (err == GNUTLS_E_SHORT_MEMORY_BUFFER) |
| 844 | { | 840 | { |
| 845 | char *serial = malloc (buf_size); | 841 | void *serial = xmalloc (buf_size); |
| 846 | err = fn_gnutls_x509_crt_get_serial (cert, serial, &buf_size); | 842 | err = fn_gnutls_x509_crt_get_serial (cert, serial, &buf_size); |
| 847 | if (err >= GNUTLS_E_SUCCESS) | 843 | if (err >= GNUTLS_E_SUCCESS) |
| 848 | res = nconc2 (res, list2 (intern (":serial-number"), | 844 | res = nconc2 (res, list2 (intern (":serial-number"), |
| 849 | gnutls_hex_string (serial, buf_size, ""))); | 845 | gnutls_hex_string (serial, buf_size, ""))); |
| 850 | free (serial); | 846 | xfree (serial); |
| 851 | } | 847 | } |
| 852 | 848 | ||
| 853 | /* Issuer. */ | 849 | /* Issuer. */ |
| @@ -855,28 +851,27 @@ gnutls_certificate_details (gnutls_x509_crt_t cert) | |||
| 855 | err = fn_gnutls_x509_crt_get_issuer_dn (cert, NULL, &buf_size); | 851 | err = fn_gnutls_x509_crt_get_issuer_dn (cert, NULL, &buf_size); |
| 856 | if (err == GNUTLS_E_SHORT_MEMORY_BUFFER) | 852 | if (err == GNUTLS_E_SHORT_MEMORY_BUFFER) |
| 857 | { | 853 | { |
| 858 | char *dn = malloc (buf_size); | 854 | char *dn = xmalloc (buf_size); |
| 859 | err = fn_gnutls_x509_crt_get_issuer_dn (cert, dn, &buf_size); | 855 | err = fn_gnutls_x509_crt_get_issuer_dn (cert, dn, &buf_size); |
| 860 | if (err >= GNUTLS_E_SUCCESS) | 856 | if (err >= GNUTLS_E_SUCCESS) |
| 861 | res = nconc2 (res, list2 (intern (":issuer"), | 857 | res = nconc2 (res, list2 (intern (":issuer"), |
| 862 | make_string (dn, buf_size))); | 858 | make_string (dn, buf_size))); |
| 863 | free (dn); | 859 | xfree (dn); |
| 864 | } | 860 | } |
| 865 | 861 | ||
| 866 | /* Validity. */ | 862 | /* Validity. */ |
| 867 | { | 863 | { |
| 868 | char buf[11]; | 864 | /* Add 1 to the buffer size, since 1900 is added to tm_year and |
| 869 | size_t buf_size = sizeof (buf); | 865 | that might add 1 to the year length. */ |
| 866 | char buf[INT_STRLEN_BOUND (int) + 1 + sizeof "-12-31"]; | ||
| 870 | struct tm t; | 867 | struct tm t; |
| 871 | time_t tim = fn_gnutls_x509_crt_get_activation_time (cert); | 868 | time_t tim = fn_gnutls_x509_crt_get_activation_time (cert); |
| 872 | 869 | ||
| 873 | if (gmtime_r (&tim, &t) != NULL && | 870 | if (gmtime_r (&tim, &t) && strftime (buf, sizeof buf, "%Y-%m-%d", &t)) |
| 874 | strftime (buf, buf_size, "%Y-%m-%d", &t) != 0) | ||
| 875 | res = nconc2 (res, list2 (intern (":valid-from"), build_string (buf))); | 871 | res = nconc2 (res, list2 (intern (":valid-from"), build_string (buf))); |
| 876 | 872 | ||
| 877 | tim = fn_gnutls_x509_crt_get_expiration_time (cert); | 873 | tim = fn_gnutls_x509_crt_get_expiration_time (cert); |
| 878 | if (gmtime_r (&tim, &t) != NULL && | 874 | if (gmtime_r (&tim, &t) && strftime (buf, sizeof buf, "%Y-%m-%d", &t)) |
| 879 | strftime (buf, buf_size, "%Y-%m-%d", &t) != 0) | ||
| 880 | res = nconc2 (res, list2 (intern (":valid-to"), build_string (buf))); | 875 | res = nconc2 (res, list2 (intern (":valid-to"), build_string (buf))); |
| 881 | } | 876 | } |
| 882 | 877 | ||
| @@ -885,12 +880,12 @@ gnutls_certificate_details (gnutls_x509_crt_t cert) | |||
| 885 | err = fn_gnutls_x509_crt_get_dn (cert, NULL, &buf_size); | 880 | err = fn_gnutls_x509_crt_get_dn (cert, NULL, &buf_size); |
| 886 | if (err == GNUTLS_E_SHORT_MEMORY_BUFFER) | 881 | if (err == GNUTLS_E_SHORT_MEMORY_BUFFER) |
| 887 | { | 882 | { |
| 888 | char *dn = malloc (buf_size); | 883 | char *dn = xmalloc (buf_size); |
| 889 | err = fn_gnutls_x509_crt_get_dn (cert, dn, &buf_size); | 884 | err = fn_gnutls_x509_crt_get_dn (cert, dn, &buf_size); |
| 890 | if (err >= GNUTLS_E_SUCCESS) | 885 | if (err >= GNUTLS_E_SUCCESS) |
| 891 | res = nconc2 (res, list2 (intern (":subject"), | 886 | res = nconc2 (res, list2 (intern (":subject"), |
| 892 | make_string (dn, buf_size))); | 887 | make_string (dn, buf_size))); |
| 893 | free (dn); | 888 | xfree (dn); |
| 894 | } | 889 | } |
| 895 | 890 | ||
| 896 | /* Versions older than 2.11 doesn't have these four functions. */ | 891 | /* Versions older than 2.11 doesn't have these four functions. */ |
| @@ -919,24 +914,24 @@ gnutls_certificate_details (gnutls_x509_crt_t cert) | |||
| 919 | err = fn_gnutls_x509_crt_get_issuer_unique_id (cert, NULL, &buf_size); | 914 | err = fn_gnutls_x509_crt_get_issuer_unique_id (cert, NULL, &buf_size); |
| 920 | if (err == GNUTLS_E_SHORT_MEMORY_BUFFER) | 915 | if (err == GNUTLS_E_SHORT_MEMORY_BUFFER) |
| 921 | { | 916 | { |
| 922 | char *buf = malloc (buf_size); | 917 | char *buf = xmalloc (buf_size); |
| 923 | err = fn_gnutls_x509_crt_get_issuer_unique_id (cert, buf, &buf_size); | 918 | err = fn_gnutls_x509_crt_get_issuer_unique_id (cert, buf, &buf_size); |
| 924 | if (err >= GNUTLS_E_SUCCESS) | 919 | if (err >= GNUTLS_E_SUCCESS) |
| 925 | res = nconc2 (res, list2 (intern (":issuer-unique-id"), | 920 | res = nconc2 (res, list2 (intern (":issuer-unique-id"), |
| 926 | make_string (buf, buf_size))); | 921 | make_string (buf, buf_size))); |
| 927 | free (buf); | 922 | xfree (buf); |
| 928 | } | 923 | } |
| 929 | 924 | ||
| 930 | buf_size = 0; | 925 | buf_size = 0; |
| 931 | err = fn_gnutls_x509_crt_get_subject_unique_id (cert, NULL, &buf_size); | 926 | err = fn_gnutls_x509_crt_get_subject_unique_id (cert, NULL, &buf_size); |
| 932 | if (err == GNUTLS_E_SHORT_MEMORY_BUFFER) | 927 | if (err == GNUTLS_E_SHORT_MEMORY_BUFFER) |
| 933 | { | 928 | { |
| 934 | char *buf = malloc (buf_size); | 929 | char *buf = xmalloc (buf_size); |
| 935 | err = fn_gnutls_x509_crt_get_subject_unique_id (cert, buf, &buf_size); | 930 | err = fn_gnutls_x509_crt_get_subject_unique_id (cert, buf, &buf_size); |
| 936 | if (err >= GNUTLS_E_SUCCESS) | 931 | if (err >= GNUTLS_E_SUCCESS) |
| 937 | res = nconc2 (res, list2 (intern (":subject-unique-id"), | 932 | res = nconc2 (res, list2 (intern (":subject-unique-id"), |
| 938 | make_string (buf, buf_size))); | 933 | make_string (buf, buf_size))); |
| 939 | free (buf); | 934 | xfree (buf); |
| 940 | } | 935 | } |
| 941 | #endif | 936 | #endif |
| 942 | 937 | ||
| @@ -955,13 +950,12 @@ gnutls_certificate_details (gnutls_x509_crt_t cert) | |||
| 955 | err = fn_gnutls_x509_crt_get_key_id (cert, 0, NULL, &buf_size); | 950 | err = fn_gnutls_x509_crt_get_key_id (cert, 0, NULL, &buf_size); |
| 956 | if (err == GNUTLS_E_SHORT_MEMORY_BUFFER) | 951 | if (err == GNUTLS_E_SHORT_MEMORY_BUFFER) |
| 957 | { | 952 | { |
| 958 | unsigned char *buf = malloc (buf_size); | 953 | void *buf = xmalloc (buf_size); |
| 959 | err = fn_gnutls_x509_crt_get_key_id (cert, 0, buf, &buf_size); | 954 | err = fn_gnutls_x509_crt_get_key_id (cert, 0, buf, &buf_size); |
| 960 | if (err >= GNUTLS_E_SUCCESS) | 955 | if (err >= GNUTLS_E_SUCCESS) |
| 961 | res = nconc2 (res, list2 (intern (":public-key-id"), | 956 | res = nconc2 (res, list2 (intern (":public-key-id"), |
| 962 | gnutls_hex_string ((char *)buf, | 957 | gnutls_hex_string (buf, buf_size, "sha1:"))); |
| 963 | buf_size, "sha1:"))); | 958 | xfree (buf); |
| 964 | free (buf); | ||
| 965 | } | 959 | } |
| 966 | 960 | ||
| 967 | /* Certificate fingerprint. */ | 961 | /* Certificate fingerprint. */ |
| @@ -970,21 +964,20 @@ gnutls_certificate_details (gnutls_x509_crt_t cert) | |||
| 970 | NULL, &buf_size); | 964 | NULL, &buf_size); |
| 971 | if (err == GNUTLS_E_SHORT_MEMORY_BUFFER) | 965 | if (err == GNUTLS_E_SHORT_MEMORY_BUFFER) |
| 972 | { | 966 | { |
| 973 | unsigned char *buf = malloc (buf_size); | 967 | void *buf = xmalloc (buf_size); |
| 974 | err = fn_gnutls_x509_crt_get_fingerprint (cert, GNUTLS_DIG_SHA1, | 968 | err = fn_gnutls_x509_crt_get_fingerprint (cert, GNUTLS_DIG_SHA1, |
| 975 | buf, &buf_size); | 969 | buf, &buf_size); |
| 976 | if (err >= GNUTLS_E_SUCCESS) | 970 | if (err >= GNUTLS_E_SUCCESS) |
| 977 | res = nconc2 (res, list2 (intern (":certificate-id"), | 971 | res = nconc2 (res, list2 (intern (":certificate-id"), |
| 978 | gnutls_hex_string ((char *)buf, | 972 | gnutls_hex_string (buf, buf_size, "sha1:"))); |
| 979 | buf_size, "sha1:"))); | 973 | xfree (buf); |
| 980 | free (buf); | ||
| 981 | } | 974 | } |
| 982 | 975 | ||
| 983 | return res; | 976 | return res; |
| 984 | } | 977 | } |
| 985 | 978 | ||
| 986 | DEFUN ("gnutls-peer-status-warning-describe", Fgnutls_peer_status_warning_describe, Sgnutls_peer_status_warning_describe, 1, 1, 0, | 979 | DEFUN ("gnutls-peer-status-warning-describe", Fgnutls_peer_status_warning_describe, Sgnutls_peer_status_warning_describe, 1, 1, 0, |
| 987 | doc: /* Describe the warning of a GnuTLS peer status from `gnutls-peer-status'.*/) | 980 | doc: /* Describe the warning of a GnuTLS peer status from `gnutls-peer-status'. */) |
| 988 | (Lisp_Object status_symbol) | 981 | (Lisp_Object status_symbol) |
| 989 | { | 982 | { |
| 990 | CHECK_SYMBOL (status_symbol); | 983 | CHECK_SYMBOL (status_symbol); |
| @@ -1109,9 +1102,9 @@ The return value is a property list with top-level keys :warnings and | |||
| 1109 | } | 1102 | } |
| 1110 | 1103 | ||
| 1111 | 1104 | ||
| 1112 | /* Initializes global GnuTLS state to defaults. | 1105 | /* Initialize global GnuTLS state to defaults. |
| 1113 | Call `gnutls-global-deinit' when GnuTLS usage is no longer needed. | 1106 | Call `gnutls-global-deinit' when GnuTLS usage is no longer needed. |
| 1114 | Returns zero on success. */ | 1107 | Return zero on success. */ |
| 1115 | static Lisp_Object | 1108 | static Lisp_Object |
| 1116 | emacs_gnutls_global_init (void) | 1109 | emacs_gnutls_global_init (void) |
| 1117 | { | 1110 | { |
| @@ -1141,8 +1134,8 @@ gnutls_ip_address_p (char *string) | |||
| 1141 | } | 1134 | } |
| 1142 | 1135 | ||
| 1143 | #if 0 | 1136 | #if 0 |
| 1144 | /* Deinitializes global GnuTLS state. | 1137 | /* Deinitialize global GnuTLS state. |
| 1145 | See also `gnutls-global-init'. */ | 1138 | See also `gnutls-global-init'. */ |
| 1146 | static Lisp_Object | 1139 | static Lisp_Object |
| 1147 | emacs_gnutls_global_deinit (void) | 1140 | emacs_gnutls_global_deinit (void) |
| 1148 | { | 1141 | { |
| @@ -1282,7 +1275,7 @@ one trustfile (usually a CA bundle). */) | |||
| 1282 | 1275 | ||
| 1283 | GNUTLS_LOG2 (1, max_log_level, "connecting to host:", c_hostname); | 1276 | GNUTLS_LOG2 (1, max_log_level, "connecting to host:", c_hostname); |
| 1284 | 1277 | ||
| 1285 | /* always initialize globals. */ | 1278 | /* Always initialize globals. */ |
| 1286 | global_init = emacs_gnutls_global_init (); | 1279 | global_init = emacs_gnutls_global_init (); |
| 1287 | if (! NILP (Fgnutls_errorp (global_init))) | 1280 | if (! NILP (Fgnutls_errorp (global_init))) |
| 1288 | return global_init; | 1281 | return global_init; |