mirror of
https://github.com/bdnugget/php-src.git
synced 2026-11-09 10:10:50 +00:00
Tolerate non-standard newlines when parsing stream CA files
This commit is contained in:
1 parent
a4c7ab8399
commit
f8fe09dcef
1 file changed
+21
-12
+21
-12
@@ -5240,17 +5240,16 @@ static int passwd_callback(char *buf, int num, int verify, void *data) /* {{{ */
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
static long load_stream_cafile(X509_STORE *cert_store, const char *cafile TSRMLS_DC) /* {{{ */
|
||||
{
|
||||
php_stream *stream;
|
||||
X509 *cert;
|
||||
BIO *buffer;
|
||||
int buffer_active;
|
||||
int buffer_active = 0;
|
||||
char *line;
|
||||
size_t line_len;
|
||||
long certs_added = 0;
|
||||
const char *begin_line = "-----BEGIN CERTIFICATE-----\n";
|
||||
const char *end_line = "-----END CERTIFICATE-----\n";
|
||||
|
||||
stream = php_stream_open_wrapper(cafile, "rb", 0, NULL);
|
||||
|
||||
@@ -5267,12 +5266,15 @@ static long load_stream_cafile(X509_STORE *cert_store, const char *cafile TSRMLS
|
||||
line = php_stream_get_line(stream, NULL, 0, &line_len);
|
||||
if (line == NULL) {
|
||||
goto stream_complete;
|
||||
} else if (strcmp(line, begin_line)) {
|
||||
efree(line);
|
||||
goto cert_start;
|
||||
} else {
|
||||
} else if (!strcmp(line, "-----BEGIN CERTIFICATE-----\n") ||
|
||||
!strcmp(line, "-----BEGIN CERTIFICATE-----\r\n")
|
||||
) {
|
||||
buffer = BIO_new(BIO_s_mem());
|
||||
buffer_active = 1;
|
||||
goto cert_line;
|
||||
} else {
|
||||
efree(line);
|
||||
goto cert_start;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5282,10 +5284,13 @@ static long load_stream_cafile(X509_STORE *cert_store, const char *cafile TSRMLS
|
||||
line = php_stream_get_line(stream, NULL, 0, &line_len);
|
||||
if (line == NULL) {
|
||||
goto stream_complete;
|
||||
} else if (strcmp(line, end_line)) {
|
||||
goto cert_line;
|
||||
} else {
|
||||
} else if (!strcmp(line, "-----END CERTIFICATE-----") ||
|
||||
!strcmp(line, "-----END CERTIFICATE-----\n") ||
|
||||
!strcmp(line, "-----END CERTIFICATE-----\r\n")
|
||||
) {
|
||||
goto add_cert;
|
||||
} else {
|
||||
goto cert_line;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5303,11 +5308,15 @@ static long load_stream_cafile(X509_STORE *cert_store, const char *cafile TSRMLS
|
||||
|
||||
stream_complete: {
|
||||
php_stream_close(stream);
|
||||
if (buffer_active) {
|
||||
if (buffer_active == 1) {
|
||||
BIO_free(buffer);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (certs_added == 0) {
|
||||
php_error(E_WARNING, "no valid certs found cafile stream: `%s'", cafile);
|
||||
}
|
||||
|
||||
return certs_added;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
Reference in new issue
Block a user