Hi Kim, this change breaks api on intel 64bit platforms according to our scripts. (I didn't pick it either)
api.c, libImlib2.so.1.4.5 [−] imlib_free_pixmap_and_mask ( Pixmap pixmap ) (1) Change: The parameter pixmap became passed in rdi register instead of rsi. Effect: Applications will read the wrong memory block instead of the parameter value. On 04/17/2016 04:32 AM, Kim Woelders wrote: > kwo pushed a commit to branch master. > > http://git.enlightenment.org/legacy/imlib2.git/commit/?id=a0259d5181b9bd5c2e74077dea4ae36472798a96 > > commit a0259d5181b9bd5c2e74077dea4ae36472798a96 > Author: Kim Woelders <k...@woelders.dk> > Date: Thu Apr 14 21:45:06 2016 +0200 > > Fix various potential OOM crashes. > > There were several potential OOM crashes in __imlib_ListFilters(), > __imlib_ListLoaders() and __imlib_TrimLoaderList(). > > The fix of __imlib_TrimLoaderList() is from patch by > Yuriy M. Kaminskiy <yum...@gmail.com>. > --- > src/lib/Makefile.am | 1 + > src/lib/dynamic_filters.c | 42 +--------------------- > src/lib/file.h | 2 ++ > src/lib/image.c | 84 +------------------------------------------- > src/lib/image.h | 1 - > src/lib/modules.c | 88 > +++++++++++++++++++++++++++++++++++++++++++++++ > 6 files changed, 93 insertions(+), 125 deletions(-) > > diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am > index 9b330f5..83c734f 100644 > --- a/src/lib/Makefile.am > +++ b/src/lib/Makefile.am > @@ -47,6 +47,7 @@ image.c \ > image.h \ > line.c \ > loaderpath.h \ > +modules.c \ > polygon.c \ > rectangle.c \ > rend.c \ > diff --git a/src/lib/dynamic_filters.c b/src/lib/dynamic_filters.c > index 23a88ec..a650464 100644 > --- a/src/lib/dynamic_filters.c > +++ b/src/lib/dynamic_filters.c > @@ -15,11 +15,8 @@ > #include "dynamic_filters.h" > #include "file.h" > #include "image.h" > -#include "loaderpath.h" > #include "script.h" > > -static char **__imlib_ListFilters(int *num_ret); > - > static ImlibExternalFilter *filters = NULL; > static int dyn_initialised = 0; > > @@ -101,7 +98,7 @@ __imlib_dynamic_filters_init() > #ifdef FDEBUG > printf("DEBUG: Loading Filters\n"); > #endif > - list = __imlib_ListFilters(&num_filters); > + list = __imlib_ListModules("filters", &num_filters); > for (i = num_filters - 1; i >= 0; i--) > { > tptr = NULL; > @@ -150,40 +147,3 @@ __imlib_get_dynamic_filter(char *name) > } > return NULL; > } > - > -/* loader dir */ > -static char ** > -__imlib_ListFilters(int *num_ret) > -{ > - char **list = NULL, **l, *s; > - int num, i, pi = 0; > - > - *num_ret = 0; > - /* same for system loader path */ > - s = (char *)malloc(sizeof(SYS_LOADERS_PATH) + 8 + 1); > - sprintf(s, SYS_LOADERS_PATH "/filters"); > - l = __imlib_FileDir(s, &num); > - if (num > 0) > - { > - *num_ret += num; > - list = realloc(list, sizeof(char *) * *num_ret); > - for (i = 0; i < num; i++) > - { > - s = (char *)realloc(s, > - sizeof(SYS_LOADERS_PATH) + 9 + strlen(l[i]) > + > - 1); > - sprintf(s, SYS_LOADERS_PATH "/filters/%s", l[i]); > - list[pi + i] = strdup(s); > - } > - __imlib_FileFreeDirList(l, num); > - } > - free(s); > - > - /* List currently contains *everything in there* we need to weed out > - * the .so, .la, .a versions of the same loader or whatever else. > - * dlopen can take an extension-less name and do the Right Thing > - * with it, so that's what we'll give it. */ > - list = __imlib_TrimLoaderList(list, num_ret); > - > - return list; > -} > diff --git a/src/lib/file.h b/src/lib/file.h > index 4e9a0d1..3bfa52d 100644 > --- a/src/lib/file.h > +++ b/src/lib/file.h > @@ -20,4 +20,6 @@ int __imlib_IsRealFile(const char *s); > > int __imlib_ItemInList(char **list, int size, char *item); > > +char **__imlib_ListModules(const char *what, int *num_ret); > + > #endif > diff --git a/src/lib/image.c b/src/lib/image.c > index b9fb9d1..850cecc 100644 > --- a/src/lib/image.c > +++ b/src/lib/image.c > @@ -594,88 +594,6 @@ __imlib_ProduceLoader(char *file) > return l; > } > > -/* list all the filenames of loaders in the system loaders dir and the user > */ > -/* loader dir */ > -static char ** > -__imlib_ListLoaders(int *num_ret) > -{ > - char **list = NULL, **l, *s; > - int num, i, pi = 0; > - > - *num_ret = 0; > - /* same for system loader path */ > - s = (char *)malloc(sizeof(SYS_LOADERS_PATH) + 8 + 1); > - sprintf(s, SYS_LOADERS_PATH "/loaders"); > - l = __imlib_FileDir(s, &num); > - if (num > 0) > - { > - *num_ret += num; > - list = realloc(list, sizeof(char *) * *num_ret); > - > - for (i = 0; i < num; i++) > - { > - s = (char *)realloc(s, > - sizeof(SYS_LOADERS_PATH) + 9 + strlen(l[i]) > + > - 1); > - sprintf(s, SYS_LOADERS_PATH "/loaders/%s", l[i]); > - list[pi + i] = strdup(s); > - } > - __imlib_FileFreeDirList(l, num); > - } > - free(s); > - > - /* List currently contains *everything in there* we need to weed out > - * the .so, .la, .a versions of the same loader or whatever else. > - * dlopen can take an extension-less name and do the Right Thing > - * with it, so that's what we'll give it. */ > - list = __imlib_TrimLoaderList(list, num_ret); > - > - return list; > -} > - > -char ** > -__imlib_TrimLoaderList(char **list, int *num) > -{ > - int i, n, size = 0; > - > - char **ret = NULL; > - > - if (!list) > - return NULL; > - if (*num == 0) > - return list; > - > - n = *num; > - > - for (i = 0; i < n; i++) > - { > - char *ext; > - > - if (!list[i]) > - continue; > - ext = strrchr(list[i], '.'); > - if ((ext) && ( > -#ifdef __CYGWIN__ > - (!strcasecmp(ext, ".dll")) || > -#endif > - (!strcasecmp(ext, ".so")))) > - { > - /* Don't add the same loader multiple times... */ > - if (!__imlib_ItemInList(ret, size, list[i])) > - { > - ret = realloc(ret, sizeof(char *) * (size + 1)); > - > - ret[size++] = strdup(list[i]); > - } > - } > - if (list[i]) > - free(list[i]); > - } > - free(list); > - *num = size; > - return ret; > -} > - > /* fre the struct for a loader and close its dlopen'd handle */ > static void > __imlib_ConsumeLoader(ImlibLoader * l) > @@ -753,7 +671,7 @@ __imlib_LoadAllLoaders(void) > char **list; > > /* list all the loaders imlib can find */ > - list = __imlib_ListLoaders(&num); > + list = __imlib_ListModules("loaders", &num); > /* no loaders? well don't load anything */ > if (!list) > return; > diff --git a/src/lib/image.h b/src/lib/image.h > index 42bea83..8f8146a 100644 > --- a/src/lib/image.h > +++ b/src/lib/image.h > @@ -135,7 +135,6 @@ void > __imlib_AddImagePixmapToCache(ImlibImagePixmap * ip); > void __imlib_RemoveImagePixmapFromCache(ImlibImagePixmap * > ip); > void __imlib_CleanupImagePixmapCache(void); > #endif > -char **__imlib_TrimLoaderList(char **list, int *num); > void __imlib_RemoveAllLoaders(void); > ImlibLoader *__imlib_FindBestLoaderForFile(const char *file, > int for_save); > diff --git a/src/lib/modules.c b/src/lib/modules.c > new file mode 100644 > index 0000000..69814eb > --- /dev/null > +++ b/src/lib/modules.c > @@ -0,0 +1,88 @@ > +#include "config.h" > + > +#include <stdlib.h> > + > +#include "file.h" > +#include "image.h" > +#include "loaderpath.h" > + > +static char ** > +__imlib_TrimLoaderList(char **list, int *num) > +{ > + int i, n, size = 0; > + > + if (!list) > + return NULL; > + > + n = *num; > + > + for (i = 0; i < n; i++) > + { > + char *ext; > + > + if (!list[i]) > + continue; > + ext = strrchr(list[i], '.'); > + if ((ext) && ( > +#ifdef __CYGWIN__ > + (!strcasecmp(ext, ".dll")) || > +#endif > + (!strcasecmp(ext, ".so")))) > + { > + /* Don't add the same loader multiple times... */ > + if (!__imlib_ItemInList(list, size, list[i])) > + { > + list[size++] = list[i]; > + continue; > + } > + } > + free(list[i]); > + } > + if (!size) > + { > + free(list); > + list = NULL; > + } > + else > + { > + list = realloc(list, size * sizeof(char *)); > + } > + *num = size; > + return list; > +} > + > +char ** > +__imlib_ListModules(const char *what, int *num_ret) > +{ > + char **list = NULL, **l; > + char path[1024]; > + int num, i; > + > + *num_ret = 0; > + > + snprintf(path, sizeof(path), "%s/%s", SYS_LOADERS_PATH, what); > + l = __imlib_FileDir(path, &num); > + if (num <= 0) > + return NULL; > + > + list = malloc(num * sizeof(char *)); > + if (list) > + { > + for (i = 0; i < num; i++) > + { > + snprintf(path, sizeof(path), "%s/%s/%s", > + SYS_LOADERS_PATH, what, l[i]); > + list[i] = strdup(path); > + } > + *num_ret = num; > + } > + __imlib_FileFreeDirList(l, num); > + > + /* List currently contains *everything in there* we need to weed out > + * the .so, .la, .a versions of the same loader or whatever else. > + * dlopen can take an extension-less name and do the Right Thing > + * with it, so that's what we'll give it. */ > + list = __imlib_TrimLoaderList(list, num_ret); > + > + return list; > +} > -- Simon Lees (Simotek) http://simotek.net Emergency Update Team keybase.io/simotek SUSE Linux Adeliade Australia, UTC+9:30 GPG Fingerprint: 5B87 DB9D 88DC F606 E489 CEC5 0922 C246 02F0 014B
signature.asc
Description: OpenPGP digital signature
------------------------------------------------------------------------------ Find and fix application performance issues faster with Applications Manager Applications Manager provides deep performance insights into multiple tiers of your business applications. It resolves application problems quickly and reduces your MTTR. Get your free trial! https://ad.doubleclick.net/ddm/clk/302982198;130105516;z
_______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel