]> granicus.if.org Git - nethack/commitdiff
Changes to get fuzzer working in NetHackW.
authorBart House <bart@barthouse.com>
Thu, 13 Dec 2018 05:46:14 +0000 (21:46 -0800)
committerBart House <bart@barthouse.com>
Thu, 13 Dec 2018 05:46:14 +0000 (21:46 -0800)
13 files changed:
include/extern.h
src/cmd.c
sys/winnt/windmain.c
win/win32/mhdlg.c
win/win32/mhmain.c
win/win32/mhmap.c
win/win32/mhmenu.c
win/win32/mhmsg.h
win/win32/mhmsgwnd.c
win/win32/mhrip.c
win/win32/mhstatus.c
win/win32/mhtext.c
win/win32/mswproc.c

index 81b792aa97c642d936e229eef6d6b329dd3a5405..c7fd71868fb4cf507fc2b27b88c334827d19da8d 100644 (file)
@@ -174,6 +174,7 @@ E boolean NDECL(status_hilite_menu);
 /* ### cmd.c ### */
 
 E char NDECL(randomkey);
+E void FDECL(random_response, (char * buf, int size));
 E int NDECL(doconduct);
 E int NDECL(domonability);
 E char FDECL(cmd_from_func, (int NDECL((*))));
index 67170cec7cb26ff7922ada93ac91205391fb489a..65bea30802f13410c99fc7fce018628368a73415 100644 (file)
--- a/src/cmd.c
+++ b/src/cmd.c
@@ -4421,6 +4421,27 @@ randomkey()
     return c;
 }
 
+void random_response(char * buf, int size)
+{
+       int count = 0;
+       while (1) {
+               char c = randomkey();
+
+               if (c == '\n')
+                       break;
+
+               if (c == '\033') {
+                       count = 0;
+                       break;
+               }
+
+               if (count < size)
+                       buf[count++] = c;
+       }
+
+       buf[count] = '\0';
+}
+
 int
 ch2spkeys(c, start, end)
 char c;
index d8b7c805699efec629048de7e07611a8fd87b143..15ae95d87af9f5b343c4bc1cc9db8506b470017e 100644 (file)
@@ -348,7 +348,10 @@ attempt_restore:
         if (discover)
             You("are in non-scoring discovery mode.");
     }
-    moveloop(resuming);
+
+       //      iflags.debug_fuzzer = TRUE;
+
+       moveloop(resuming);
     nethack_exit(EXIT_SUCCESS);
     /*NOTREACHED*/
     return 0;
index 6bc7d4eb3373182027569b39a4580a1988fc9b0c..8a158bee9eb7c58fa2fb86c7772d2021c299e2b8 100644 (file)
@@ -25,6 +25,14 @@ INT_PTR CALLBACK GetlinDlgProc(HWND, UINT, WPARAM, LPARAM);
 int
 mswin_getlin_window(const char *question, char *result, size_t result_size)
 {
+       if (iflags.debug_fuzzer) {
+               random_response(result, result_size);
+               if (result[0] != '\0')
+                       return IDOK;
+               else 
+                       return IDCANCEL;
+       }
+
     INT_PTR ret;
     struct getlin_data data;
 
index a71534703fe7e945f71c5c0f772cb3046e0926e3..a8742b03fe126a250cfe0df07a5d42b272deef51 100644 (file)
@@ -529,6 +529,11 @@ onMSNHCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
 
         child = GetNHApp()->windowlist[msg_param->wid].win;
     } break;
+
+       case MSNH_MSG_RANDOM_INPUT:
+               nhassert(0); // unexpected
+               break;
+
     }
 }
 
index b883cd7bdefd974972b5eda0c363a8916649cb4f..18bca2571439bddddcfacfa02b816372883a01b5 100644 (file)
@@ -722,7 +722,11 @@ onMSNHCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
         }
     } break;
 
-    } /* end switch(wParam) */
+       case MSNH_MSG_RANDOM_INPUT:
+               nhassert(0); // unexpected
+               break;
+
+       } /* end switch(wParam) */
 }
 
 /* on WM_CREATE */
index 5e38d0235017d4bc5dc204a26afb3f19b3b686c2..34fe28a1a9432d2a22d7bc620e1598fbe3fc042e 100644 (file)
@@ -687,6 +687,18 @@ onMSNHCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
             ZeroMemory(data->menu.prompt, sizeof(data->menu.prompt));
         }
     } break;
+
+       case MSNH_MSG_RANDOM_INPUT: {
+               char c = randomkey();
+               if (c == '\n')
+                       PostMessage(hWnd, WM_COMMAND, MAKELONG(IDOK, 0), 0);
+               else if (c == '\033')
+                       PostMessage(hWnd, WM_COMMAND, MAKELONG(IDCANCEL, 0), 0);
+               else
+                       PostMessage(GetDlgItem(hWnd, IDC_TEXT_CONTROL), WM_CHAR, c, 0);
+
+       } break;
+
     }
 }
 /*-----------------------------------------------------------------------------*/
index 7eb65d0c02e956cf4300988e41847f8401b4ecd2..4fd04af018a12d399beccbbc5def41b3db10486e 100644 (file)
@@ -21,6 +21,7 @@
 #define MSNH_MSG_CARET 110
 #define MSNH_MSG_GETTEXT 111
 #define MSNH_MSG_UPDATE_STATUS 112
+#define MSNH_MSG_RANDOM_INPUT 113
 
 typedef struct mswin_nhmsg_add_wnd {
     winid wid;
index 505b40f3636b6fc5ac1e9ddf9d7a64bbe6541b5b..58df28c636e4f4a7e3b3dcd15f2b033f59d892b9 100644 (file)
@@ -416,6 +416,10 @@ onMSNHCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
             }
     } break;
 
+       case MSNH_MSG_RANDOM_INPUT:
+               nhassert(0); // unexpected
+               break;
+
     } /* switch( wParam ) */
 }
 
index 79ad0534206b35bc280185424ab572c475836d79..f00004f0904d3f48112827fcfa8d4ab950a48c37 100644 (file)
@@ -282,6 +282,11 @@ onMSNHCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
         data->window_text = NULL;
         break;
     }
+
+       case MSNH_MSG_RANDOM_INPUT:
+               nhassert(0); // unexpected
+               break;
+
     }
 }
 
index d5bfda0929ac652d1d0e722799d1ab5d9d1ad98b..20b09f094cf8d5c91d2a08e54156cdcec6af951c 100644 (file)
@@ -219,6 +219,11 @@ StatusWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
             data->status_lines = msg_data->status_lines;
             InvalidateRect(hWnd, NULL, TRUE);
         } break;
+
+               case MSNH_MSG_RANDOM_INPUT:
+                       nhassert(0); // unexpected
+                       break;
+
         } /* end switch( wParam ) { */
     } break;
 
index 8c1c2b32fb728dc8a9a9729d738178b8aff46ee2..14092d52f81d2b020811f713896d5bc523309002 100644 (file)
@@ -212,6 +212,19 @@ onMSNHCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
         _tcscat(data->window_text, TEXT("\r\n"));
         break;
     }
+
+       case MSNH_MSG_RANDOM_INPUT: {
+               char c = randomkey();
+               if (c == '\n')
+                       PostMessage(hWnd, WM_COMMAND, MAKELONG(IDOK, 0), 0);
+               else if (c == '\033')
+                       PostMessage(hWnd, WM_COMMAND, MAKELONG(IDCANCEL, 0), 0);
+               else
+                       PostMessage(GetDlgItem(hWnd, IDC_TEXT_CONTROL), WM_CHAR, c, 0);
+
+       }
+       break;
+
     }
 }
 
index 85f4277252f68ce031ed5abb750964df215ed6c3..0a6cde13d75aa78b64732d6afb741c0b1fe72642 100644 (file)
@@ -2102,14 +2102,24 @@ mswin_main_loop()
 {
     MSG msg;
 
-    while (!mswin_have_input() && GetMessage(&msg, NULL, 0, 0) != 0) {
-        if (GetNHApp()->regNetHackMode
-            || !TranslateAccelerator(msg.hwnd, GetNHApp()->hAccelTable,
-                                     &msg)) {
-            TranslateMessage(&msg);
-            DispatchMessage(&msg);
-        }
-    }
+       while (!mswin_have_input()) {
+               if (!iflags.debug_fuzzer || PeekMessage(&msg, NULL, 0, 0, FALSE)) {
+                       if(GetMessage(&msg, NULL, 0, 0) != 0) {
+                               if (GetNHApp()->regNetHackMode
+                                       || !TranslateAccelerator(msg.hwnd, GetNHApp()->hAccelTable,
+                                                                                        &msg)) {
+                                       TranslateMessage(&msg);
+                                       DispatchMessage(&msg);
+                               }
+                       } else {
+                               /* WM_QUIT */
+                               break;
+                       }
+               } else {
+                       nhassert(iflags.debug_fuzzer);
+                       NHEVENT_KBD(randomkey());
+               }
+       }
 }
 
 /* clean up and quit */
@@ -2222,16 +2232,25 @@ mswin_popup_display(HWND hWnd, int *done_indicator)
     SetFocus(hWnd);
 
     /* go into message loop */
-    while (IsWindow(hWnd) && (done_indicator == NULL || !*done_indicator)
-           && GetMessage(&msg, NULL, 0, 0) != 0) {
-        if (!IsDialogMessage(hWnd, &msg)) {
-            if (!TranslateAccelerator(msg.hwnd, GetNHApp()->hAccelTable,
-                                      &msg)) {
-                TranslateMessage(&msg);
-                DispatchMessage(&msg);
-            }
-        }
-    }
+       while (IsWindow(hWnd) && (done_indicator == NULL || !*done_indicator)) {
+               if (!iflags.debug_fuzzer || PeekMessage(&msg, NULL, 0, 0, FALSE)) {
+                       if(GetMessage(&msg, NULL, 0, 0) != 0) {
+                               if (!IsDialogMessage(hWnd, &msg)) {
+                                       if (!TranslateAccelerator(msg.hwnd, GetNHApp()->hAccelTable,
+                                                                                         &msg)) {
+                                               TranslateMessage(&msg);
+                                               DispatchMessage(&msg);
+                                       }
+                               }
+                       } else {
+                               /* WM_QUIT */
+                               break;
+                       }
+               } else {
+                       nhassert(iflags.debug_fuzzer);
+                       PostMessage(hWnd, WM_MSNH_COMMAND, MSNH_MSG_RANDOM_INPUT, 0);
+               }
+       }
 }
 
 void