--- src/ne_md5.c
+++ src/ne_md5.c
@@ -472,8 +472,10 @@
 	  sum += n;
 	}
       while (sum < BLOCKSIZE && n != 0);
-      if (n == 0 && ferror (stream))
+      if (n == 0 && ferror (stream)) {
+        ne_md5_destroy_ctx (ctx);
         return 1;
+      }
 
       /* If end of file is reached, end the loop.  */
       if (n == 0)