mirror of https://github.com/GNOME/gimp.git
made the code more robust against errors on the wire protocol level.
2007-12-11 Sven Neumann <sven@gimp.org> * libgimpbase/gimpprotocol.c: made the code more robust against errors on the wire protocol level. * app/plug-in/gimpplugin-message.c: added sanity checks to message handlers. This doesn't keep us from crashing on invalid input, but we will at least get some warnings before that happens. svn path=/trunk/; revision=24317
This commit is contained in:
parent
a23029a05f
commit
cc44a68902
15
ChangeLog
15
ChangeLog
|
@ -1,3 +1,18 @@
|
|||
2007-12-11 Sven Neumann <sven@gimp.org>
|
||||
|
||||
* app/plug-in/gimpplugin-message.c: added sanity checks to message
|
||||
handlers. This doesn't keep us from crashing on invalid input, but
|
||||
we will at least get some warnings before that happens.
|
||||
|
||||
* libgimpbase/gimpprotocol.c: made the code more robust against
|
||||
errors on the wire protocol level.
|
||||
|
||||
2007-12-11 Sven Neumann <sven@gimp.org>
|
||||
|
||||
* libgimpbase/gimpwire.c (_gimp_wire_read_string): use g_try_new()
|
||||
so a plug-in can't easily crash the core by sending an invalid
|
||||
string message.
|
||||
|
||||
2007-12-11 Sven Neumann <sven@gimp.org>
|
||||
|
||||
* libgimpbase/gimpwire.c (_gimp_wire_read_string): use g_try_new()
|
||||
|
|
|
@ -175,6 +175,8 @@ gimp_plug_in_handle_tile_req (GimpPlugIn *plug_in,
|
|||
TileManager *tm;
|
||||
Tile *tile;
|
||||
|
||||
g_return_if_fail (tile_req != NULL);
|
||||
|
||||
if (tile_req->drawable_ID == -1)
|
||||
{
|
||||
/* this branch communicates with libgimp/gimptile.c:gimp_tile_put() */
|
||||
|
@ -359,6 +361,9 @@ gimp_plug_in_handle_proc_run (GimpPlugIn *plug_in,
|
|||
GValueArray *return_vals = NULL;
|
||||
GError *error = NULL;
|
||||
|
||||
g_return_if_fail (proc_run != NULL);
|
||||
g_return_if_fail (proc_run->name != NULL);
|
||||
|
||||
canonical = gimp_canonicalize_identifier (proc_run->name);
|
||||
|
||||
proc_frame = gimp_plug_in_get_proc_frame (plug_in);
|
||||
|
@ -485,6 +490,8 @@ gimp_plug_in_handle_proc_return (GimpPlugIn *plug_in,
|
|||
{
|
||||
GimpPlugInProcFrame *proc_frame = &plug_in->main_proc_frame;
|
||||
|
||||
g_return_if_fail (proc_return != NULL);
|
||||
|
||||
if (proc_frame->main_loop)
|
||||
{
|
||||
proc_frame->return_vals =
|
||||
|
@ -504,6 +511,8 @@ static void
|
|||
gimp_plug_in_handle_temp_proc_return (GimpPlugIn *plug_in,
|
||||
GPProcReturn *proc_return)
|
||||
{
|
||||
g_return_if_fail (proc_return != NULL);
|
||||
|
||||
if (plug_in->temp_proc_frames)
|
||||
{
|
||||
GimpPlugInProcFrame *proc_frame = plug_in->temp_proc_frames->data;
|
||||
|
@ -540,6 +549,9 @@ gimp_plug_in_handle_proc_install (GimpPlugIn *plug_in,
|
|||
gboolean valid_utf8 = FALSE;
|
||||
gint i;
|
||||
|
||||
g_return_if_fail (proc_install != NULL);
|
||||
g_return_if_fail (proc_install->name != NULL);
|
||||
|
||||
canonical = gimp_canonicalize_identifier (proc_install->name);
|
||||
|
||||
/* Sanity check for array arguments */
|
||||
|
@ -713,6 +725,9 @@ gimp_plug_in_handle_proc_uninstall (GimpPlugIn *plug_in,
|
|||
GimpPlugInProcedure *proc;
|
||||
gchar *canonical;
|
||||
|
||||
g_return_if_fail (proc_uninstall != NULL);
|
||||
g_return_if_fail (proc_uninstall->name != NULL);
|
||||
|
||||
canonical = gimp_canonicalize_identifier (proc_uninstall->name);
|
||||
|
||||
proc = gimp_plug_in_procedure_find (plug_in->temp_procedures, canonical);
|
||||
|
|
|
@ -640,10 +640,13 @@ _gp_config_destroy (GimpWireMessage *msg)
|
|||
{
|
||||
GPConfig *config = msg->data;
|
||||
|
||||
if (config)
|
||||
{
|
||||
g_free (config->app_name);
|
||||
g_free (config->wm_class);
|
||||
g_free (config->display_name);
|
||||
g_slice_free (GPConfig, config);
|
||||
}
|
||||
}
|
||||
|
||||
/* tile_req */
|
||||
|
@ -671,6 +674,7 @@ _gp_tile_req_read (GIOChannel *channel,
|
|||
|
||||
cleanup:
|
||||
g_slice_free (GPTileReq, tile_req);
|
||||
msg->data = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -695,6 +699,9 @@ _gp_tile_req_write (GIOChannel *channel,
|
|||
static void
|
||||
_gp_tile_req_destroy (GimpWireMessage *msg)
|
||||
{
|
||||
GPTileReq *tile_req = msg->data;
|
||||
|
||||
if (tile_req)
|
||||
g_slice_free (GPTileReq, msg->data);
|
||||
}
|
||||
|
||||
|
@ -769,6 +776,7 @@ _gp_tile_data_read (GIOChannel *channel,
|
|||
cleanup:
|
||||
g_free (tile_data->data);
|
||||
g_slice_free (GPTileData, tile_data);
|
||||
msg->data = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -817,8 +825,11 @@ _gp_tile_data_destroy (GimpWireMessage *msg)
|
|||
{
|
||||
GPTileData *tile_data = msg->data;
|
||||
|
||||
if (tile_data)
|
||||
{
|
||||
g_free (tile_data->data);
|
||||
g_slice_free (GPTileData, tile_data);
|
||||
}
|
||||
}
|
||||
|
||||
/* proc_run */
|
||||
|
@ -842,6 +853,7 @@ _gp_proc_run_read (GIOChannel *channel,
|
|||
|
||||
cleanup:
|
||||
g_slice_free (GPProcRun, proc_run);
|
||||
msg->data = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -862,10 +874,13 @@ _gp_proc_run_destroy (GimpWireMessage *msg)
|
|||
{
|
||||
GPProcRun *proc_run = msg->data;
|
||||
|
||||
if (proc_run)
|
||||
{
|
||||
gp_params_destroy (proc_run->params, proc_run->nparams);
|
||||
|
||||
g_free (proc_run->name);
|
||||
g_slice_free (GPProcRun, proc_run);
|
||||
}
|
||||
}
|
||||
|
||||
/* proc_return */
|
||||
|
@ -889,6 +904,7 @@ _gp_proc_return_read (GIOChannel *channel,
|
|||
|
||||
cleanup:
|
||||
g_slice_free (GPProcReturn, proc_return);
|
||||
msg->data = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -910,10 +926,13 @@ _gp_proc_return_destroy (GimpWireMessage *msg)
|
|||
{
|
||||
GPProcReturn *proc_return = msg->data;
|
||||
|
||||
if (proc_return)
|
||||
{
|
||||
gp_params_destroy (proc_return->params, proc_return->nparams);
|
||||
|
||||
g_free (proc_return->name);
|
||||
g_slice_free (GPProcReturn, proc_return);
|
||||
}
|
||||
}
|
||||
|
||||
/* temp_proc_run */
|
||||
|
@ -1087,6 +1106,7 @@ _gp_proc_install_read (GIOChannel *channel,
|
|||
}
|
||||
|
||||
g_slice_free (GPProcInstall, proc_install);
|
||||
msg->data = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1169,6 +1189,9 @@ static void
|
|||
_gp_proc_install_destroy (GimpWireMessage *msg)
|
||||
{
|
||||
GPProcInstall *proc_install = msg->data;
|
||||
|
||||
if (proc_install)
|
||||
{
|
||||
gint i;
|
||||
|
||||
g_free (proc_install->name);
|
||||
|
@ -1195,6 +1218,7 @@ _gp_proc_install_destroy (GimpWireMessage *msg)
|
|||
g_free (proc_install->params);
|
||||
g_free (proc_install->return_vals);
|
||||
g_slice_free (GPProcInstall, proc_install);
|
||||
}
|
||||
}
|
||||
|
||||
/* proc_uninstall */
|
||||
|
@ -1232,8 +1256,11 @@ _gp_proc_uninstall_destroy (GimpWireMessage *msg)
|
|||
{
|
||||
GPProcUninstall *proc_uninstall = msg->data;
|
||||
|
||||
if (proc_uninstall)
|
||||
{
|
||||
g_free (proc_uninstall->name);
|
||||
g_slice_free (GPProcUninstall, proc_uninstall);
|
||||
}
|
||||
}
|
||||
|
||||
/* extension_ack */
|
||||
|
|
Loading…
Reference in New Issue