--- rpl/src/controle.c 2013/02/26 19:56:11 1.42 +++ rpl/src/controle.c 2020/01/10 11:15:41 1.69 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.12 - Copyright (C) 1989-2013 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.32 + Copyright (C) 1989-2020 Dr. BERTRAND Joël This file is part of RPL/2. @@ -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; @@ -91,7 +91,7 @@ controle(struct_processus *s_etat_proces taille_fichier = stat_buf.st_size; - if ((chaine = malloc(taille_fichier)) == NULL) + if ((chaine = malloc((size_t) taille_fichier)) == NULL) { # ifdef OS2 free(fichier); @@ -117,7 +117,8 @@ controle(struct_processus *s_etat_proces free(fichier); # endif - if ((octets_lus = read(in_fd, chaine, taille_fichier)) != taille_fichier) + if ((octets_lus = read(in_fd, chaine, (size_t) taille_fichier)) + != (ssize_t) taille_fichier) { # ifndef OS2 close(in_fd); @@ -130,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); @@ -141,8 +149,9 @@ controle(struct_processus *s_etat_proces return(d_faux); } - if (EVP_DigestUpdate(&contexte, chaine, taille_fichier) != 1) + if (EVP_DigestUpdate(contexte, chaine, (size_t) taille_fichier) != 1) { + EVP_MD_CTX_free(contexte); close(in_fd); free(chaine); @@ -150,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); @@ -161,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); @@ -170,8 +181,9 @@ controle(struct_processus *s_etat_proces return(d_faux); } - if (EVP_DigestUpdate(&contexte, chaine, taille_fichier) != 1) + if (EVP_DigestUpdate(contexte, chaine, (size_t) taille_fichier) != 1) { + EVP_MD_CTX_free(contexte); close(in_fd); free(chaine); @@ -179,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); @@ -193,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++)