about summary refs log tree commit diff
path: root/src/afl-fuzz.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/afl-fuzz.c')
-rw-r--r--src/afl-fuzz.c40
1 files changed, 30 insertions, 10 deletions
diff --git a/src/afl-fuzz.c b/src/afl-fuzz.c
index 90c255e3..c8cc7da6 100644
--- a/src/afl-fuzz.c
+++ b/src/afl-fuzz.c
@@ -2707,22 +2707,42 @@ int main(int argc, char **argv_orig, char **envp) {
 
       if (likely(!afl->old_seed_selection)) {
 
-        if (unlikely(prev_queued_items < afl->queued_items ||
-                     afl->reinit_table)) {
+        if (likely(afl->pending_favored)) {
 
-          // we have new queue entries since the last run, recreate alias table
-          prev_queued_items = afl->queued_items;
-          create_alias_table(afl);
+          for (u32 iter = 0; iter < afl->queued_items; ++iter) {
 
-        }
+            if (unlikely(afl->queue_buf[iter]->favored &&
+                !afl->queue_buf[iter]->was_fuzzed)) {
 
-        do {
+              afl->current_entry = iter;
+              afl->queue_cur = afl->queue_buf[afl->current_entry];
+              break;
 
-          afl->current_entry = select_next_queue_entry(afl);
+            }
 
-        } while (unlikely(afl->current_entry >= afl->queued_items));
+          }
 
-        afl->queue_cur = afl->queue_buf[afl->current_entry];
+        } else {
+
+          if (unlikely(prev_queued_items < afl->queued_items ||
+                       afl->reinit_table)) {
+
+            // we have new queue entries since the last run, recreate alias
+            // table
+            prev_queued_items = afl->queued_items;
+            create_alias_table(afl);
+
+          }
+
+          do {
+
+            afl->current_entry = select_next_queue_entry(afl);
+
+          } while (unlikely(afl->current_entry >= afl->queued_items));
+
+          afl->queue_cur = afl->queue_buf[afl->current_entry];
+
+        }
 
       }