Blob Blame History Raw
diff --git a/imap/cyr_virusscan.c b/imap/cyr_virusscan.c
index 863a858..b6c8980 100644
--- a/imap/cyr_virusscan.c
+++ b/imap/cyr_virusscan.c
@@ -192,9 +192,19 @@ int clamav_scanfile(void *state, const char *fname,
     struct clamav_state *st = (struct clamav_state *) state;
     int r;
 
-    /* scan file */
+#ifndef CL_SCAN_ARCHIVE /* clamav >= 0.101 */
+    struct cl_scan_options options;
+    memset(&options, 0, sizeof(struct cl_scan_options));
+    options.parse |= ~0; /* enable all parsers */
+    options.general |= CL_SCAN_GENERAL_HEURISTICS; /* enable heuristic alert options */
+
+    r = cl_scanfile(fname, virname, NULL, st->av_engine,
+                    &options);
+
+#else
     r = cl_scanfile(fname, virname, NULL, st->av_engine,
                     CL_SCAN_STDOPT);
+#endif
 
     switch (r) {
     case CL_CLEAN: