shell-network-agent: don't crash if a request isn't found
If a request isn't found in shell_network_agent_set_password() or shell_network_agent_respond(), then g_return_if_fail() rather than crashing. OTOH, if a request is not found in shell_network_agent_cancel_get_secrets(), then just ignore it silently, since that could legitimately happen. https://bugzilla.gnome.org/show_bug.cgi?id=674961
This commit is contained in:
parent
988fc52303
commit
8befcb9bba
@ -409,6 +409,7 @@ shell_network_agent_set_password (ShellNetworkAgent *self,
|
|||||||
|
|
||||||
priv = self->priv;
|
priv = self->priv;
|
||||||
request = g_hash_table_lookup (priv->requests, request_id);
|
request = g_hash_table_lookup (priv->requests, request_id);
|
||||||
|
g_return_if_fail (request != NULL);
|
||||||
|
|
||||||
if (!request->is_vpn)
|
if (!request->is_vpn)
|
||||||
{
|
{
|
||||||
@ -438,6 +439,7 @@ shell_network_agent_respond (ShellNetworkAgent *self,
|
|||||||
|
|
||||||
priv = self->priv;
|
priv = self->priv;
|
||||||
request = g_hash_table_lookup (priv->requests, request_id);
|
request = g_hash_table_lookup (priv->requests, request_id);
|
||||||
|
g_return_if_fail (request != NULL);
|
||||||
|
|
||||||
if (response == SHELL_NETWORK_AGENT_USER_CANCELED)
|
if (response == SHELL_NETWORK_AGENT_USER_CANCELED)
|
||||||
{
|
{
|
||||||
@ -491,10 +493,20 @@ shell_network_agent_cancel_get_secrets (NMSecretAgent *agent,
|
|||||||
|
|
||||||
gchar *request_id = g_strdup_printf ("%s/%s", connection_path, setting_name);
|
gchar *request_id = g_strdup_printf ("%s/%s", connection_path, setting_name);
|
||||||
ShellAgentRequest *request = g_hash_table_lookup (priv->requests, request_id);
|
ShellAgentRequest *request = g_hash_table_lookup (priv->requests, request_id);
|
||||||
|
GError *error;
|
||||||
|
|
||||||
GError *error = g_error_new (NM_SECRET_AGENT_ERROR,
|
if (!request)
|
||||||
NM_SECRET_AGENT_ERROR_AGENT_CANCELED,
|
{
|
||||||
"Canceled by NetworkManager");
|
/* We've already sent the result, but the caller cancelled the
|
||||||
|
* operation before receiving that result.
|
||||||
|
*/
|
||||||
|
g_free (request_id);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
error = g_error_new (NM_SECRET_AGENT_ERROR,
|
||||||
|
NM_SECRET_AGENT_ERROR_AGENT_CANCELED,
|
||||||
|
"Canceled by NetworkManager");
|
||||||
request->callback (agent, request->connection, NULL, error, request->callback_data);
|
request->callback (agent, request->connection, NULL, error, request->callback_data);
|
||||||
|
|
||||||
g_signal_emit (self, signals[SIGNAL_CANCEL_REQUEST], 0, request_id);
|
g_signal_emit (self, signals[SIGNAL_CANCEL_REQUEST], 0, request_id);
|
||||||
|
Loading…
Reference in New Issue
Block a user