sb: ubsan: do not apply 0 offset to NULL pointer
This commit is contained in:
parent
d5d96cb655
commit
58a1adac38
10
src/bin/sb.c
10
src/bin/sb.c
|
@ -14,8 +14,11 @@ ty_sb_add(struct ty_sb *sb, const char *s, size_t len)
|
||||||
{
|
{
|
||||||
size_t new_alloc = ((new_len + sb->gap + 15) / 16) * 24;
|
size_t new_alloc = ((new_len + sb->gap + 15) / 16) * 24;
|
||||||
char *new_buf;
|
char *new_buf;
|
||||||
|
char *buf = sb->buf;
|
||||||
|
|
||||||
new_buf = realloc(sb->buf - sb->gap, new_alloc);
|
if (buf && sb->gap)
|
||||||
|
buf -= sb->gap;
|
||||||
|
new_buf = realloc(buf, new_alloc);
|
||||||
if (new_buf == NULL)
|
if (new_buf == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
sb->buf = new_buf + sb->gap;
|
sb->buf = new_buf + sb->gap;
|
||||||
|
@ -131,7 +134,10 @@ ty_sb_rskip(struct ty_sb *sb, int len)
|
||||||
void
|
void
|
||||||
ty_sb_free(struct ty_sb *sb)
|
ty_sb_free(struct ty_sb *sb)
|
||||||
{
|
{
|
||||||
free(sb->buf - sb->gap);
|
char *buf = sb->buf;
|
||||||
|
if (buf && sb->gap)
|
||||||
|
buf -= sb->gap;
|
||||||
|
free(buf);
|
||||||
sb->gap = sb->len = sb->alloc = 0;
|
sb->gap = sb->len = sb->alloc = 0;
|
||||||
sb->buf = NULL;
|
sb->buf = NULL;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue