--- poldek-0.32.2/tndb/read.c~ 2016-01-30 17:59:59.000000000 +0100 +++ poldek-0.32.2/tndb/read.c 2018-09-14 18:35:56.516594794 +0200 @@ -53,20 +53,22 @@ static int md5(FILE *stream, unsigned char *md, unsigned *md_size) { unsigned char buf[8*1024]; - EVP_MD_CTX ctx; + EVP_MD_CTX *ctx; unsigned n, nn = 0; n_assert(md_size && *md_size); - EVP_DigestInit(&ctx, EVP_md5()); + ctx = EVP_MD_CTX_create(); + if (!EVP_DigestInit(ctx, EVP_md5())) + return 0; while ((n = fread(buf, 1, sizeof(buf), stream)) > 0) { - EVP_DigestUpdate(&ctx, buf, n); + EVP_DigestUpdate(ctx, buf, n); nn += n; } - EVP_DigestFinal(&ctx, buf, &n); + EVP_DigestFinal(ctx, buf, &n); if (n > *md_size) { *md = '\0'; @@ -75,7 +77,9 @@ int md5(FILE *stream, unsigned char *md, memcpy(md, buf, n); *md_size = n; } - + + EVP_MD_CTX_destroy(ctx); + return *md_size; } --- poldek-0.32.2/tndb/tndb.c~ 2016-01-30 17:59:59.000000000 +0100 +++ poldek-0.32.2/tndb/tndb.c 2018-09-14 18:40:57.805504132 +0200 @@ -85,13 +85,13 @@ char *tndb_bin2hex_s(const unsigned char //static void tndb_sign_init(struct tndb_sign *sign) { - EVP_MD_CTX ctx; + EVP_MD_CTX *ctx; memset(sign, 0, sizeof(*sign)); - EVP_DigestInit(&ctx, EVP_sha1()); - sign->ctx = n_malloc(sizeof(ctx)); - memcpy(sign->ctx, &ctx, sizeof(ctx)); + ctx = EVP_MD_CTX_create(); + EVP_DigestInit(ctx, EVP_sha1()); + sign->ctx = ctx; //printf("%p %p >> INIT\n", sign, sign->ctx); } @@ -122,8 +122,8 @@ void tndb_sign_final(struct tndb_sign *s *sign->md = '\0'; else memcpy(sign->md, buf, n); - - free(sign->ctx); + + EVP_MD_CTX_destroy((EVP_MD_CTX *)sign->ctx); sign->ctx = NULL; } --- poldek-0.32.2/pkgdir/pdir/digest.c~ 2016-01-30 15:05:57.000000000 +0100 +++ poldek-0.32.2/pkgdir/pdir/digest.c 2018-09-14 18:52:42.783229333 +0200 @@ -195,12 +195,13 @@ int hdr_digest(tn_stream *st, unsigned c int nread, len, endvhdr_found = 0; unsigned char buf[256]; char line[4096]; - EVP_MD_CTX ctx; + EVP_MD_CTX *ctx; unsigned n; n_assert(md_size && *md_size); - EVP_DigestInit(&ctx, EVP_sha1()); + ctx = EVP_MD_CTX_create(); + EVP_DigestInit(ctx, EVP_sha1()); len = strlen(pdir_tag_endvarhdr); n = 0; @@ -208,7 +209,7 @@ int hdr_digest(tn_stream *st, unsigned c while ((nread = n_stream_gets(st, line, sizeof(line))) > 0) { char *p = line; - EVP_DigestUpdate(&ctx, line, nread); + EVP_DigestUpdate(ctx, line, nread); if (_ctx) EVP_DigestUpdate(_ctx, line, nread); n++; @@ -228,7 +229,8 @@ int hdr_digest(tn_stream *st, unsigned c break; } - EVP_DigestFinal(&ctx, buf, &n); + EVP_DigestFinal(ctx, buf, &n); + EVP_MD_CTX_destroy(ctx); if (!endvhdr_found) { logn(LOGERR, _("broken index")); @@ -251,22 +253,24 @@ static int digest(tn_stream *st, unsigned char *md, int *md_size, EVP_MD_CTX *_ctx) { unsigned char buf[16*1024]; - EVP_MD_CTX ctx; + EVP_MD_CTX *ctx; int n, nn = 0; n_assert(md_size && *md_size); - EVP_DigestInit(&ctx, EVP_sha1()); + ctx = EVP_MD_CTX_create(); + EVP_DigestInit(ctx, EVP_sha1()); while ((n = n_stream_read(st, buf, sizeof(buf))) > 0) { - EVP_DigestUpdate(&ctx, buf, n); + EVP_DigestUpdate(ctx, buf, n); if (_ctx) EVP_DigestUpdate(_ctx, buf, n); nn += n; } - EVP_DigestFinal(&ctx, buf, &n); + EVP_DigestFinal(ctx, buf, &n); + EVP_MD_CTX_destroy(ctx); if (n > *md_size) { *md = '\0'; @@ -288,7 +292,7 @@ int pdir_digest_calc(struct pdir_digest unsigned char mdh[64], mdd[64], md[64], mdhex[64]; int mdh_size = sizeof(mdh), mdd_size = sizeof(mdd), md_size = sizeof(md); - EVP_MD_CTX ctx, *ctxp; + EVP_MD_CTX *ctx, *ctxp; int is_err = 0, n; @@ -300,27 +304,34 @@ int pdir_digest_calc(struct pdir_digest ctxp = NULL; if (flags & CALC_MD) { - EVP_DigestInit(&ctx, EVP_sha1()); - ctxp = &ctx; + ctx = EVP_MD_CTX_create(); + EVP_DigestInit(ctx, EVP_sha1()); + ctxp = ctx; } if ((flags & CALC_MDD) == 0) { /* no separate header && body digests */ if (!digest(st, mdd, &mdd_size, ctxp)) { - if (ctxp) - EVP_DigestFinal(&ctx, md, &md_size); + if (ctxp) { + EVP_DigestFinal(ctx, md, &md_size); + EVP_MD_CTX_destroy(ctx); + } return 0; } } else { if (!hdr_digest(st, mdh, &mdh_size, ctxp)) { - if (ctxp) - EVP_DigestFinal(&ctx, md, &md_size); + if (ctxp) { + EVP_DigestFinal(ctx, md, &md_size); + EVP_MD_CTX_destroy(ctx); + } return 0; } if (!digest(st, mdd, &mdd_size, ctxp)) { - if (ctxp) - EVP_DigestFinal(&ctx, md, &md_size); + if (ctxp) { + EVP_DigestFinal(ctx, md, &md_size); + EVP_MD_CTX_destroy(ctx); + } return 0; } } @@ -336,7 +347,8 @@ int pdir_digest_calc(struct pdir_digest } if (ctxp) { - EVP_DigestFinal(&ctx, md, &md_size); + EVP_DigestFinal(ctx, md, &md_size); + EVP_MD_CTX_destroy(ctx); n = bin2hex(mdhex, sizeof(mdhex), md, md_size); if (n != PDIR_DIGEST_SIZE) is_err = 1; --- poldek-0.32.2/pkgdir/pndir/digest.c~ 2016-01-30 15:05:57.000000000 +0100 +++ poldek-0.32.2/pkgdir/pndir/digest.c 2018-09-14 18:53:40.521640846 +0200 @@ -241,12 +241,13 @@ int pndir_digest_calc_pkgs(struct pndir_ int pndir_digest_calc(struct pndir_digest *pdg, tn_array *keys) { unsigned char md[256]; - EVP_MD_CTX ctx; + EVP_MD_CTX *ctx; int i, n, nn = 0; - EVP_DigestInit(&ctx, EVP_sha1()); - EVP_DigestUpdate(&ctx, "md", strlen("md")); + ctx = EVP_MD_CTX_create(); + EVP_DigestInit(ctx, EVP_sha1()); + EVP_DigestUpdate(ctx, "md", strlen("md")); if (keys && n_array_size(keys)) { n_array_sort(keys); @@ -254,11 +255,12 @@ int pndir_digest_calc(struct pndir_diges for (i=0; i < n_array_size(keys); i++) { char *key = n_array_nth(keys, i); DBGF("key = %s\n", key); - EVP_DigestUpdate(&ctx, key, strlen(key)); + EVP_DigestUpdate(ctx, key, strlen(key)); } } - EVP_DigestFinal(&ctx, md, &n); + EVP_DigestFinal(ctx, md, &n); + EVP_MD_CTX_destroy(ctx); if (n > (int)sizeof(pdg->md)) return 0; --- poldek-0.32.2/misc.c~ 2016-01-30 15:05:57.000000000 +0100 +++ poldek-0.32.2/misc.c 2018-09-14 18:55:01.440752874 +0200 @@ -80,23 +80,25 @@ static int mdigest(FILE *stream, unsigned char *md, unsigned *md_size, int digest_type) { unsigned char buf[8*1024]; - EVP_MD_CTX ctx; + EVP_MD_CTX *ctx; unsigned n, nn = 0; n_assert(md_size && *md_size); + ctx = EVP_MD_CTX_create(); if (digest_type == DIGEST_MD5) - EVP_DigestInit(&ctx, EVP_md5()); + EVP_DigestInit(ctx, EVP_md5()); else - EVP_DigestInit(&ctx, EVP_sha1()); + EVP_DigestInit(ctx, EVP_sha1()); while ((n = fread(buf, 1, sizeof(buf), stream)) > 0) { - EVP_DigestUpdate(&ctx, buf, n); + EVP_DigestUpdate(ctx, buf, n); nn += n; } - EVP_DigestFinal(&ctx, buf, &n); + EVP_DigestFinal(ctx, buf, &n); + EVP_MD_CTX_destroy(ctx); if (n > *md_size) { *md = '\0';