--- rpl/src/controle.c 2016/03/01 22:12:26 1.58 +++ rpl/src/controle.c 2016/09/27 10:43:23 1.59 @@ -43,7 +43,7 @@ logical1 controle(struct_processus *s_etat_processus, unsigned char *fichier, unsigned char *type, unsigned char *somme_candidate) { - EVP_MD_CTX contexte; + EVP_MD_CTX *contexte; int in_fd; @@ -131,10 +131,17 @@ controle(struct_processus *s_etat_proces close(in_fd); + if ((contexte = EVP_MD_CTX_new()) == NULL) + { + close(in_fd); + return(d_faux); + } + if (strcmp(type, "md5") == 0) { - if (EVP_DigestInit(&contexte, EVP_md5()) != 1) + if (EVP_DigestInit(contexte, EVP_md5()) != 1) { + EVP_MD_CTX_free(contexte); close(in_fd); free(chaine); @@ -142,8 +149,9 @@ controle(struct_processus *s_etat_proces return(d_faux); } - if (EVP_DigestUpdate(&contexte, chaine, (size_t) taille_fichier) != 1) + if (EVP_DigestUpdate(contexte, chaine, (size_t) taille_fichier) != 1) { + EVP_MD_CTX_free(contexte); close(in_fd); free(chaine); @@ -151,8 +159,9 @@ controle(struct_processus *s_etat_proces return(d_faux); } - if (EVP_DigestFinal_ex(&contexte, somme, &longueur_somme) != 1) + if (EVP_DigestFinal_ex(contexte, somme, &longueur_somme) != 1) { + EVP_MD_CTX_free(contexte); close(in_fd); free(chaine); @@ -162,8 +171,9 @@ controle(struct_processus *s_etat_proces } else if (strcmp(type, "sha1") == 0) { - if (EVP_DigestInit(&contexte, EVP_sha1()) != 1) + if (EVP_DigestInit(contexte, EVP_sha1()) != 1) { + EVP_MD_CTX_free(contexte); close(in_fd); free(chaine); @@ -171,8 +181,9 @@ controle(struct_processus *s_etat_proces return(d_faux); } - if (EVP_DigestUpdate(&contexte, chaine, (size_t) taille_fichier) != 1) + if (EVP_DigestUpdate(contexte, chaine, (size_t) taille_fichier) != 1) { + EVP_MD_CTX_free(contexte); close(in_fd); free(chaine); @@ -180,8 +191,9 @@ controle(struct_processus *s_etat_proces return(d_faux); } - if (EVP_DigestFinal_ex(&contexte, somme, &longueur_somme) != 1) + if (EVP_DigestFinal_ex(contexte, somme, &longueur_somme) != 1) { + EVP_MD_CTX_free(contexte); close(in_fd); free(chaine); @@ -194,7 +206,7 @@ controle(struct_processus *s_etat_proces return(d_faux); } - EVP_MD_CTX_cleanup(&contexte); + EVP_MD_CTX_free(contexte); free(chaine); for(i = 0; i < longueur_somme; i++)