]> Nishi Git Mirror - gwion.git/commitdiff
:art: Get afl back
authorfennecdjay <fennecdjay@gmail.com>
Wed, 16 Nov 2022 18:34:25 +0000 (19:34 +0100)
committerfennecdjay <fennecdjay@gmail.com>
Wed, 16 Nov 2022 18:34:25 +0000 (19:34 +0100)
Makefile
src/main.c
src/vm/vm.c

index accc51a497a1bba46b414102119e92d72fcc5a94..a7262be0aeb230f36c0989af4d4e3e6c919d234e 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -69,9 +69,9 @@ CFLAGS += -Wno-pedantic
 
 CFLAGS += -DGWION_BUILTIN
 
-all: options-show ${PRG}
+all: options-show prg
 
-${PRG}: ${GWLIBS} src/main.o
+prg: ${GWLIBS} src/main.o
        @$(info link ${PRG})
        @${CC} src/main.o -o ${PRG} ${LDFLAGS} ${LIBS}
 
@@ -109,9 +109,9 @@ ast: ast/libgwion_ast.a
 afl: gwion-fuzz
 
 gwion-fuzz:
-       @touch src/parse/{scan*.c,check.c} src/emit/emit.c src/main.c
+       @touch src/parse/{scan*.c,check.c} src/emit/emit.c src/main.c src/vm/vm.c
        @+PRG=gwion-fuzz CC=afl-clang-fast CFLAGS=-D__FUZZING__ ${MAKE}
-       @touch src/parse/{scan*.c,check.c} src/emit/emit.c src/main.c
+       @touch src/parse/{scan*.c,check.c} src/emit/emit.c src/main.c src/vm/vm.c
 
 clean_core:
        @rm -f core.* *vgcore.*
index 0a78f51e5519576e77a2f8e92a1edce7e78ad378..d8abd6efd9554581a00bccc89047fe546cc95a68 100644 (file)
@@ -20,13 +20,16 @@ static void sig(int unused NUSED) {
 #include "compile.h"
 
 static void afl_run(const Gwion gwion) {
+  const Env env = gwion->env;
   __AFL_INIT();
-//  while (__AFL_LOOP(128)) {
-  while (__AFL_LOOP(32)) {
-    push_global(gwion, "[afl]");
+  while (__AFL_LOOP(128)) {
+    const Nspc nspc = env->global_nspc;
+    env->curr = env->global_nspc = new_nspc(gwion->mp, "[afl]");
+    env->global_nspc->parent = nspc;
     FILE *f = fdopen(0, "r");
     if (compile_file(gwion, "afl", f)) gwion_run(gwion);
-    pop_global(gwion);
+    free_nspc(env->global_nspc, env->gwion);
+    env->curr = env->global_nspc = nspc;
   }
 }
 
index 9386740e9fc957a99abc4e3127a531cc22fa9357..c00a8efc86a7a12fc16417550e548c4228e2222c 100644 (file)
@@ -606,7 +606,12 @@ vm_prepare(const VM *vm, m_bit *prepare_code) { // lgtm [cpp/use-of-goto]
       reg += SZ_INT;
       DISPATCH()
     regpushmaybe:
+
+#ifndef __AFL_HAVE_MANUAL_CONTROL
       *(m_uint *)reg = gw_rand((uint32_t *)vm->rand) > (UINT32_MAX / 2);
+#else
+      *(m_uint *)reg = 0;
+#endif
       reg += SZ_INT;
       DISPATCH();
     funcreturn : {