Commit dae00d63 authored by Matt Caswell's avatar Matt Caswell
Browse files

Add error return for OPENSSL_INIT_set_config_filename()



The OPENSSL_INIT_set_config_filename() function can fail so ensure that it
provides a suitable error code.

GitHub Issue #920

Reviewed-by: default avatarRich Salz <rsalz@openssl.org>
parent 7d37818d
Loading
Loading
Loading
Loading
+13 −3
Original line number Diff line number Diff line
@@ -339,11 +339,21 @@ OPENSSL_INIT_SETTINGS *OPENSSL_INIT_new(void)


#ifndef OPENSSL_NO_STDIO
void OPENSSL_INIT_set_config_filename(OPENSSL_INIT_SETTINGS *settings,
int OPENSSL_INIT_set_config_filename(OPENSSL_INIT_SETTINGS *settings,
                                     const char *config_file)
{
    char *new_config_file = NULL;

    if (config_file != NULL) {
        new_config_file = strdup(config_file);
        if (new_config_file == NULL)
            return 0;
    }

    free(settings->config_name);
    settings->config_name = config_file == NULL ? NULL : strdup(config_file);
    settings->config_name = new_config_file;

    return 1;
}
#endif

+7 −5
Original line number Diff line number Diff line
@@ -16,8 +16,9 @@ initialisation and deinitialisation functions
 void OPENSSL_thread_stop(void);

 OPENSSL_INIT_SETTINGS *OPENSSL_init_new(void);
 OPENSSL_INIT_set_config_filename(OPENSSL_INIT_SETTINGS *init, const char* name);
 OPENSSL_INIT_free(OPENSSL_INIT_SETTINGS *init);
 int OPENSSL_INIT_set_config_filename(OPENSSL_INIT_SETTINGS *init,
                                      const char* name);
 void OPENSSL_INIT_free(OPENSSL_INIT_SETTINGS *init);

=head1 DESCRIPTION

@@ -208,8 +209,8 @@ using static linking should also call OPENSSL_thread_stop().

=head1 RETURN VALUES

The functions OPENSSL_init_crypto and  OPENSSL_atexit() returns 1 on success or
0 on error.
The functions OPENSSL_init_crypto, OPENSSL_atexit() and
OPENSSL_INIT_set_config_filename() return 1 on success or 0 on error.

=head1 SEE ALSO

@@ -218,7 +219,8 @@ L<OPENSSL_init_ssl(3)>
=head1 HISTORY

The OPENSSL_init_crypto(), OPENSSL_cleanup(), OPENSSL_atexit(),
and OPENSSL_thread_stop() functions were added in OpenSSL 1.1.0.
OPENSSL_thread_stop(), OPENSSL_init_new(), OPENSSL_INIT_set_config_filename()
and OPENSSL_INIT_free() functions were added in OpenSSL 1.1.0.

=head1 COPYRIGHT

+2 −2
Original line number Diff line number Diff line
@@ -380,7 +380,7 @@ void OPENSSL_thread_stop(void);
/* Low-level control of initialization */
OPENSSL_INIT_SETTINGS *OPENSSL_INIT_new(void);
#ifndef OPENSSL_NO_STDIO
void OPENSSL_INIT_set_config_filename(OPENSSL_INIT_SETTINGS *settings,
int OPENSSL_INIT_set_config_filename(OPENSSL_INIT_SETTINGS *settings,
                                     const char *config_file);
#endif
void OPENSSL_INIT_free(OPENSSL_INIT_SETTINGS *settings);