server: Return an error for invalid requests instead of killing the client process.
diff --git a/server/request.c b/server/request.c
index c1a32f1..c6b4472 100644
--- a/server/request.c
+++ b/server/request.c
@@ -52,9 +52,12 @@
#include <poll.h>
#endif
+#include "ntstatus.h"
+#define WIN32_NO_STATUS
#include "windef.h"
#include "winbase.h"
#include "wincon.h"
+#include "winternl.h"
#include "wine/library.h"
#include "file.h"
@@ -277,23 +280,22 @@
if (debug_level) trace_request();
if (req < REQ_NB_REQUESTS)
- {
req_handlers[req]( ¤t->req, &reply );
- if (current)
+ else
+ set_error( STATUS_NOT_IMPLEMENTED );
+
+ if (current)
+ {
+ if (current->reply_fd)
{
- if (current->reply_fd)
- {
- reply.reply_header.error = current->error;
- reply.reply_header.reply_size = current->reply_size;
- if (debug_level) trace_reply( req, &reply );
- send_reply( &reply );
- }
- else fatal_protocol_error( current, "no reply fd for request %d\n", req );
+ reply.reply_header.error = current->error;
+ reply.reply_header.reply_size = current->reply_size;
+ if (debug_level) trace_reply( req, &reply );
+ send_reply( &reply );
}
- current = NULL;
- return;
+ else fatal_protocol_error( current, "no reply fd for request %d\n", req );
}
- fatal_protocol_error( current, "bad request %d\n", req );
+ current = NULL;
}
/* read a request from a thread */