services/voice_endpoint: Fix voice crash from invalid session setup

Signed-off-by: Joshua Jun <joshuajun@proton.me>
This commit is contained in:
Joshua Jun 2025-11-13 19:48:56 +01:00 committed by Jinchang
parent 4051c5bb97
commit bdd8dad951
1 changed files with 10 additions and 1 deletions

View File

@ -145,8 +145,17 @@ void voice_endpoint_protocol_msg_callback(CommSession *session, const uint8_t* d
case MsgIdSessionSetup: { case MsgIdSessionSetup: {
if (size >= sizeof(SessionSetupResultMsg)) { if (size >= sizeof(SessionSetupResultMsg)) {
SessionSetupResultMsg *msg = (SessionSetupResultMsg *) data; SessionSetupResultMsg *msg = (SessionSetupResultMsg *) data;
// Validate result enum value to prevent crashes from invalid values
VoiceEndpointResult result = msg->result;
if (result > VoiceEndpointResultFailInvalidMessage) {
PBL_LOG(LOG_LEVEL_ERROR, "Invalid VoiceEndpointResult value: %d, treating as invalid message",
(int)result);
result = VoiceEndpointResultFailInvalidMessage;
}
bool app_initiated = (msg->flags.app_initiated == 1); bool app_initiated = (msg->flags.app_initiated == 1);
voice_handle_session_setup_result(msg->result, msg->session_type, app_initiated); voice_handle_session_setup_result(result, msg->session_type, app_initiated);
} else { } else {
PBL_LOG(LOG_LEVEL_WARNING, "Invalid size for session setup result message"); PBL_LOG(LOG_LEVEL_WARNING, "Invalid size for session setup result message");
} }