Latest update.
This commit is contained in:
+23
-8
@@ -80,7 +80,7 @@ void PEM_proc_type(char *buf, int type)
|
||||
BIO_snprintf(p, PEM_BUFSIZE - (size_t)(p - buf), "Proc-Type: 4,%s\n", str);
|
||||
}
|
||||
|
||||
void PEM_dek_info(char *buf, const char *type, int len, char *str)
|
||||
void PEM_dek_info(char *buf, const char *type, int len, const char *str)
|
||||
{
|
||||
long i;
|
||||
char *p = buf + strlen(buf);
|
||||
@@ -288,8 +288,9 @@ int PEM_bytes_read_bio_secmem(unsigned char **pdata, long *plen, char **pnm,
|
||||
|
||||
#ifndef OPENSSL_NO_STDIO
|
||||
int PEM_ASN1_write(i2d_of_void *i2d, const char *name, FILE *fp,
|
||||
void *x, const EVP_CIPHER *enc, unsigned char *kstr,
|
||||
int klen, pem_password_cb *callback, void *u)
|
||||
const void *x, const EVP_CIPHER *enc,
|
||||
const unsigned char *kstr, int klen,
|
||||
pem_password_cb *callback, void *u)
|
||||
{
|
||||
BIO *b;
|
||||
int ret;
|
||||
@@ -306,8 +307,9 @@ int PEM_ASN1_write(i2d_of_void *i2d, const char *name, FILE *fp,
|
||||
#endif
|
||||
|
||||
int PEM_ASN1_write_bio(i2d_of_void *i2d, const char *name, BIO *bp,
|
||||
void *x, const EVP_CIPHER *enc, unsigned char *kstr,
|
||||
int klen, pem_password_cb *callback, void *u)
|
||||
const void *x, const EVP_CIPHER *enc,
|
||||
const unsigned char *kstr, int klen,
|
||||
pem_password_cb *callback, void *u)
|
||||
{
|
||||
EVP_CIPHER_CTX *ctx = NULL;
|
||||
int dsize = 0, i = 0, j = 0, ret = 0;
|
||||
@@ -680,9 +682,20 @@ int PEM_read(FILE *fp, char **name, char **header, unsigned char **data,
|
||||
#endif
|
||||
|
||||
/* Some helpers for PEM_read_bio_ex(). */
|
||||
static int sanitize_line(char *linebuf, int len, unsigned int flags)
|
||||
static int sanitize_line(char *linebuf, int len, unsigned int flags, int first_call)
|
||||
{
|
||||
int i;
|
||||
if (first_call) {
|
||||
/* Other BOMs imply unsupported multibyte encoding,
|
||||
* so don't strip them and let the error raise */
|
||||
const unsigned char utf8_bom[3] = {0xEF, 0xBB, 0xBF};
|
||||
|
||||
if (len > 3 && memcmp(linebuf, utf8_bom, 3) == 0) {
|
||||
memmove(linebuf, linebuf + 3, len - 3);
|
||||
linebuf[len - 3] = 0;
|
||||
len -= 3;
|
||||
}
|
||||
}
|
||||
|
||||
if (flags & PEM_FLAG_EAY_COMPATIBLE) {
|
||||
/* Strip trailing whitespace */
|
||||
@@ -727,6 +740,7 @@ static int get_name(BIO *bp, char **name, unsigned int flags)
|
||||
char *linebuf;
|
||||
int ret = 0;
|
||||
int len;
|
||||
int first_call = 1;
|
||||
|
||||
/*
|
||||
* Need to hold trailing NUL (accounted for by BIO_gets() and the newline
|
||||
@@ -747,7 +761,8 @@ static int get_name(BIO *bp, char **name, unsigned int flags)
|
||||
}
|
||||
|
||||
/* Strip trailing garbage and standardize ending. */
|
||||
len = sanitize_line(linebuf, len, flags & ~PEM_FLAG_ONLY_B64);
|
||||
len = sanitize_line(linebuf, len, flags & ~PEM_FLAG_ONLY_B64, first_call);
|
||||
first_call = 0;
|
||||
|
||||
/* Allow leading empty or non-matching lines. */
|
||||
} while (strncmp(linebuf, beginstr, BEGINLEN) != 0
|
||||
@@ -819,7 +834,7 @@ static int get_header_and_data(BIO *bp, BIO **header, BIO **data, char *name,
|
||||
}
|
||||
if (!strncmp(linebuf, endstr, ENDLEN) || got_header == IN_HEADER)
|
||||
flags_mask &= ~PEM_FLAG_ONLY_B64;
|
||||
len = sanitize_line(linebuf, len, flags & flags_mask);
|
||||
len = sanitize_line(linebuf, len, flags & flags_mask, 0);
|
||||
|
||||
/* Check for end of header. */
|
||||
if (linebuf[0] == '\n') {
|
||||
|
||||
Reference in New Issue
Block a user