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 <vladimir.mezentsev@oracle.com>
* src/ipc.cc (ipc_doWork): Skip unrecognized commands.
* src/ipcio.cc (writeError): New function.
* src/ipcio.h: Add RESPONSE_STATUS_ERROR.
}
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);
RESPONSE_TYPE_COMPLETE, RESPONSE_STATUS_SUCCESS, OUTS);
}
+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)
{
#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
IN_PROGRESS,
COMPLETED,
CANCELLED_DEFAULT,
- CANCELLED_IMMEDIATE
+ CANCELLED_IMMEDIATE,
+ UNDEFINED_REGUEST
};
enum IPCTraceLevel
void readRequestHeader ();
// write to the wire
+void writeError (const char *, IPCrequest*);
void writeString (const char *, IPCrequest*);
void writeBoolean (bool, IPCrequest*);
void writeInt (int, IPCrequest*);