The first argument to load_iv should really be a char ** instead of an unsigned char **, since it points at text. Thanks to Nils Larsch <nils.larsch@cybertrust.com> for pointing out the inelegance of our code :-)
diff --git a/crypto/pem/pem_lib.c b/crypto/pem/pem_lib.c index 565c3e5..81c4aba 100644 --- a/crypto/pem/pem_lib.c +++ b/crypto/pem/pem_lib.c
@@ -73,7 +73,7 @@ #define MIN_LENGTH 4 -static int load_iv(unsigned char **fromp,unsigned char *to, int num); +static int load_iv(char **fromp,unsigned char *to, int num); static int check_pem(const char *nm, const char *name); int PEM_def_callback(char *buf, int num, int w, void *key) @@ -481,16 +481,16 @@ PEMerr(PEM_F_PEM_GET_EVP_CIPHER_INFO,PEM_R_UNSUPPORTED_ENCRYPTION); return(0); } - if (!load_iv((unsigned char **)header_pp,&(cipher->iv[0]),enc->iv_len)) + if (!load_iv(header_pp,&(cipher->iv[0]),enc->iv_len)) return(0); return(1); } -static int load_iv(unsigned char **fromp, unsigned char *to, int num) +static int load_iv(char **fromp, unsigned char *to, int num) { int v,i; - unsigned char *from; + char *from; from= *fromp; for (i=0; i<num; i++) to[i]=0;