Merge branch 'PHP-8.2' into PHP-8.3

* PHP-8.2:
  Intercept strlcpy and strlcat for msan on Clang 17 (#12674)
This commit is contained in:
Ilija Tovilo 2024-09-09 16:45:54 +02:00
commit d5359ac7ce
No known key found for this signature in database
GPG Key ID: 5050C66BFCD1015A

View File

@ -23,6 +23,10 @@
# include "valgrind/callgrind.h" # include "valgrind/callgrind.h"
#endif #endif
#if __has_feature(memory_sanitizer)
# include <sanitizer/msan_interface.h>
#endif
ZEND_API zend_new_interned_string_func_t zend_new_interned_string; ZEND_API zend_new_interned_string_func_t zend_new_interned_string;
ZEND_API zend_string_init_interned_func_t zend_string_init_interned; ZEND_API zend_string_init_interned_func_t zend_string_init_interned;
ZEND_API zend_string_init_existing_interned_func_t zend_string_init_existing_interned; ZEND_API zend_string_init_existing_interned_func_t zend_string_init_existing_interned;
@ -500,3 +504,27 @@ ZEND_API zend_string *zend_string_concat3(
return res; return res;
} }
/* strlcpy and strlcat are not intercepted by msan, so we need to do it ourselves. */
#if __has_feature(memory_sanitizer)
static size_t (*libc_strlcpy)(char *__restrict, const char *__restrict, size_t);
size_t strlcpy(char *__restrict dest, const char *__restrict src, size_t n)
{
if (!libc_strlcpy) {
libc_strlcpy = dlsym(RTLD_NEXT, "strlcpy");
}
size_t result = libc_strlcpy(dest, src, n);
__msan_unpoison_string(dest);
return result;
}
static size_t (*libc_strlcat)(char *__restrict, const char *__restrict, size_t);
size_t strlcat (char *__restrict dest, const char *restrict src, size_t n)
{
if (!libc_strlcat) {
libc_strlcat = dlsym(RTLD_NEXT, "strlcat");
}
size_t result = libc_strlcat(dest, src, n);
__msan_unpoison_string(dest);
return result;
}
#endif