libchop: fix builds with glibc 2.16+

+73
+2
pkgs/development/libraries/libchop/default.nix
··· 9 sha256 = "0fpdyxww41ba52d98blvnf543xvirq1v9xz1i3x1gm9lzlzpmc2g"; 10 }; 11 12 buildNativeInputs = [ pkgconfig gperf ]; 13 buildInputs = 14 [ zlib bzip2 lzo
··· 9 sha256 = "0fpdyxww41ba52d98blvnf543xvirq1v9xz1i3x1gm9lzlzpmc2g"; 10 }; 11 12 + patches = [ ./gets-undeclared.patch ]; 13 + 14 buildNativeInputs = [ pkgconfig gperf ]; 15 buildInputs = 16 [ zlib bzip2 lzo
+71
pkgs/development/libraries/libchop/gets-undeclared.patch
···
··· 1 + This patch is needed to allow builds with newer versions of 2 + the GNU libc (2.16+). 3 + 4 + 5 + commit 66712c23388e93e5c518ebc8515140fa0c807348 6 + Author: Eric Blake <eblake@redhat.com> 7 + Date: Thu Mar 29 13:30:41 2012 -0600 8 + 9 + stdio: don't assume gets any more 10 + 11 + Gnulib intentionally does not have a gets module, and now that C11 12 + and glibc have dropped it, we should be more proactive about warning 13 + any user on a platform that still has a declaration of this dangerous 14 + interface. 15 + 16 + * m4/stdio_h.m4 (gl_STDIO_H, gl_STDIO_H_DEFAULTS): Drop gets 17 + support. 18 + * modules/stdio (Makefile.am): Likewise. 19 + * lib/stdio-read.c (gets): Likewise. 20 + * tests/test-stdio-c++.cc: Likewise. 21 + * m4/warn-on-use.m4 (gl_WARN_ON_USE_PREPARE): Fix comment. 22 + * lib/stdio.in.h (gets): Make warning occur in more places. 23 + * doc/posix-functions/gets.texi (gets): Update documentation. 24 + Reported by Christer Solskogen. 25 + 26 + Signed-off-by: Eric Blake <eblake@redhat.com> 27 + 28 + diff --git a/lib/stdio.in.h b/lib/stdio.in.h 29 + index aa7b599..c377b6e 100644 30 + --- a/lib/stdio.in.h 31 + +++ b/lib/stdio.in.h 32 + @@ -698,22 +698,11 @@ _GL_WARN_ON_USE (getline, "getline is unportable - " 33 + # endif 34 + #endif 35 + 36 + -#if @GNULIB_GETS@ 37 + -# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ 38 + -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 39 + -# undef gets 40 + -# define gets rpl_gets 41 + -# endif 42 + -_GL_FUNCDECL_RPL (gets, char *, (char *s) _GL_ARG_NONNULL ((1))); 43 + -_GL_CXXALIAS_RPL (gets, char *, (char *s)); 44 + -# else 45 + -_GL_CXXALIAS_SYS (gets, char *, (char *s)); 46 + -# undef gets 47 + -# endif 48 + -_GL_CXXALIASWARN (gets); 49 + /* It is very rare that the developer ever has full control of stdin, 50 + - so any use of gets warrants an unconditional warning. Assume it is 51 + - always declared, since it is required by C89. */ 52 + + so any use of gets warrants an unconditional warning; besides, C11 53 + + removed it. */ 54 + +#undef gets 55 + +#if HAVE_RAW_DECL_GETS 56 + _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); 57 + #endif 58 + 59 + @@ -1053,9 +1042,9 @@ _GL_WARN_ON_USE (snprintf, "snprintf is unportable - " 60 + # endif 61 + #endif 62 + 63 + -/* Some people would argue that sprintf should be handled like gets 64 + - (for example, OpenBSD issues a link warning for both functions), 65 + - since both can cause security holes due to buffer overruns. 66 + +/* Some people would argue that all sprintf uses should be warned about 67 + + (for example, OpenBSD issues a link warning for it), 68 + + since it can cause security holes due to buffer overruns. 69 + However, we believe that sprintf can be used safely, and is more 70 + efficient than snprintf in those safe cases; and as proof of our 71 + belief, we use sprintf in several gnulib modules. So this header