Skip to content
Snippets Groups Projects
Commit f98334ea authored by Feodor Alexandrov's avatar Feodor Alexandrov
Browse files

fix: more svace patches

parent 9b93f8bb
No related branches found
No related tags found
No related merge requests found
Pipeline #29870 passed
Showing
with 303 additions and 0 deletions
......@@ -23,8 +23,10 @@ tarantool-patch:
echo "${VER_TNT}" > tarantool-sys/VERSION
PICODATA_DIR=$(shell find / -type d -name "picodata" 2>/dev/null | grep -v helm)
PATCH_DIR=$${PICODATA_DIR}/certification_patches/svace_patches
(cd $${PICODATA_DIR}/tarantool-sys; find $${PATCH_DIR} -name "tarantool-sys_*" | xargs -n 1 git apply)
(cd $${PICODATA_DIR}/tarantool-sys/third_party/luajit; find $${PATCH_DIR} -name "luajit_*" | xargs -n 1 git apply)
build: tarantool-patch
. ~/.cargo/env && \
cargo build --locked --features webui
......
diff --git a/src/lj_udata.c b/src/lj_udata.c
index 1b7841fa..22426dbb 100644
--- a/src/lj_udata.c
+++ b/src/lj_udata.c
@@ -6,6 +6,8 @@
#define lj_udata_c
#define LUA_CORE
+#include <assert.h>
+
#include "lj_obj.h"
#include "lj_gc.h"
#include "lj_err.h"
@@ -57,6 +59,7 @@ void *lj_lightud_intern(lua_State *L, void *p)
setmref(g->gc.lightudseg, segmap);
}
g->gc.lightudnum = segnum;
+ assert(segmap != NULL);
segmap[segnum] = up;
return (void *)(((uint64_t)segnum << LJ_LIGHTUD_BITS_LO) | lightudlo(u));
}
diff --git a/src/box/alter.cc b/src/box/alter.cc
index 7aeab4648..7b8cd489c 100644
--- a/src/box/alter.cc
+++ b/src/box/alter.cc
@@ -1774,6 +1774,7 @@ alter_space_move_indexes(struct alter_space *alter, uint32_t begin,
old_def->name, strlen(old_def->name),
old_def->type, &old_def->opts,
old_def->key_def, alter->pk_def);
+ assert(new_def != NULL);
index_def_update_optionality(new_def, min_field_count);
auto guard = make_scoped_guard([=] { index_def_delete(new_def); });
if (!index_def_change_requires_rebuild(old_index, new_def))
@@ -2996,6 +2997,8 @@ on_replace_dd_user(struct trigger * /* trigger */, void *event)
return -1;
txn_stmt_on_rollback(stmt, on_rollback);
} else if (new_tuple == NULL) { /* DELETE */
+ if (old_user == NULL)
+ return -1; /* using if instead of assert for svace */
if (access_check_ddl(old_user->def->name, old_user->def->uid,
old_user->def->owner, old_user->def->type,
BOX_PRIVILEGE_DROP) != 0)
@@ -3353,6 +3356,8 @@ on_replace_dd_func(struct trigger * /* trigger */, void *event)
if (trigger_run(&on_alter_func, func) != 0)
return -1;
} else if (new_tuple == NULL) { /* DELETE */
+ if (old_func == NULL)
+ return -1; /* using if instead of assert for svace */
uint32_t uid;
if (func_def_get_ids_from_tuple(old_tuple, &fid, &uid) != 0)
return -1;
@@ -4392,7 +4397,9 @@ on_replace_dd_sequence(struct trigger * /* trigger */, void *event)
sequence_cache_delete(seq->def->id);
txn_stmt_on_commit(stmt, on_commit);
txn_stmt_on_rollback(stmt, on_rollback);
- } else { /* UPDATE */
+ } else {
+ if (new_tuple == NULL) /* UPDATE */
+ return -1; /* using if instead of assert for svace */
new_def = sequence_def_new_from_tuple(new_tuple,
ER_ALTER_SEQUENCE);
if (new_def == NULL)
diff --git a/src/lib/salad/bps_tree.h b/src/lib/salad/bps_tree.h
index e340588cb..7cdeb9770 100644
--- a/src/lib/salad/bps_tree.h
+++ b/src/lib/salad/bps_tree.h
@@ -1585,6 +1585,7 @@ bps_tree_random(const struct bps_tree *t, size_t rnd)
for (bps_tree_block_id_t i = 0; i < tree->depth - 1; i++) {
struct bps_inner *inner = (struct bps_inner *)block;
bps_tree_pos_t pos = rnd % inner->header.size;
+ assert(pos < BPS_TREE_MAX_COUNT_IN_INNER);
rnd /= inner->header.size;
block = bps_tree_restore_block(tree, inner->child_ids[pos]);
}
diff --git a/src/box/sql/build.c b/src/box/sql/build.c
index 6891de805..78428e9f9 100644
--- a/src/box/sql/build.c
+++ b/src/box/sql/build.c
@@ -1300,7 +1300,13 @@ vdbe_emit_create_constraints(struct Parse *parse, int reg_space_id)
*/
if (is_alter) {
space = parse->create_column_def.space;
- i = space_by_name(space->def->name)->index_count;
+ struct space *space_obj = space_by_name(space->def->name);
+ if (space_obj == NULL) {
+ diag_set(ClientError, ER_NO_SUCH_SPACE, space->def->name);
+ parse->is_aborted = true;
+ return;
+ }
+ i = space_obj->index_count;
}
assert(space != NULL);
for (; i < space->index_count; ++i) {
@@ -2098,7 +2104,7 @@ sql_create_foreign_key(struct Parse *parse_context)
constraint_name) != 0)
goto exit_create_fk;
/* In case of ALTER parent table must exist. */
- } else if (columnno_by_name(parse_context, child_space,
+ } else if (child_cols && columnno_by_name(parse_context, child_space,
child_cols->a[i].zName,
&fk_def->links[i].child_field,
constraint_name) != 0) {
diff --git a/third_party/libeio/eio.c b/third_party/libeio/eio.c
index 03cb010e4..513ac2461 100644
--- a/third_party/libeio/eio.c
+++ b/third_party/libeio/eio.c
@@ -1408,8 +1408,12 @@ eio__scandir (eio_req *req, etp_worker *self)
req->ptr1 = dents = flags ? malloc (dentalloc * sizeof (eio_dirent)) : 0;
req->ptr2 = names = malloc (namesalloc);
- if (!names || (flags && !dents))
+ if (!names || (flags && !dents)) {
+#ifndef _WIN32
+ closedir (dirp);
+#endif
return;
+ }
for (;;)
{
@@ -2250,6 +2254,7 @@ eio__2path (int type, const char *path, const char *new_path, int pri, eio_cb cb
req->ptr2 = strdup (new_path);
if (!req->ptr2)
{
+ free(req->ptr1);
eio_api_destroy (req);
return 0;
}
diff --git a/third_party/libev/ev.c b/third_party/libev/ev.c
index 43e4815b8..b46a8f324 100644
--- a/third_party/libev/ev.c
+++ b/third_party/libev/ev.c
@@ -2264,10 +2264,12 @@ array_nextsize (int elem, int cur, int cnt)
ncur <<= 1;
while (cnt > ncur);
+ assert((unsigned long)elem * (unsigned long)ncur <= INT_MAX);
/* if size is large, round to MALLOC_ROUND - 4 * longs to accommodate malloc overhead */
- if (elem * ncur > MALLOC_ROUND - sizeof (void *) * 4)
+ if ((unsigned long)elem * (unsigned long)ncur > MALLOC_ROUND - sizeof (void *) * 4)
{
ncur *= elem;
+ assert(((unsigned long)ncur + (unsigned long)elem + ((unsigned long)(MALLOC_ROUND - 1)) + sizeof (void *) * 4) <= INT_MAX);
ncur = (ncur + elem + (MALLOC_ROUND - 1) + sizeof (void *) * 4) & ~(MALLOC_ROUND - 1);
ncur = ncur - sizeof (void *) * 4;
ncur /= elem;
@@ -2281,7 +2283,7 @@ static void *
array_realloc (int elem, void *base, int *cur, int cnt)
{
*cur = array_nextsize (elem, *cur, cnt);
- return ev_realloc (base, elem * *cur);
+ return ev_realloc (base, (long)elem * ((long)(*cur)));
}
#define array_needsize_noinit(base,offset,count)
@@ -2852,7 +2854,13 @@ pipecb (EV_P_ ev_io *iow, int revents)
if (evpipe [0] < 0)
{
uint64_t counter;
- read (evpipe [1], &counter, sizeof (uint64_t));
+ ssize_t bytes_read = read (evpipe [1], &counter, sizeof (uint64_t));
+ if (bytes_read < 0) {
+ ev_syserr("(libev) error reading signal/async pipe");
+
+ } else if (bytes_read != sizeof (uint64_t)) {
+ ev_syserr("(libev) error not full reading signal/async pipe");
+ }
}
else
#endif
@@ -2866,7 +2874,13 @@ pipecb (EV_P_ ev_io *iow, int revents)
buf.len = sizeof (dummy);
WSARecv (EV_FD_TO_WIN32_HANDLE (evpipe [0]), &buf, 1, &recvd, &flags, 0, 0);
#else
- read (evpipe [0], &dummy, sizeof (dummy));
+ ssize_t bytes_read = read (evpipe [0], &dummy, sizeof (dummy));
+ if (bytes_read < 0) {
+ ev_syserr("(libev) error reading signal/async pipe");
+
+ } else if (bytes_read != sizeof (dummy)) {
+ ev_syserr("(libev) error not full reading signal/async pipe");
+ }
#endif
}
}
diff --git a/third_party/libev/ev_epoll.c b/third_party/libev/ev_epoll.c
index 58cfa684d..ca22c6351 100644
--- a/third_party/libev/ev_epoll.c
+++ b/third_party/libev/ev_epoll.c
@@ -99,8 +99,8 @@ epoll_modify (EV_P_ int fd, int oev, int nev)
if (ecb_expect_true (errno == ENOENT))
{
/* if ENOENT then the fd went away, so try to do the right thing */
- if (!nev)
- goto dec_egen;
+ // if (!nev)
+ // goto dec_egen;
if (!epoll_ctl (backend_fd, EPOLL_CTL_ADD, fd, &ev))
return;
diff --git a/third_party/libev/ev_iouring.c b/third_party/libev/ev_iouring.c
index 23788ea24..e47942e19 100644
--- a/third_party/libev/ev_iouring.c
+++ b/third_party/libev/ev_iouring.c
@@ -351,8 +351,12 @@ ecb_cold
static int
iouring_internal_destroy (EV_P)
{
- close (iouring_tfd);
- close (iouring_fd);
+ if (iouring_tfd > 0) {
+ close (iouring_tfd);
+ }
+ if (iouring_fd > 0) {
+ close (iouring_fd);
+ }
if (iouring_ring != MAP_FAILED) munmap (iouring_ring, iouring_ring_size);
if (iouring_sqes != MAP_FAILED) munmap (iouring_sqes, iouring_sqes_size);
diff --git a/src/box/sql/expr.c b/src/box/sql/expr.c
index 3a2426bcd..4865f7865 100644
--- a/src/box/sql/expr.c
+++ b/src/box/sql/expr.c
@@ -1879,7 +1879,8 @@ sqlExprListSetName(Parse * pParse, /* Parsing context */
} else {
item->zName = sql_xstrndup(pName->z, pName->n);
}
- sqlCheckIdentifierName(pParse, item->zName);
+ if (sqlCheckIdentifierName(pParse, item->zName) < 0)
+ sql_xfree(item->zName);
}
void
diff --git a/extra/lemon.c b/extra/lemon.c
index f5450ef83..8d5242617 100644
--- a/extra/lemon.c
+++ b/extra/lemon.c
@@ -1876,9 +1876,11 @@ static FILE *errstream;
*/
static void errline(int n, int k, FILE *err)
{
- int spcnt, i;
- if( argv[0] ) fprintf(err,"%s",argv[0]);
- spcnt = lemonStrlen(argv[0]) + 1;
+ int spcnt = 0, i;
+ if( argv[0] ) {
+ fprintf(err,"%s",argv[0]);
+ spcnt = lemonStrlen(argv[0]) + 1;
+ }
for(i=1; i<n && argv[i]; i++){
fprintf(err," %s",argv[i]);
spcnt += lemonStrlen(argv[i])+1;
diff --git a/src/box/memtx_tx.c b/src/box/memtx_tx.c
index ec78ceaa5..e177f20b5 100644
--- a/src/box/memtx_tx.c
+++ b/src/box/memtx_tx.c
@@ -2121,6 +2121,7 @@ memtx_tx_history_add_insert_stmt(struct txn_stmt *stmt,
del_story = replaced_story;
else
del_story = memtx_tx_story_get(old_tuple);
+ assert(del_story != NULL);
memtx_tx_story_link_deleted_by(del_story, stmt);
} else if (is_own_change)
stmt->is_pure_insert = true;
diff --git a/src/lib/core/say.c b/src/lib/core/say.c
index a80880724..2ab3d5478 100644
--- a/src/lib/core/say.c
+++ b/src/lib/core/say.c
@@ -655,6 +655,7 @@ log_syslog_init(struct log *log, const char *init_str)
else
log->syslog_ident = strdup(opts.identity);
if (log->syslog_ident == NULL) {
+ assert(opts.identity != NULL);
diag_set(OutOfMemory, strlen(opts.identity), "malloc",
"log->syslog_ident");
return -1;
diff --git a/src/box/sql/select.c b/src/box/sql/select.c
index e58bd10fb..e4ac834b2 100644
--- a/src/box/sql/select.c
+++ b/src/box/sql/select.c
@@ -2122,6 +2122,7 @@ sqlColumnsFromExprList(Parse * parse, ExprList * expr_list,
}
zName = sqlMPrintf("%.*z_%u", nName, zName, ++cnt);
}
+ assert(zName != NULL);
size_t name_len = strlen(zName);
void *field = &space_def->fields[i];
assert(field != NULL);
diff --git a/src/box/sql/wherecode.c b/src/box/sql/wherecode.c
index 8cac15123..5f084394f 100644
--- a/src/box/sql/wherecode.c
+++ b/src/box/sql/wherecode.c
@@ -458,7 +458,7 @@ codeEqualityTerm(Parse * pParse, /* The parsing context */
* such a vector, some of the subroutines do not handle
* this case.
*/
- if (pLhs->nExpr == 1) {
+ if (pLhs && pLhs->nExpr == 1) {
pX->pLeft = pLhs->a[0].pExpr;
} else {
pLeft->x.pList = pLhs;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment