HEX
Server: Apache/2.4.41 (FreeBSD) OpenSSL/1.0.2s mod_fcgid/2.3.9
System: FreeBSD salazo 12.0-RELEASE-p1303-ZFS hostBSD 12.0-RELEASE-p1303-ZFS DMR amd64
User: admin (1000)
PHP: 7.4.3
Disabled: NONE
Upload Files
File: /usr/ports/sysutils/bulk_extractor/files/patch-plugins_dfxml_src_hash__t.h
--- plugins/dfxml/src/hash_t.h.orig	2014-09-16 18:34:02 UTC
+++ plugins/dfxml/src/hash_t.h
@@ -189,7 +189,8 @@ inline std::string digest_name<sha512_t>
 
 template<const EVP_MD *md(),size_t SIZE> 
 class hash_generator__ { 			/* generates the hash */
-    EVP_MD_CTX mdctx;	     /* the context for computing the value */
+ private:
+    EVP_MD_CTX* mdctx;	     /* the context for computing the value */
     bool initialized;	       /* has the context been initialized? */
     bool finalized;
     /* Static function to determine if something is zero */
@@ -199,24 +200,36 @@ class hash_generator__ { 			/* generates
 	}
 	return true;
     }
+    /* Not allowed to copy; these are prototyped but not defined, so any attempt to use them will fail, but we won't get the -Weffc++ warnings  */
+    hash_generator__ & operator=(const hash_generator__ &);
+    hash_generator__(const hash_generator__ &);
 public:
     int64_t hashed_bytes;
     /* This function takes advantage of the fact that different hash functions produce residues with different sizes */
-    hash_generator__():mdctx(),initialized(false),finalized(false),hashed_bytes(0){ }
+    hash_generator__():mdctx(NULL),initialized(false),finalized(false),hashed_bytes(0){ }
     ~hash_generator__(){
 	release();
     }
     void release(){			/* free allocated memory */
 	if(initialized){
-	    EVP_MD_CTX_cleanup(&mdctx);
+#ifdef HAVE_EVP_MD_CTX_FREE
+	    EVP_MD_CTX_free(mdctx);
+#else
+	    EVP_MD_CTX_destroy(mdctx);
+#endif
 	    initialized = false;
 	    hashed_bytes = 0;
 	}
     }
     void init(){
 	if(initialized==false){
-	    EVP_MD_CTX_init(&mdctx);
-	    EVP_DigestInit_ex(&mdctx, md(), NULL);
+#ifdef HAVE_EVP_MD_CTX_NEW
+	    mdctx = EVP_MD_CTX_new();
+#else
+	    mdctx = EVP_MD_CTX_create();
+#endif
+            if (!mdctx) throw std::bad_alloc();
+	    EVP_DigestInit_ex(mdctx, md(), NULL);
 	    initialized = true;
 	    finalized = false;
 	    hashed_bytes = 0;
@@ -228,21 +241,21 @@ public:
 	    std::cerr << "hashgen_t::update called after finalized\n";
 	    exit(1);
 	}
-	EVP_DigestUpdate(&mdctx,buf,bufsize);
+	EVP_DigestUpdate(mdctx,buf,bufsize);
 	hashed_bytes += bufsize;
     }
     hash__<md,SIZE> final() {
 	if(finalized){
 	  std::cerr << "currently friendly_geneator does not cache the final value\n";
 	  assert(0);
-	  /* code below will never be executed after assert(0) */
+          exit(1);                      // in case compiled with assertions disabled
 	}
 	if(!initialized){
 	  init();			/* do it now! */
 	}
 	hash__<md,SIZE> val;
 	unsigned int len = sizeof(val.digest);
-	EVP_DigestFinal(&mdctx,val.digest,&len);
+	EVP_DigestFinal(mdctx,val.digest,&len);
 	finalized = true;
 	return val;
     }