summaryrefslogtreecommitdiff
path: root/include/string.h (follow)
AgeCommit message (Collapse)Author
2024-04-24Fix some overlap mismatchjvoisin
This was caught by the following test: ``` int main(void) { char c[32]; memcpy(c, c + 16, 16); } ``` Reported-by: q66
2024-04-24Disable pedantic checks by defaultjvoisin
They can be re-enabled via `PEDANTIC_CHECKS`
2024-03-19Relax our checks for memchr on C11 and above2.2jvoisin
Since C11: > This function behaves as if it reads the bytes sequentially and stops as soon as a matching bytes is found: if the array pointed to by ptr is smaller than count, but the match is found within the array, the behavior is well-defined. Reported-by: q66
2024-03-08Add some NULL-pointers checksjvoisin
See: - https://www.imperialviolet.org/2016/06/26/nonnull.html - https://davidben.net/2024/01/15/empty-slices.html
2023-12-28Re-enable previously disabled overlap checksjvoisin
They were previously disabled in 80a83a5
2023-12-27Improve __fh_overlap implementationjvoisin
2023-12-27Don't check for overlapping in strncpy/stpncpy for nowjvoisin
They check overlap across the whole range of the given length, but the given length is not what will actually be copied, rather it's the maximum length (if src is shorter, only length of src will be copied). This triggers false positives and traps where it shouldn't (e.g. in ICU tests). Reported-by: q66
2023-12-18fix typo for __builtin_memcpypsykose
2023-12-16Disable str(r)chr hardeningq66
It's UB to subtract null pointers, which these potentially may be. It also makes python test suite fail.
2023-12-15Rename some macros to be more namespace-friendlyq66
2023-12-15Remove superfluous includesjvoisin
This should fix #32
2023-09-30Fix a typojvoisin
2023-09-30Add `strlen`jvoisin
2023-09-27Add an option to make use of compiler-provided _chk builtinsjvoisin
2023-09-22Add more __diagnose_as_builtin annotationsjvoisin
2023-09-21Properly enable diagnose_as_builtin attributejvoisin
2023-09-20Add tests for compile-time errorsjvoisin
2023-09-20Replace a strlen+condition with strnlenjvoisin
2023-09-11Factorize overlap checks into a macrojvoisin
2023-08-21Make use of __diagnose_ifjvoisin
2023-08-20Make use of __diagnose_as_builtinjvoisin
2023-08-20Add hardening for strrchrjvoisin
2023-08-20Add hardening for strchrjvoisin
2023-08-20Remove memrchr hardening for nowjvoisin
It doesn't play nice with gcc.
2023-08-03Add hardening for memchr and memrchrjvoisin
2023-06-27Add more access-annotationsjvoisin
2023-06-25add initial clang supportDaniel Kolesa
2023-06-25avoid __extension__ with clangDaniel Kolesa
It seems useless and triggers 'error: expected external declaration'
2023-06-22Add a test for strncatjvoisin
2023-06-22Add tests for stcncpyjvoisin
2023-06-22Add tests for stpcpyjvoisin
2023-06-14Add tests for strncpy and handle overlapping buffers therejvoisin
2023-05-30Add some __attribute__((access…)) annotationsjvoisin
See https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html for details
2023-05-30Add a check for overlapping copies in strcpyjvoisin
2023-04-13Make use of __builtin_dynamic_object_sizejvoisin
GCC and Clang provide __builtin_dynamic_object_size (see documentation: https://gcc.gnu.org/onlinedocs/gcc/Object-Size-Checking.html), so we should make use of it when its available.
2019-02-25Make use of builtins whenever possiblesin
2018-07-24Don't use __extension__ in C++ codeA. Wilcox
A few important notes: * __extension__ is a GNU C "alternate" keyword, not a C++ keyword.[1] * __extension__ is designed to work on "expressions"; it does work on #include_next in C mode, but it has no effect in C++ mode; the warning will still appear, if enabled, even with __extension__ preceding #include_next. This is because #include_next is not considered an expression in C++, so the compiler attaches __extension__ to the first expression of the header. All of this leads us to a build failure while building at least all Mozilla software. Moz has an alternate -isystem dir searched before /usr/include that overrides some headers, including <features.h>. The first statement in each of these headers is a #pragma, and since __extension__ is looking for an expression, and #pragma is a "null" expression, we end up with the following error: dist/system_wrappers/features.h:1:9: error: '#pragma' is not allowed here Since __extension__ has no effect on #include_next in C++ mode anyway, and since it can cause breakage, this commit omits __extension__ in C++ mode. [1]: https://gcc.gnu.org/onlinedocs/gcc-6.4.0/gcc/Alternate-Keywords.html
2016-09-10Bump copyright yearsin
2015-07-15Fix stpncpy() checksin
Do not crash unless the overflow would happen.
2015-06-25Add __extension__ mark to include_next to silence -pedanticSteven Barth
Signed-off-by: Steven Barth <steven@midlink.org>
2015-06-03Use namespace-safe macro, param and variable namesTrutz Behn
2015-05-13Add LICENSE headersin
2015-05-13Add fortify_fn() helper in fortify-headers.hsin
2015-04-08Check for out of bound reads for memcpy, memmove and mempcpy()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-14Explicitly cast pointers to satisfy C++ codesin
2015-03-14Add __artificial__ to aid in debuggingsin
2015-03-13Restore C++ supportsin
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.