From 194a7cc5e417c76e2d83a6928d47adcea916289c Mon Sep 17 00:00:00 2001 From: Vladimir Mezentsev Date: Tue, 26 Nov 2024 19:40:16 -0800 Subject: gprofng: skip unrecognized input command gprofng crashes when the GUI sends an invalid command. Skip unrecognized commands and return an error status to the GUI. gprofng/ChangeLog 2024-11-26 Vladimir Mezentsev * src/ipc.cc (ipc_doWork): Skip unrecognized commands. * src/ipcio.cc (writeError): New function. * src/ipcio.h: Add RESPONSE_STATUS_ERROR. --- gprofng/src/ipc.cc | 6 ++++-- gprofng/src/ipcio.cc | 10 ++++++++++ gprofng/src/ipcio.h | 5 ++++- 3 files changed, 18 insertions(+), 3 deletions(-) (limited to 'gprofng/src') diff --git a/gprofng/src/ipc.cc b/gprofng/src/ipc.cc index 3e706db..feda1f8 100644 --- a/gprofng/src/ipc.cc +++ b/gprofng/src/ipc.cc @@ -2534,8 +2534,10 @@ ipc_doWork (void *arg) } else { - ipc_log ("Unrecognized input cmd \"%s\"; Aborting.\n", inp); - return 1; + char *s = dbe_sprintf ("Unrecognized request: \"%s\"", inp); + ipc_log ("%s\n", s); + writeError (s, req); + free (s); } ipc_log (" processing IPC command %s complete\n", inp); free (inp); diff --git a/gprofng/src/ipcio.cc b/gprofng/src/ipcio.cc index 8ff16d5..c20a22f 100644 --- a/gprofng/src/ipcio.cc +++ b/gprofng/src/ipcio.cc @@ -777,6 +777,16 @@ writeString (const char *s, IPCrequest* req) } void +writeError (const char *s, IPCrequest* req) +{ + IPCresponse *OUTS = responseBufferPool->getNewResponse (BUFFER_SIZE_LARGE); + OUTS->sendByte (L_STRING); + OUTS->sendSVal (s); + writeResponseWithHeader (req->getRequestID (), req->getChannelID (), + RESPONSE_TYPE_COMPLETE, RESPONSE_STATUS_ERROR, OUTS); +} + +void writeObject (DbeObj obj, IPCrequest* req) { writeLong ((long long) obj, req); diff --git a/gprofng/src/ipcio.h b/gprofng/src/ipcio.h index 23c35fc..7cef743 100644 --- a/gprofng/src/ipcio.h +++ b/gprofng/src/ipcio.h @@ -40,6 +40,7 @@ typedef char *String; #define RESPONSE_STATUS_SUCCESS 1 #define RESPONSE_STATUS_FAILURE 2 #define RESPONSE_STATUS_CANCELLED 3 +#define RESPONSE_STATUS_ERROR 4 #define RESPONSE_TYPE_ACK 0 #define RESPONSE_TYPE_PROGRESS 1 @@ -60,7 +61,8 @@ enum IPCrequestStatus IN_PROGRESS, COMPLETED, CANCELLED_DEFAULT, - CANCELLED_IMMEDIATE + CANCELLED_IMMEDIATE, + UNDEFINED_REGUEST }; enum IPCTraceLevel @@ -151,6 +153,7 @@ String readString (IPCrequest*); void readRequestHeader (); // write to the wire +void writeError (const char *, IPCrequest*); void writeString (const char *, IPCrequest*); void writeBoolean (bool, IPCrequest*); void writeInt (int, IPCrequest*); -- cgit v1.1