[PULL] button mapping fix and unconstify patches
Keith Packard
keithp at keithp.com
Wed Feb 12 15:24:07 PST 2014
Gaetan Nadon <memsize at videotron.ca> writes:
> On 14-02-12 12:57 PM, Keith Packard wrote:
>> This function is supposed to be automatically replaced with os/strlcpy.c
>> when not present in your C library.
>>
>> Something appears to be amiss here; I don't have strlcpy *or* strlcat in
>> my glibc, and so configure correctly adds os/strlcpy.c and os/strlcat.c
>> to the build.
>>
> I cannot reproduce the problem anymore. I retraced my commands from the
> terminal, run make CC="gcc -D_FORTIFY_SOURCE=2" again, this time it works.
>
> This shows it is already defined:
>
> nadon at memsize:~/xorg/src/app/xclock$ gcc -dM -E - < /dev/null | grep
> FORTIFY
> #define _FORTIFY_SOURCE 2
>
> There does not seem to be any harm in defining for all builds. If it is
> not supported, it will be ignored.
>
> Let me know, and I can create a patch to add this in util-macros. It can
> be conditionally added using AC_CHECK_DECLS. If it is already define, it
> won't be added.
Yeah, we'll want a way to disable it; I've had one application that just
broke when _FORTIFY_SOURCE=2 was added. It was an older application
which allocate strings of variable length past the end of a struct and
accessed them with ((char *) ((s) + 1)), instead of declaring a
zero-length char array as the last struct member.
Old way:
struct foo {
int len
/* implicit array of chars here */
};
#define foo_chars(f) ((char *) ((f) + 1))
New way:
struct foo {
int len;
char s[0];
};
#define foo_chars(f) ((f)->s)
With _FORTIFY_SOURCE=2, a bunch of libc would get quite confused and end
up crashing the program. However, presumably Ubuntu has been building
the X server this way for a while, so it's almost certainly OK for
X. That's how I found the above problem; some Ubuntu user reported a
bug...
I certainly liked the effect -- the warnings generated were the most
useful we've found in this whole exercise, I think.
So, we could simply add
#ifndef _FORTIFY_SOURCE
#define _FORTIFY_SOURCE 2
#endif
to some X server header file, or you could do something fancier with the
configure macros. I'm easy, but I definitely want it somehow :-)
--
keith.packard at intel.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 810 bytes
Desc: not available
URL: <http://lists.x.org/archives/xorg-devel/attachments/20140212/e43a42ef/attachment.pgp>
More information about the xorg-devel
mailing list