Remove undefined behavior caught by LLVM 10 UBSAN.
This commit is contained in:
1 parent
6b6feaffbb
commit
c10cbbff34
1 file changed
+5
-3
+5
-3
@@ -61,8 +61,10 @@ static void stack_init(struct stack* s) {
|
|||||||
|
|
||||||
static void stack_reset(struct stack* s) {
|
static void stack_reset(struct stack* s) {
|
||||||
assert(s->limit == 0 && "stack freed while not empty");
|
assert(s->limit == 0 && "stack freed while not empty");
|
||||||
char* mem_start = s->mem_end - ( -s->bound + ALIGNMENT);
|
if(s->mem_end != NULL) {
|
||||||
free(mem_start);
|
char* mem_start = s->mem_end - ( -s->bound + ALIGNMENT);
|
||||||
|
free(mem_start);
|
||||||
|
}
|
||||||
stack_init(s);
|
stack_init(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,7 +82,7 @@ static stack_ptr* stack_block_next(struct stack* s, stack_ptr p) {
|
|||||||
|
|
||||||
static void stack_reallocate(struct stack* s, size_t sz) {
|
static void stack_reallocate(struct stack* s, size_t sz) {
|
||||||
int old_mem_length = -(s->bound) + ALIGNMENT;
|
int old_mem_length = -(s->bound) + ALIGNMENT;
|
||||||
char* old_mem_start = s->mem_end - old_mem_length;
|
char* old_mem_start = (s->mem_end != NULL) ? (s->mem_end - old_mem_length) : NULL;
|
||||||
|
|
||||||
int new_mem_length = align_round_up((old_mem_length + sz + 256) * 2);
|
int new_mem_length = align_round_up((old_mem_length + sz + 256) * 2);
|
||||||
char* new_mem_start = jv_mem_realloc(old_mem_start, new_mem_length);
|
char* new_mem_start = jv_mem_realloc(old_mem_start, new_mem_length);
|
||||||
|
|||||||
Reference in new issue
Block a user