mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-05-22 21:32:31 +00:00
Restart CI for New Technology and UBSAN hunting
Continuous Integration (via runit and runitd) is now re-enabled on win7 and win10. The `make test` command, which runs the tests on all systems is now the fastest and most stable it's been since the project started. UBSAN is now enabled in MODE=dbg in addition to ASAN. Many instances of undefined behavior have been removed. Mostly things like passing a NULL argument to memcpy(), which works fine with Cosmopolitan Libc, but that doesn't prevents the compiler from being unhappy. There was an issue w/ GNU make where static analysis claims a sprintf() call can overflow. We also now have nicer looking crash reports on Windows since uname should now be supported and msys64 addr2line works reliably.
This commit is contained in:
parent
d5ff2c3fb9
commit
5e8ae2d5bc
80 changed files with 506 additions and 249 deletions
8
third_party/python/Objects/abstract.c
vendored
8
third_party/python/Objects/abstract.c
vendored
|
@ -2410,9 +2410,11 @@ _PyObject_FastCall_Prepend(PyObject *callable,
|
|||
|
||||
/* use borrowed references */
|
||||
args2[0] = obj;
|
||||
memcpy(&args2[1],
|
||||
args,
|
||||
(nargs - 1)* sizeof(PyObject *));
|
||||
if (nargs > 1) {
|
||||
memcpy(&args2[1],
|
||||
args,
|
||||
(nargs - 1)* sizeof(PyObject *));
|
||||
}
|
||||
|
||||
result = _PyObject_FastCall(callable, args2, nargs);
|
||||
if (args2 != small_stack) {
|
||||
|
|
14
third_party/python/Objects/obmalloc.c
vendored
14
third_party/python/Objects/obmalloc.c
vendored
|
@ -97,7 +97,7 @@ static inline void *
|
|||
_PyMem_RawMalloc(void *ctx, size_t size)
|
||||
{
|
||||
#ifdef __COSMOPOLITAN__
|
||||
#ifdef __FSANITIZE_ADDRESS__
|
||||
#ifdef __SANITIZE_ADDRESS__
|
||||
return __asan_memalign(16, size);
|
||||
#else
|
||||
return dlmalloc(size);
|
||||
|
@ -117,7 +117,7 @@ static inline void *
|
|||
_PyMem_RawCalloc(void *ctx, size_t nelem, size_t elsize)
|
||||
{
|
||||
#ifdef __COSMOPOLITAN__
|
||||
#ifdef __FSANITIZE_ADDRESS__
|
||||
#ifdef __SANITIZE_ADDRESS__
|
||||
return __asan_calloc(nelem, elsize);
|
||||
#else
|
||||
return dlcalloc(nelem, elsize);
|
||||
|
@ -141,7 +141,7 @@ _PyMem_RawRealloc(void *ctx, void *ptr, size_t size)
|
|||
if (size == 0)
|
||||
size = 1;
|
||||
#ifdef __COSMOPOLITAN__
|
||||
#ifdef __FSANITIZE_ADDRESS__
|
||||
#ifdef __SANITIZE_ADDRESS__
|
||||
return __asan_realloc(ptr, size);
|
||||
#else
|
||||
return dlrealloc(ptr, size);
|
||||
|
@ -155,7 +155,7 @@ static inline void
|
|||
_PyMem_RawFree(void *ctx, void *ptr)
|
||||
{
|
||||
#ifdef __COSMOPOLITAN__
|
||||
#ifdef __FSANITIZE_ADDRESS__
|
||||
#ifdef __SANITIZE_ADDRESS__
|
||||
__asan_free(ptr);
|
||||
#else
|
||||
dlfree(ptr);
|
||||
|
@ -2029,11 +2029,13 @@ int
|
|||
static void
|
||||
_PyMem_DebugRawFree(void *ctx, void *p)
|
||||
{
|
||||
debug_alloc_api_t *api = (debug_alloc_api_t *)ctx;
|
||||
uint8_t *q = (uint8_t *)p - 2*SST; /* address returned from malloc */
|
||||
debug_alloc_api_t *api;
|
||||
uint8_t *q;
|
||||
size_t nbytes;
|
||||
if (p == NULL)
|
||||
return;
|
||||
api = (debug_alloc_api_t *)ctx;
|
||||
q = (uint8_t *)p - 2*SST; /* address returned from malloc */
|
||||
_PyMem_DebugCheckAddress(api->api_id, p);
|
||||
nbytes = read_size_t(q);
|
||||
nbytes += 4*SST;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue