summaryrefslogtreecommitdiff
path: root/include (follow)
AgeCommit message (Collapse)Author
2017-08-22Don't trap if an encoding error occurs in wcrtomb()sin
The POSIX definition of wcrtomb (http://pubs.opengroup.org/onlinepubs/9699919799/functions/wcrtomb.html) states: "When wc is not a valid wide character, an encoding error shall occur. In this case, the function shall store the value of the macro [EILSEQ] in errno and shall return (size_t)-1; the conversion state shall be undefined." The fortify-headers implementation of wcrtomb interprets the result -1 as 18446744073709551615 bytes. Since this is the highest 64-bit number possible, it is pretty safe to say this will always be larger than any buffer provided to wcrtomb. Therefore, it traps. Fixes bug https://bugs.alpinelinux.org/issues/7681. Patch by A. Wilcox <AWilcox@Wilcox-Tech.com>
2016-09-10Bump copyright yearsin
2016-07-14Only include limits.h when actually usedNatanael Copa
The __extension__ seems to trigger a bug in gcc when there are no identifier specified afterwards. Testcase: echo "#include <stdlib.h>" > try.c && cc -O0 -c try.c try.c:2:0: error: expected identifier or '(' at end of input With -O2 it does not happen. We work around this by only pulling in limits.h when we actually need the PATH_MAX. Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
2015-07-16Only crash on overflow for realpath()sin
2015-07-15Fix stpncpy() checksin
Do not crash unless the overflow would happen.
2015-07-15Fix confstr() checksin
Do not crash unless the overflow would actually happen.
2015-07-15Fix wcrtomb() checksin
This was breaking valid code, example: char c; wcrtomb(&c, L'0', st);
2015-06-25Add __extension__ mark to include_next to silence -pedanticSteven Barth
Signed-off-by: Steven Barth <steven@midlink.org>
2015-06-22unistd: fix signed / unsigned comparison in getgroupsSteven Barth
Signed-off-by: Steven Barth <steven@midlink.org>
2015-06-04Use the __inline__ keyword instead of __inline to avoid breakageTrutz Behn
Newer compilers default to GNU11, a C11 dialect. Some software however is unprepared for this or has wrong compatibility checks. What happens is that some software will for compatibility with C89 #define inline before inclusion of a standard header, which is undefined behaviour in C99 and above (C99/C11 7.1.2/4), as inline is a keyword. If any libc headers that are then included via #include_next provide an __inline macro definition (current musl does this if C++ or C99 and above is detected) like the following #define __inline inline this results in any __inline token to be preprocessed away. This breaks use of __builtin_va_arg_pack() in our stdio.h at compile-time as it can only be used in always inlined functions. The function attributes __always_inline__ and __gnu_inline__ themselves require an inline specifier on the function to be applied.
2015-06-03Use namespace-safe macro, param and variable namesTrutz Behn
2015-06-03Fix usage of __USER_LABEL_PREFIX__Trutz Behn
The predefined __USER_LABEL_PREFIX__ macro if it is non-empty contains an identifier, not a string literal, thus it needs to be stringified.
2015-05-21Fix return-type of fortified FD_CLR and FD_SETTrutz Behn
POSIX specifies them to have return-type void, not int.
2015-05-13Wrap some overly long linessin
2015-05-13Add LICENSE headersin
2015-05-13Add fortify_fn() helper in fortify-headers.hsin
2015-05-07Minor style fixsin
2015-05-07fix realpath when stdlib.h is included before limits.hNatanael Copa
If program includes stdlib.h before limits.h without _XOPEN_SOURCE, _GNU_SOURCE or _BSD_SOURCE explicitly set, then will it always trigger the trap with musl libc. This is becase stdlib.h will pull in features.h which will set _GNU_SOURCE. This means that the fortify stdlib.h will not include limits.h but it will still trigger the fortified realpath(), but without PATH_MAX set. We fix this by including system stdlib.h before testing if limits.h should be included. Since PATH_MAX is known at compile time we can also error at compile time, instead of compiling a broken realpath().
2015-04-08Add read checks for bcopy()sin
2015-04-08Check for out of bound reads for memcpy, memmove and mempcpy()sin
2015-04-01Add feature-test guards for mbsnrtowcs() and wcsnrtombs()sin
2015-03-15Hide stpcpy() and stpncpy() under feature test macrossin
2015-03-14Use __typeof__ to in part avoid replicating function typesTrutz Behn
2015-03-14Fix typo in attribute nameTrutz Behn
2015-03-14Explicitly cast pointers to satisfy C++ codesin
2015-03-14Add __artificial__ to aid in debuggingsin
2015-03-13Restore C++ supportsin
2015-03-13Fix typo againsin
2015-03-13Implement snprintf() and sprintf() using __builtin_va_arg_pack()sin
Requires at least GCC 4.3.
2015-03-13Re-order vsnprintf() and vsprintf()sin
vsprintf() needs to access __vsnprintf_orig().
2015-03-13Fix typosin
2015-03-13Rework fortify implementation to use extern inlinesin
Overriding functions with macros is legal in C but a lot of software is not prepared for it. Use the extern inline method to achieve the same result.
2015-03-11Put include guards in the reserved namespaceTrutz Behn
fortify-headers is considered part of the implementation.
2015-03-11Revert "Add explicit casts to satisfy C++ code"sin
This reverts commit 1fbf7a3a5e9c02cf992848002cfb88c3c7cc0212.
2015-03-11Ignore C++ for nowsin
It is not legal to override standard functions using macros in C++. We may have to revisit this in the future.
2015-03-11Add ifdef guards for C++ codesin
2015-03-11Add explicit casts to satisfy C++ codesin
2015-03-11Revert "Fix invalid conversion in C++ code"sin
This reverts commit 4b4dfea25d660a8a27e95ea531686001246b3d1e.
2015-03-11Fix invalid conversion in C++ codesin
/usr/include/fortify/string.h: In function 'void* __fortify_memcpy(void*, const void*, size_t)': /usr/include/fortify/string.h:13:12: error: invalid conversion from 'void*' to 'char*' [-fpermissive] /usr/include/fortify/string.h:14:18: error: invalid conversion from 'const void*' to 'const char*' [-fpermissive] Since we are relying on GCC anyway, assume void * arithmetic is OK.
2015-03-10Inline ppoll() as wellsin
2015-03-10Make ppoll() staticsin
Thanks Timo Teras.
2015-03-10Fix strncat() and strncpy() mappingssin
Thanks zhasha.
2015-03-07Style fixsin
2015-03-06Fix some checks in wchar.hsin
Some of these functions allow the destination pointer to be NULL. Do not trap in that case as nothing will be written to the destination buffer.
2015-03-05Fix mbsnrtowcs() and wcsnrtombs() checkssin
2015-03-04Fix wcsrtombs() checksin
2015-03-04Fix mbsrtowcs() checksin
2015-03-04Handle early termination in wcsnrtombs() and mbsnrtowcs()sin
2015-03-04Add wctomb() checksin
2015-03-04Add wcstombs() checksin