From 552487dfb3f6e48cdce0f7e911454d1b71f48d1f Mon Sep 17 00:00:00 2001 From: huaianrenhnu Date: Tue, 22 Jan 2019 13:45:28 +0800 Subject: [PATCH] fix for atparser.c, mk3060.c, bk7231.c (#800) --- network/sal/atparser/atparser.c | 5 ++--- network/sal/sal_sockets.c | 4 +++- network/sal/wifi/bk7231/bk7231.c | 18 ++++++++++++++---- network/sal/wifi/mk3060/mk3060.c | 18 ++++++++++++++---- 4 files changed, 33 insertions(+), 12 deletions(-) diff --git a/network/sal/atparser/atparser.c b/network/sal/atparser/atparser.c index 9896e8e026..b2588b73eb 100644 --- a/network/sal/atparser/atparser.c +++ b/network/sal/atparser/atparser.c @@ -888,9 +888,8 @@ static void at_worker(void *arg) LOGD(MODULE_NAME, "AT! %s\r\n", oob->prefix); if (oob->postfix == NULL) { oob->cb(oob->arg, NULL, 0); - memset(buf + offset - strlen(oob->prefix), 0, - strlen(oob->prefix)); - offset -= strlen(oob->prefix); + memset(buf, 0, offset); + offset = 0; } else { if (oob->reallen == 0) { memset(oob->oobinputdata, 0, oob->maxlen); diff --git a/network/sal/sal_sockets.c b/network/sal/sal_sockets.c index dbe89ff6ca..3d38bee416 100644 --- a/network/sal/sal_sockets.c +++ b/network/sal/sal_sockets.c @@ -1481,7 +1481,9 @@ int sal_recvfrom(int s, void *mem, size_t len, int flags, SAL_ERROR("invalid copylen %d, len = %d, it would underflow\n", copylen, len); return -1; } - if ((len == copylen) || (pstsock->rcvevent <= 0) || ((flags & MSG_PEEK) != 0)) { + + len -= copylen; + if ((len <= 0) || (pstsock->rcvevent <= 0) || ((flags & MSG_PEEK) != 0)) { done = 1; } } else { diff --git a/network/sal/wifi/bk7231/bk7231.c b/network/sal/wifi/bk7231/bk7231.c index 916041bac9..af4297cd02 100755 --- a/network/sal/wifi/bk7231/bk7231.c +++ b/network/sal/wifi/bk7231/bk7231.c @@ -132,6 +132,7 @@ static void handle_socket_data() uint32_t len = 0; char reader[16] = {0}; char *recvdata = NULL; + char single; /* Eat the "OCKET," */ at.read(reader, 6); @@ -163,15 +164,23 @@ static void handle_socket_data() return; } /* Prepare socket data */ - recvdata = (char *)aos_malloc(len + 1); + recvdata = (char *)aos_malloc(len); if (!recvdata) { LOGE(TAG, "Error: %s %d out of memory, len is %d. \r\n", __func__, __LINE__, len); return; } - at.read(recvdata, len); - recvdata[len] = '\0'; - LOGD(TAG, "The socket data is %s", recvdata); + ret = at.read(recvdata, len); + if (ret != len) { + LOGE(TAG, "at read error recv %d want %d!\n", ret, len); + goto err; + } + + at.read(&single, 1); + if (single != '\r') { + LOGE(TAG, "at fail to read delimiter %d after data %d!\n", '\r', single); + goto err; + } if (g_netconn_data_input_cb && (g_link[link_id].fd >= 0)) { /* TODO get recv data src ip and port*/ @@ -184,6 +193,7 @@ static void handle_socket_data() LOGD(TAG, "%s socket data on link %d with length %d posted to sal\n", __func__, link_id, len); +err: aos_free(recvdata); } diff --git a/network/sal/wifi/mk3060/mk3060.c b/network/sal/wifi/mk3060/mk3060.c index 3c2bc798f7..7ddb373e74 100644 --- a/network/sal/wifi/mk3060/mk3060.c +++ b/network/sal/wifi/mk3060/mk3060.c @@ -283,15 +283,24 @@ static void handle_socket_data() return; } /* Prepare socket data */ - recvdata = (char *)aos_malloc(len + 1); + recvdata = (char *)aos_malloc(len); if (!recvdata) { LOGE(TAG, "Error: %s %d out of memory, len is %d. \r\n", __func__, __LINE__, len); return; } - at.read(recvdata, len); - recvdata[len] = '\0'; - LOGD(TAG, "The socket data is %s", recvdata); + ret = at.read(recvdata, len); + if (ret != len) { + LOGE(TAG, "at read error recv %d want %d!\n", ret, len); + goto err; + } + + memset(reader, 0, sizeof(reader)); + at.read(reader, 2); + if (strncmp(reader, AT_RECV_PREFIX, 2) != 0) { + LOGE(TAG, "at fail to read delimiter %s after data %s!\n", AT_RECV_PREFIX, reader); + goto err; + } if (g_netconn_data_input_cb && (g_link[link_id].fd >= 0)) { /* TODO get recv data src ip and port*/ @@ -304,6 +313,7 @@ static void handle_socket_data() LOGD(TAG, "%s socket data on link %d with length %d posted to sal\n", __func__, link_id, len); +err: aos_free(recvdata); }