mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-05-24 14:22:28 +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;
|
||||
|
|
3
third_party/python/Parser/tokenizer.c
vendored
3
third_party/python/Parser/tokenizer.c
vendored
|
@ -1501,7 +1501,8 @@ tok_get(struct tok_state *tok, char **p_start, char **p_end)
|
|||
} while (c == ' ' || c == '\t' || c == '\014');
|
||||
|
||||
/* Set start of current token */
|
||||
tok->start = tok->cur - 1;
|
||||
if (tok->cur)
|
||||
tok->start = tok->cur - 1;
|
||||
|
||||
/* Skip comment */
|
||||
if (c == '#') {
|
||||
|
|
2
third_party/python/Python/pystate.c
vendored
2
third_party/python/Python/pystate.c
vendored
|
@ -17,7 +17,7 @@
|
|||
#include "third_party/python/Include/pystate.h"
|
||||
/* clang-format off */
|
||||
|
||||
#if defined(__FSANITIZE_ADDRESS__) || defined(__FSANITIZE_UNDEFINED__)
|
||||
#if defined(__SANITIZE_ADDRESS__) || defined(__SANITIZE_UNDEFINED__)
|
||||
STATIC_YOINK("__die"); /* to guarantee backtraces */
|
||||
#endif
|
||||
|
||||
|
|
4
third_party/python/pyconfig.h
vendored
4
third_party/python/pyconfig.h
vendored
|
@ -505,7 +505,7 @@
|
|||
/* #undef WITH_LIBINTL */
|
||||
|
||||
/* Define if you want to compile in Python-specific mallocs */
|
||||
#ifndef __FSANITIZE_ADDRESS__
|
||||
#ifndef __SANITIZE_ADDRESS__
|
||||
#define WITH_PYMALLOC 0
|
||||
#endif
|
||||
|
||||
|
@ -580,7 +580,7 @@
|
|||
|
||||
/* #define FAST_LOOPS 1 /\* froot loops *\/ */
|
||||
|
||||
#ifdef __FSANITIZE_UNDEFINED__
|
||||
#ifdef __SANITIZE_UNDEFINED__
|
||||
#define HAVE_ALIGNED_REQUIRED 1
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue