Skip to content

Commit ed512c6

Browse files
authored
Fix issues detected by Coverity (bytecodealliance#1154)
wasm_c_api.c: add more checks, fix LOG_WARNING invalid specifier aot_emit_aot_file: fix strncpy max size length to copy posix.c: fix potential socket not close issue wasm-c-api samples: add return value checks for fseek/ftell cJSON.c: remove dead code
1 parent 21e59d8 commit ed512c6

File tree

15 files changed

+294
-98
lines changed

15 files changed

+294
-98
lines changed

core/iwasm/common/wasm_c_api.c

+10-5
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,9 @@ failed: \
142142
void wasm_##name##_vec_copy(wasm_##name##_vec_t *out, \
143143
const wasm_##name##_vec_t *src) \
144144
{ \
145+
if (!src) { \
146+
return; \
147+
} \
145148
wasm_##name##_vec_new(out, src->size, src->data); \
146149
} \
147150
void wasm_##name##_vec_delete(wasm_##name##_vec_t *v) \
@@ -218,7 +221,7 @@ failed: \
218221
if (!v) { \
219222
return; \
220223
} \
221-
for (i = 0; i != v->num_elems; ++i) { \
224+
for (i = 0; i != v->num_elems && v->data; ++i) { \
222225
elem_destroy_func(*(v->data + i)); \
223226
} \
224227
bh_vector_destroy((Vector *)v); \
@@ -385,7 +388,8 @@ wasm_store_new(wasm_engine_t *engine)
385388
DEFAULT_VECTOR_INIT_LENGTH);
386389

387390
if (!(store->foreigns = malloc_internal(sizeof(Vector)))
388-
|| !(bh_vector_init(store->foreigns, 24, sizeof(Vector *), true))) {
391+
|| !(bh_vector_init(store->foreigns, 24, sizeof(wasm_foreign_t *),
392+
true))) {
389393
goto failed;
390394
}
391395

@@ -995,7 +999,7 @@ wasm_externtype_copy(const wasm_externtype_t *src)
995999
COPY_EXTERNTYPE(TABLE, tabletype)
9961000
#undef COPY_EXTERNTYPE
9971001
default:
998-
LOG_WARNING("%s meets unsupported kind", __FUNCTION__,
1002+
LOG_WARNING("%s meets unsupported kind %u", __FUNCTION__,
9991003
src->extern_kind);
10001004
break;
10011005
}
@@ -1023,7 +1027,8 @@ wasm_externtype_delete(wasm_externtype_t *extern_type)
10231027
wasm_tabletype_delete(wasm_externtype_as_tabletype(extern_type));
10241028
break;
10251029
default:
1026-
LOG_WARNING("%s meets unsupported type", __FUNCTION__, extern_type);
1030+
LOG_WARNING("%s meets unsupported type %u", __FUNCTION__,
1031+
wasm_externtype_kind(extern_type));
10271032
break;
10281033
}
10291034
}
@@ -2307,7 +2312,7 @@ wasm_module_exports(const wasm_module_t *module, wasm_exporttype_vec_t *out)
23072312
}
23082313
default:
23092314
{
2310-
LOG_WARNING("%s meets unsupported type", __FUNCTION__,
2315+
LOG_WARNING("%s meets unsupported type %u", __FUNCTION__,
23112316
export->kind);
23122317
break;
23132318
}

core/iwasm/compilation/aot_emit_aot_file.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -2104,7 +2104,7 @@ aot_resolve_target_info(AOTCompContext *comp_ctx, AOTObjectData *obj_data)
21042104
}
21052105

21062106
strncpy(obj_data->target_info.arch, comp_ctx->target_arch,
2107-
sizeof(obj_data->target_info.arch));
2107+
sizeof(obj_data->target_info.arch) - 1);
21082108

21092109
return true;
21102110
}

core/iwasm/libraries/debug-engine/handler.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -471,7 +471,7 @@ handle_threadstop_request(WASMGDBServer *server, char *payload)
471471
void
472472
handle_set_current_thread(WASMGDBServer *server, char *payload)
473473
{
474-
LOG_VERBOSE("%s:%s\n", __FUNCTION__, payload, payload);
474+
LOG_VERBOSE("%s:%s\n", __FUNCTION__, payload);
475475
if ('g' == *payload++) {
476476
uint64 tid = strtoll(payload, NULL, 16);
477477
if (tid > 0)

core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/posix.c

+27-18
Original file line numberDiff line numberDiff line change
@@ -656,12 +656,13 @@ fd_table_insert_fd(struct fd_table *ft, int in, __wasi_filetype_t type,
656656
REQUIRES_UNLOCKED(ft->lock)
657657
{
658658
struct fd_object *fo;
659-
__wasi_errno_t error = fd_object_new(type, &fo);
660659

660+
__wasi_errno_t error = fd_object_new(type, &fo);
661661
if (error != 0) {
662662
close(in);
663663
return error;
664664
}
665+
665666
fo->number = in;
666667
if (type == __WASI_FILETYPE_DIRECTORY) {
667668
if (!mutex_init(&fo->directory.lock)) {
@@ -2808,33 +2809,42 @@ wasi_ssp_sock_accept(
28082809
__wasi_filetype_t wasi_type;
28092810
__wasi_rights_t max_base, max_inheriting;
28102811
struct fd_object *fo;
2811-
bh_socket_t new_sock;
2812+
bh_socket_t new_sock = -1;
28122813
int ret;
28132814
__wasi_errno_t error =
28142815
fd_object_get(curfds, &fo, fd, __WASI_RIGHT_SOCK_ACCEPT, 0);
2815-
if (error != __WASI_ESUCCESS)
2816-
return error;
2816+
if (error != __WASI_ESUCCESS) {
2817+
goto fail;
2818+
}
28172819

28182820
ret = os_socket_accept(fd_number(fo), &new_sock, NULL, NULL);
28192821
fd_object_release(fo);
2820-
if (ret == BHT_ERROR)
2821-
return convert_errno(errno);
2822+
if (BHT_OK != ret) {
2823+
error = convert_errno(errno);
2824+
goto fail;
2825+
}
28222826

28232827
error = fd_determine_type_rights(new_sock, &wasi_type, &max_base,
28242828
&max_inheriting);
28252829
if (error != __WASI_ESUCCESS) {
2826-
os_socket_close(ret);
2827-
return error;
2830+
goto fail;
28282831
}
28292832

28302833
error = fd_table_insert_fd(curfds, new_sock, wasi_type, max_base,
28312834
max_inheriting, fd_new);
28322835
if (error != __WASI_ESUCCESS) {
2833-
os_socket_close(ret);
2834-
return error;
2836+
/* released in fd_table_insert_fd() */
2837+
new_sock = -1;
2838+
goto fail;
28352839
}
28362840

28372841
return __WASI_ESUCCESS;
2842+
2843+
fail:
2844+
if (-1 != new_sock) {
2845+
os_socket_close(new_sock);
2846+
}
2847+
return error;
28382848
}
28392849

28402850
__wasi_errno_t
@@ -2898,7 +2908,7 @@ wasi_ssp_sock_bind(
28982908

28992909
ret = os_socket_bind(fd_number(fo), buf, &port);
29002910
fd_object_release(fo);
2901-
if (ret == BHT_ERROR) {
2911+
if (BHT_OK != ret) {
29022912
return convert_errno(errno);
29032913
}
29042914

@@ -2931,7 +2941,7 @@ wasi_ssp_sock_connect(
29312941

29322942
ret = os_socket_connect(fd_number(fo), buf, addr->addr.ip4.port);
29332943
fd_object_release(fo);
2934-
if (ret == BHT_ERROR) {
2944+
if (BHT_OK != ret) {
29352945
return convert_errno(errno);
29362946
}
29372947

@@ -2954,7 +2964,7 @@ wasi_ssp_sock_listen(
29542964

29552965
ret = os_socket_listen(fd_number(fo), backlog);
29562966
fd_object_release(fo);
2957-
if (ret == BHT_ERROR) {
2967+
if (BHT_OK != ret) {
29582968
return convert_errno(errno);
29592969
}
29602970

@@ -2985,7 +2995,7 @@ wasi_ssp_sock_open(
29852995
tcp_or_udp = SOCKET_DGRAM == socktype ? 0 : 1;
29862996

29872997
ret = os_socket_create(&sock, tcp_or_udp);
2988-
if (ret == BHT_ERROR) {
2998+
if (BHT_OK != ret) {
29892999
return convert_errno(errno);
29903000
}
29913001

@@ -3007,7 +3017,6 @@ wasi_ssp_sock_open(
30073017
error = fd_table_insert_fd(curfds, sock, wasi_type, max_base,
30083018
max_inheriting, sockfd);
30093019
if (error != __WASI_ESUCCESS) {
3010-
os_socket_close(sock);
30113020
return error;
30123021
}
30133022

@@ -3032,7 +3041,7 @@ wasmtime_ssp_sock_recv(
30323041

30333042
ret = os_socket_recv(fd_number(fo), buf, buf_len);
30343043
fd_object_release(fo);
3035-
if (ret == BHT_ERROR) {
3044+
if (BHT_OK != ret) {
30363045
return convert_errno(errno);
30373046
}
30383047

@@ -3058,7 +3067,7 @@ wasmtime_ssp_sock_send(
30583067

30593068
ret = os_socket_send(fd_number(fo), buf, buf_len);
30603069
fd_object_release(fo);
3061-
if (ret == BHT_ERROR) {
3070+
if (BHT_OK != ret) {
30623071
return convert_errno(errno);
30633072
}
30643073

@@ -3083,7 +3092,7 @@ wasmtime_ssp_sock_shutdown(
30833092

30843093
ret = os_socket_shutdown(fd_number(fo));
30853094
fd_object_release(fo);
3086-
if (ret == BHT_ERROR)
3095+
if (BHT_OK != ret)
30873096
return convert_errno(errno);
30883097

30893098
return __WASI_ESUCCESS;

samples/wasm-c-api/src/callback.c

+22-3
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,28 @@ int main(int argc, const char* argv[]) {
7777
printf("> Error loading module!\n");
7878
return 1;
7979
}
80-
fseek(file, 0L, SEEK_END);
81-
size_t file_size = ftell(file);
82-
fseek(file, 0L, SEEK_SET);
80+
81+
int ret = fseek(file, 0L, SEEK_END);
82+
if (ret == -1) {
83+
printf("> Error loading module!\n");
84+
fclose(file);
85+
return 1;
86+
}
87+
88+
long file_size = ftell(file);
89+
if (file_size == -1) {
90+
printf("> Error loading module!\n");
91+
fclose(file);
92+
return 1;
93+
}
94+
95+
ret = fseek(file, 0L, SEEK_SET);
96+
if (ret == -1) {
97+
printf("> Error loading module!\n");
98+
fclose(file);
99+
return 1;
100+
}
101+
83102
wasm_byte_vec_t binary;
84103
wasm_byte_vec_new_uninitialized(&binary, file_size);
85104
if (fread(binary.data, file_size, 1, file) != 1) {

0 commit comments

Comments
 (0)