]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
file: update loops to account for parallel files 2705/head
authorVictor Julien <victor@inliniac.net>
Mon, 6 Feb 2017 08:46:08 +0000 (09:46 +0100)
committerVictor Julien <victor@inliniac.net>
Thu, 11 May 2017 09:39:34 +0000 (11:39 +0200)
src/detect-engine-file.c
src/util-file.c

index 8abb017ce642b7c5ee39a3b9c795853d092f41a2..fba9edcc02d17556ae9c39b2139ec1a8a3a43880 100644 (file)
@@ -106,44 +106,44 @@ static int DetectFileInspect(ThreadVars *tv, DetectEngineThreadCtx *det_ctx,
             if ((s->file_flags & FILE_SIG_NEED_FILENAME) && file->name == NULL) {
                 SCLogDebug("sig needs filename, but we don't have any");
                 r = DETECT_ENGINE_INSPECT_SIG_NO_MATCH;
-                break;
+                continue;
             }
 
             uint64_t file_size = FileDataSize(file);
             if ((s->file_flags & FILE_SIG_NEED_MAGIC) && file_size == 0) {
                 SCLogDebug("sig needs file content, but we don't have any");
                 r = DETECT_ENGINE_INSPECT_SIG_NO_MATCH;
-                break;
+                continue;
             }
 
             if ((s->file_flags & FILE_SIG_NEED_FILECONTENT) && file_size == 0) {
                 SCLogDebug("sig needs file content, but we don't have any");
                 r = DETECT_ENGINE_INSPECT_SIG_NO_MATCH;
-                break;
+                continue;
             }
 
             if ((s->file_flags & FILE_SIG_NEED_MD5) && (!(file->flags & FILE_MD5))) {
                 SCLogDebug("sig needs file md5, but we don't have any");
                 r = DETECT_ENGINE_INSPECT_SIG_NO_MATCH;
-                break;
+                continue;
             }
 
             if ((s->file_flags & FILE_SIG_NEED_SHA1) && (!(file->flags & FILE_SHA1))) {
                 SCLogDebug("sig needs file sha1, but we don't have any");
                 r = DETECT_ENGINE_INSPECT_SIG_NO_MATCH;
-                break;
+                continue;
             }
 
             if ((s->file_flags & FILE_SIG_NEED_SHA256) && (!(file->flags & FILE_SHA256))) {
                 SCLogDebug("sig needs file sha256, but we don't have any");
                 r = DETECT_ENGINE_INSPECT_SIG_NO_MATCH;
-                break;
+                continue;
             }
 
             if ((s->file_flags & FILE_SIG_NEED_SIZE) && file->state < FILE_STATE_CLOSED) {
                 SCLogDebug("sig needs filesize, but state < FILE_STATE_CLOSED");
                 r = DETECT_ENGINE_INSPECT_SIG_NO_MATCH;
-                break;
+                continue;
             }
 
             /* run the file match functions. */
index 774ba6fcf58e696ea951a186d52374435bbea7ec..6f9fdf0185d9438b274981ea6febac225684f18d 100644 (file)
@@ -345,8 +345,10 @@ void FilePrune(FileContainer *ffc)
     File *file = ffc->head;
 
     while (file) {
-        if (FilePruneFile(file) == 0)
-            break;
+        if (FilePruneFile(file) == 0) {
+            file = file->next;
+            continue;
+        }
 
         BUG_ON(file != ffc->head);