mirror of
				https://github.com/bytecodealliance/wasm-micro-runtime.git
				synced 2025-10-31 05:11:19 +00:00 
			
		
		
		
	Fix invalid calculation of total size of bytes to send and recv (#1162)
The total size of bytes to send and recv should be set to 0 before calculation, but not including the size of iovec_app_t structure.
This commit is contained in:
		
							parent
							
								
									3ba2d7e7de
								
							
						
					
					
						commit
						ceaf7dc660
					
				|  | @ -154,8 +154,8 @@ recvmsg(int sockfd, struct msghdr *msg, int flags) | |||
|     // Prepare input parameters.
 | ||||
|     __wasi_iovec_t *ri_data = NULL; | ||||
|     size_t i = 0; | ||||
|     size_t ro_datalen; | ||||
|     __wasi_roflags_t ro_flags; | ||||
|     size_t ro_datalen = 0; | ||||
|     __wasi_roflags_t ro_flags = 0; | ||||
| 
 | ||||
|     if (NULL == msg) { | ||||
|         HANDLE_ERROR(__WASI_ERRNO_INVAL) | ||||
|  |  | |||
|  | @ -1207,7 +1207,7 @@ wasi_sock_recv(wasm_exec_env_t exec_env, wasi_fd_t sock, iovec_app_t *ri_data, | |||
|         return __WASI_EINVAL; | ||||
| 
 | ||||
|     /* receive and scatter*/ | ||||
|     for (i = 0; i < ri_data_len; i++, ri_data++) { | ||||
|     for (total_size = 0, i = 0; i < ri_data_len; i++, ri_data++) { | ||||
|         total_size += ri_data->buf_len; | ||||
|     } | ||||
|     if (total_size >= UINT32_MAX | ||||
|  | @ -1286,7 +1286,7 @@ wasi_sock_send(wasm_exec_env_t exec_env, wasi_fd_t sock, | |||
|         return __WASI_EINVAL; | ||||
| 
 | ||||
|     /* gather and send */ | ||||
|     for (i = 0; i < si_data_len; i++, si_data++) { | ||||
|     for (total_size = 0, i = 0; i < si_data_len; i++, si_data++) { | ||||
|         total_size += si_data->buf_len; | ||||
|     } | ||||
|     if (total_size >= UINT32_MAX | ||||
|  |  | |||
|  | @ -2,8 +2,8 @@ | |||
|  * Copyright (C) 2019 Intel Corporation.  All rights reserved. | ||||
|  * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||||
|  */ | ||||
| 
 | ||||
| #include <arpa/inet.h> | ||||
| #include <assert.h> | ||||
| #include <netinet/in.h> | ||||
| #include <pthread.h> | ||||
| #include <stdbool.h> | ||||
|  | @ -109,7 +109,8 @@ run_as_client(void *arg) | |||
| { | ||||
|     int sock = -1; | ||||
|     struct sockaddr_in addr = { 0 }; | ||||
|     char buf[256] = { 0 }; | ||||
|     /* buf of server is 106 bytes */ | ||||
|     char buf[110] = { 0 }; | ||||
|     struct iovec iov = { .iov_base = buf, .iov_len = sizeof(buf) }; | ||||
|     struct msghdr msg = { .msg_iov = &iov, .msg_iovlen = 1 }; | ||||
|     ssize_t recv_len = 0; | ||||
|  | @ -145,11 +146,11 @@ run_as_client(void *arg) | |||
|     } | ||||
| 
 | ||||
|     printf("Receive %ld bytes successlly!\n", recv_len); | ||||
|     printf("Data:\n"); | ||||
|     assert(recv_len == 106); | ||||
| 
 | ||||
|     uint8_t i = 0; | ||||
|     printf("Data:\n"); | ||||
|     char *s = msg.msg_iov->iov_base; | ||||
|     for (i = 0; i < 6; i++) { | ||||
|     while (strlen(s) > 0) { | ||||
|         printf("  %s\n", s); | ||||
|         s += strlen(s) + 1; | ||||
|     } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 liang.he
						liang.he