diff --git a/ChangeLog b/ChangeLog index 3917ae1c56..2ba08fa297 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,7 @@ * eina_magic_fail() now throws error messages on NULL pointers instead of critical * all efl object-freeing functions now take NULL without crashing or erroring + * eio functions no longer crash when passed NULL and throw errors accordingly 2012-12-19 Gustavo Sverzut Barbieri (k-s) diff --git a/NEWS b/NEWS index a539c32253..8aa4acfd7a 100644 --- a/NEWS +++ b/NEWS @@ -88,3 +88,4 @@ Fixes: * Fix many memory problems with ecore_evas_extn. * Fix Evas RGBA_Image->flags.loaded for copied images. * Fix evas_object_image_is_inside() + * eio functions no longer crash when passed NULL and throw errors accordingly diff --git a/src/lib/eio/eio_file.c b/src/lib/eio/eio_file.c index 431d088e69..a7a8457deb 100644 --- a/src/lib/eio/eio_file.c +++ b/src/lib/eio/eio_file.c @@ -870,6 +870,8 @@ eio_file_associate_add(Eio_File *ls, const char *key, const void *data, Eina_Free_Cb free_cb) { + EINA_SAFETY_ON_NULL_RETURN_VAL(ls, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE); /* FIXME: Check if we are in the right worker thred */ if (!ls->worker.associated) ls->worker.associated = eina_hash_string_small_new(eio_associate_free); @@ -884,6 +886,8 @@ eio_file_associate_direct_add(Eio_File *ls, const char *key, const void *data, Eina_Free_Cb free_cb) { + EINA_SAFETY_ON_NULL_RETURN_VAL(ls, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE); /* FIXME: Check if we are in the right worker thred */ if (!ls->worker.associated) ls->worker.associated = eina_hash_string_small_new(eio_associate_free); @@ -898,6 +902,8 @@ eio_file_associate_find(Eio_File *ls, const char *key) { Eio_File_Associate *search; + EINA_SAFETY_ON_NULL_RETURN_VAL(ls, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(key, NULL); if (!ls->main.associated) return NULL; diff --git a/src/lib/eio/eio_monitor.c b/src/lib/eio/eio_monitor.c index 36c8b1d8f2..3a6d9c91e2 100644 --- a/src/lib/eio/eio_monitor.c +++ b/src/lib/eio/eio_monitor.c @@ -266,6 +266,7 @@ eio_monitor_add(const char *path) const char *tmp; Eio_Monitor *ret; + EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL); tmp = eina_stringshare_add(path); ret = eio_monitor_stringshared_add(tmp); eina_stringshare_del(tmp); @@ -278,6 +279,7 @@ eio_monitor_stringshared_add(const char *path) Eio_Monitor *monitor; struct stat st; + EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL); if (_monitor_pid == -1) return NULL; if (_monitor_pid != getpid()) diff --git a/src/lib/eio/eio_single.c b/src/lib/eio/eio_single.c index d80dd840e6..179f8be2ea 100644 --- a/src/lib/eio/eio_single.c +++ b/src/lib/eio/eio_single.c @@ -417,8 +417,9 @@ eio_file_direct_stat(const char *path, { Eio_File_Stat *s = NULL; - if (!path || !done_cb || !error_cb) - return NULL; + EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(done_cb, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(error_cb, NULL); s = malloc(sizeof (Eio_File_Stat)); if (!s) return NULL; @@ -449,8 +450,9 @@ eio_file_direct_lstat(const char *path, #ifdef HAVE_LSTAT Eio_File_Stat *s = NULL; - if (!path || !done_cb || !error_cb) - return NULL; + EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(done_cb, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(error_cb, NULL); s = malloc(sizeof (Eio_File_Stat)); if (!s) return NULL; @@ -481,8 +483,9 @@ eio_file_unlink(const char *path, { Eio_File_Unlink *l = NULL; - if (!path || !done_cb || !error_cb) - return NULL; + EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(done_cb, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(error_cb, NULL); l = malloc(sizeof (Eio_File_Unlink)); if (!l) return NULL; @@ -510,8 +513,9 @@ eio_file_mkdir(const char *path, { Eio_File_Mkdir *r = NULL; - if (!path || !done_cb || !error_cb) - return NULL; + EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(done_cb, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(error_cb, NULL); r = malloc(sizeof (Eio_File_Mkdir)); if (!r) return NULL; @@ -540,8 +544,9 @@ eio_file_chmod(const char *path, { Eio_File_Mkdir *r = NULL; - if (!path || !done_cb || !error_cb) - return NULL; + EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(done_cb, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(error_cb, NULL); r = malloc(sizeof (Eio_File_Mkdir)); if (!r) return NULL; @@ -571,8 +576,9 @@ eio_file_chown(const char *path, { Eio_File_Chown *c = NULL; - if (!path || !done_cb || !error_cb) - return NULL; + EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(done_cb, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(error_cb, NULL); c = malloc(sizeof (Eio_File_Chown)); if (!c) return NULL; diff --git a/src/lib/eio/eio_xattr.c b/src/lib/eio/eio_xattr.c index b1105141b5..918b03cc31 100644 --- a/src/lib/eio/eio_xattr.c +++ b/src/lib/eio/eio_xattr.c @@ -320,8 +320,10 @@ eio_file_xattr_get(const char *path, { Eio_File_Xattr *async; - if (!path || !attribute || !done_cb || !error_cb) - return NULL; + EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(attribute, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(done_cb, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(error_cb, NULL); async = malloc(sizeof (Eio_File_Xattr)); if (!async) return NULL; @@ -341,8 +343,10 @@ eio_file_xattr_string_get(const char *path, { Eio_File_Xattr *async; - if (!path || !attribute || !done_cb || !error_cb) - return NULL; + EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(attribute, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(done_cb, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(error_cb, NULL); async = malloc(sizeof (Eio_File_Xattr)); if (!async) return NULL; @@ -362,8 +366,10 @@ eio_file_xattr_double_get(const char *path, { Eio_File_Xattr *async; - if (!path || !attribute || !done_cb || !error_cb) - return NULL; + EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(attribute, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(done_cb, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(error_cb, NULL); async = malloc(sizeof (Eio_File_Xattr)); if (!async) return NULL; @@ -383,8 +389,10 @@ eio_file_xattr_int_get(const char *path, { Eio_File_Xattr *async; - if (!path || !attribute || !done_cb || !error_cb) - return NULL; + EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(attribute, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(done_cb, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(error_cb, NULL); async = malloc(sizeof (Eio_File_Xattr)); if (!async) return NULL; @@ -407,8 +415,12 @@ eio_file_xattr_set(const char *path, { Eio_File_Xattr *async; - if (!path || !attribute || !done_cb || !xattr_data || !xattr_size || !error_cb) - return NULL; + EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(attribute, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(done_cb, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(xattr_data, NULL); + EINA_SAFETY_ON_FALSE_RETURN_VAL(xattr_size, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(error_cb, NULL); async = malloc(sizeof (Eio_File_Xattr) + xattr_size); if (!async) return NULL; @@ -433,8 +445,11 @@ eio_file_xattr_string_set(const char *path, Eio_File_Xattr *async; int length; - if (!path || !attribute || !done_cb || !xattr_string || !error_cb) - return NULL; + EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(attribute, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(xattr_string, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(done_cb, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(error_cb, NULL); async = malloc(sizeof (Eio_File_Xattr)); if (!async) return NULL; @@ -464,8 +479,10 @@ eio_file_xattr_double_set(const char *path, { Eio_File_Xattr *async; - if (!path || !attribute || !done_cb || !error_cb) - return NULL; + EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(attribute, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(done_cb, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(error_cb, NULL); async = malloc(sizeof (Eio_File_Xattr)); if (!async) return NULL; @@ -487,8 +504,10 @@ eio_file_xattr_int_set(const char *path, { Eio_File_Xattr *async; - if (!path || !attribute || !done_cb || !error_cb) - return NULL; + EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(attribute, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(done_cb, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(error_cb, NULL); async = malloc(sizeof (Eio_File_Xattr)); if (!async) return NULL;