projects
/
openssl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Plug potential memory leak.
[openssl.git]
/
crypto
/
pem
/
pem_lib.c
diff --git
a/crypto/pem/pem_lib.c
b/crypto/pem/pem_lib.c
index 52a36dc00dd1355a994a67610b26a0e6a21077c2..bfc43e90afea5e16aa1ccd3ea8414560bb6c0ba8 100644
(file)
--- a/
crypto/pem/pem_lib.c
+++ b/
crypto/pem/pem_lib.c
@@
-193,7
+193,7
@@
static int check_pem(const char *nm, const char *name)
if(!strcmp(nm,PEM_STRING_DSA) &&
!strcmp(name,PEM_STRING_EVP_PKEY)) return 1;
if(!strcmp(nm,PEM_STRING_DSA) &&
!strcmp(name,PEM_STRING_EVP_PKEY)) return 1;
- if(!strcmp(nm,PEM_STRING_EC
DSA
) &&
+ if(!strcmp(nm,PEM_STRING_EC
PRIVATEKEY
) &&
!strcmp(name,PEM_STRING_EVP_PKEY)) return 1;
/* Permit older strings */
!strcmp(name,PEM_STRING_EVP_PKEY)) return 1;
/* Permit older strings */
@@
-251,7
+251,7
@@
int PEM_bytes_read_bio(unsigned char **pdata, long *plen, char **pnm, const char
ret = 1;
err:
ret = 1;
err:
- if (!pnm) OPENSSL_free(nm);
+ if (!
ret || !
pnm) OPENSSL_free(nm);
OPENSSL_free(header);
if (!ret) OPENSSL_free(data);
return ret;
OPENSSL_free(header);
if (!ret) OPENSSL_free(data);
return ret;
@@
-335,7
+335,7
@@
int PEM_ASN1_write_bio(int (*i2d)(), const char *name, BIO *bp, char *x,
kstr=(unsigned char *)buf;
}
RAND_add(data,i,0);/* put in the RSA key. */
kstr=(unsigned char *)buf;
}
RAND_add(data,i,0);/* put in the RSA key. */
- if (RAND_pseudo_bytes(iv,
8) < 0)
/* Generate a salt */
+ if (RAND_pseudo_bytes(iv,
enc->iv_len) < 0)
/* Generate a salt */
goto err;
/* The 'iv' is used as the iv and as a salt. It is
* NOT taken from the BytesToKey function */
goto err;
/* The 'iv' is used as the iv and as a salt. It is
* NOT taken from the BytesToKey function */
@@
-345,7
+345,7
@@
int PEM_ASN1_write_bio(int (*i2d)(), const char *name, BIO *bp, char *x,
buf[0]='\0';
PEM_proc_type(buf,PEM_TYPE_ENCRYPTED);
buf[0]='\0';
PEM_proc_type(buf,PEM_TYPE_ENCRYPTED);
- PEM_dek_info(buf,objstr,
8
,(char *)iv);
+ PEM_dek_info(buf,objstr,
enc->iv_len
,(char *)iv);
/* k=strlen(buf); */
EVP_CIPHER_CTX_init(&ctx);
/* k=strlen(buf); */
EVP_CIPHER_CTX_init(&ctx);
@@
-368,8
+368,11
@@
err:
memset(iv,0,sizeof(iv));
memset((char *)&ctx,0,sizeof(ctx));
memset(buf,0,PEM_BUFSIZE);
memset(iv,0,sizeof(iv));
memset((char *)&ctx,0,sizeof(ctx));
memset(buf,0,PEM_BUFSIZE);
- memset(data,0,(unsigned int)dsize);
- OPENSSL_free(data);
+ if (data != NULL)
+ {
+ memset(data,0,(unsigned int)dsize);
+ OPENSSL_free(data);
+ }
return(ret);
}
return(ret);
}
@@
-471,7
+474,7
@@
int PEM_get_EVP_CIPHER_INFO(char *header, EVP_CIPHER_INFO *cipher)
PEMerr(PEM_F_PEM_GET_EVP_CIPHER_INFO,PEM_R_UNSUPPORTED_ENCRYPTION);
return(0);
}
PEMerr(PEM_F_PEM_GET_EVP_CIPHER_INFO,PEM_R_UNSUPPORTED_ENCRYPTION);
return(0);
}
- if (!load_iv((unsigned char **)&header,&(cipher->iv[0]),
8
)) return(0);
+ if (!load_iv((unsigned char **)&header,&(cipher->iv[0]),
enc->iv_len
)) return(0);
return(1);
}
return(1);
}