diff --git a/libX11.changes b/libX11.changes index 13c0073..7e58644 100644 --- a/libX11.changes +++ b/libX11.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Thu Mar 15 09:01:19 UTC 2018 - msrb@suse.com + +- u_Use-flexible-array-member-instead-of-fake-size.patch + * Fixes build error with gcc8. (bnc#1084639) + ------------------------------------------------------------------- Wed Mar 1 13:48:43 UTC 2017 - tobias.johannes.klausmann@mni.thm.de diff --git a/libX11.spec b/libX11.spec index f379307..48f4111 100644 --- a/libX11.spec +++ b/libX11.spec @@ -1,7 +1,7 @@ # # spec file for package libX11 # -# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -34,6 +34,8 @@ Patch7: p_khmer-compose.diff Patch9: p_xlib_skip_ext_env.diff # PATCH-FIX-UPSTREAM en-locales.diff fdo#48596 bnc#388711 -- Add missing data for more en locales Patch15: en-locales.diff +# PATCH-FIX-UPSTREAM u_Use-flexible-array-member-instead-of-fake-size.patch -- Fix build error with gcc8. +Patch16: u_Use-flexible-array-member-instead-of-fake-size.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: autoconf >= 2.60 @@ -142,6 +144,7 @@ test -f nls/ja.S90/XLC_LOCALE.pre && exit 1 %patch7 -p0 %patch9 -p0 %patch15 -p0 +%patch16 -p1 %build # Got patches which change auto*files diff --git a/u_Use-flexible-array-member-instead-of-fake-size.patch b/u_Use-flexible-array-member-instead-of-fake-size.patch new file mode 100644 index 0000000..028a038 --- /dev/null +++ b/u_Use-flexible-array-member-instead-of-fake-size.patch @@ -0,0 +1,63 @@ +Author: Michal Srb +Subject: Use flexible array member instead of fake size. +Patch-mainline: To be upstreamed +References: bnc#1084639 + +The _XimCacheStruct structure is followed in memory by two strings containing +fname and encoding. The memory was accessed using the last member of the +structure `char fname[1]`. That is a lie, prohibits us from using sizeof and +confuses checkers. Lets declare it properly as a flexible array, so compilers +don't complain about writing past that array. As bonus we can replace the +XOffsetOf with regular sizeof. + +Fixes GCC8 error: + In function 'strcpy', + inlined from '_XimWriteCachedDefaultTree' at imLcIm.c:479:5, + inlined from '_XimCreateDefaultTree' at imLcIm.c:616:2, + inlined from '_XimLocalOpenIM' at imLcIm.c:700:5: + /usr/include/bits/string_fortified.h:90:10: error: '__builtin_strcpy' + forming offset 2 is out of the bounds [0, 1] [-Werror=array-bounds] + return __builtin___strcpy_chk (__dest, __src, __bos (__dest)); + +Caused by this line seemingly writing past the fname[1] array: + imLcIm.c:479: strcpy (m->fname+strlen(name)+1, encoding); +--- + modules/im/ximcp/imLcIm.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/modules/im/ximcp/imLcIm.c b/modules/im/ximcp/imLcIm.c +index c19695df..743df77b 100644 +--- a/modules/im/ximcp/imLcIm.c ++++ b/modules/im/ximcp/imLcIm.c +@@ -82,8 +82,8 @@ struct _XimCacheStruct { + DTCharIndex mbused; + DTCharIndex wcused; + DTCharIndex utf8used; +- char fname[1]; +- /* char encoding[1] */ ++ char fname[]; ++ /* char encoding[] */ + }; + + static struct _XimCacheStruct* _XimCache_mmap = NULL; +@@ -281,7 +281,7 @@ _XimReadCachedDefaultTree( + assert (m->id == XIM_CACHE_MAGIC); + assert (m->version == XIM_CACHE_VERSION); + if (size != m->size || +- size < XOffsetOf (struct _XimCacheStruct, fname) + namelen + encodinglen) { ++ size < sizeof (struct _XimCacheStruct) + namelen + encodinglen) { + fprintf (stderr, "Ignoring broken XimCache %s [%s]\n", name, encoding); + munmap (m, size); + return False; +@@ -442,7 +442,7 @@ _XimWriteCachedDefaultTree( + int fd; + FILE *fp; + struct _XimCacheStruct *m; +- int msize = (XOffsetOf(struct _XimCacheStruct, fname) ++ int msize = (sizeof(struct _XimCacheStruct) + + strlen(name) + strlen(encoding) + 2 + + XIM_CACHE_TREE_ALIGNMENT-1) & -XIM_CACHE_TREE_ALIGNMENT; + DefTreeBase *b = &im->private.local.base; +-- +2.13.6 +