Evas/cserve2: Fix crash during shutdown

If an image failed to load, and cserve2 returned an error message,
then the File_Entry was freed, but not removed from the hash.
Solution: remove entry from the hash, let the callback free the data.
This commit is contained in:
Jean-Philippe Andre 2013-12-09 17:48:32 +09:00
parent ce166ec223
commit b10dcb5c23
1 changed files with 5 additions and 10 deletions

View File

@ -690,8 +690,9 @@ _image_opened_cb(void *data, const void *msg_received, int size)
}
ie->open_rid = 0;
if (answer->type != CSERVE2_OPENED)
if ((answer->type != CSERVE2_OPENED) || (size < (int) sizeof(*msg)))
{
File_Entry *fentry = ie->data1;
if (answer->type == CSERVE2_ERROR)
{
const Msg_Error *msg_error = msg_received;
@ -700,15 +701,9 @@ _image_opened_cb(void *data, const void *msg_received, int size)
}
else
ERR("Invalid message type received: %d (%s)", answer->type, __FUNCTION__);
free(ie->data1);
ie->data1 = NULL;
return EINA_TRUE;
}
else if (size < (int) sizeof(*msg))
{
ERR("Received message is too small");
free(ie->data1);
ie->data1 = NULL;
fentry = ie->data1;
EINA_REFCOUNT_UNREF(fentry)
eina_hash_del(_file_entries, fentry->hkey, fentry);
return EINA_TRUE;
}