Skip to content

Commit 552487d

Browse files
huaianrenhnuxiaowenxia
authored andcommitted
fix for atparser.c, mk3060.c, bk7231.c (#800)
1 parent 1fdd636 commit 552487d

File tree

4 files changed

+33
-12
lines changed

4 files changed

+33
-12
lines changed

network/sal/atparser/atparser.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -888,9 +888,8 @@ static void at_worker(void *arg)
888888
LOGD(MODULE_NAME, "AT! %s\r\n", oob->prefix);
889889
if (oob->postfix == NULL) {
890890
oob->cb(oob->arg, NULL, 0);
891-
memset(buf + offset - strlen(oob->prefix), 0,
892-
strlen(oob->prefix));
893-
offset -= strlen(oob->prefix);
891+
memset(buf, 0, offset);
892+
offset = 0;
894893
} else {
895894
if (oob->reallen == 0) {
896895
memset(oob->oobinputdata, 0, oob->maxlen);

network/sal/sal_sockets.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1481,7 +1481,9 @@ int sal_recvfrom(int s, void *mem, size_t len, int flags,
14811481
SAL_ERROR("invalid copylen %d, len = %d, it would underflow\n", copylen, len);
14821482
return -1;
14831483
}
1484-
if ((len == copylen) || (pstsock->rcvevent <= 0) || ((flags & MSG_PEEK) != 0)) {
1484+
1485+
len -= copylen;
1486+
if ((len <= 0) || (pstsock->rcvevent <= 0) || ((flags & MSG_PEEK) != 0)) {
14851487
done = 1;
14861488
}
14871489
} else {

network/sal/wifi/bk7231/bk7231.c

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ static void handle_socket_data()
132132
uint32_t len = 0;
133133
char reader[16] = {0};
134134
char *recvdata = NULL;
135+
char single;
135136

136137
/* Eat the "OCKET," */
137138
at.read(reader, 6);
@@ -163,15 +164,23 @@ static void handle_socket_data()
163164
return;
164165
}
165166
/* Prepare socket data */
166-
recvdata = (char *)aos_malloc(len + 1);
167+
recvdata = (char *)aos_malloc(len);
167168
if (!recvdata) {
168169
LOGE(TAG, "Error: %s %d out of memory, len is %d. \r\n", __func__, __LINE__, len);
169170
return;
170171
}
171172

172-
at.read(recvdata, len);
173-
recvdata[len] = '\0';
174-
LOGD(TAG, "The socket data is %s", recvdata);
173+
ret = at.read(recvdata, len);
174+
if (ret != len) {
175+
LOGE(TAG, "at read error recv %d want %d!\n", ret, len);
176+
goto err;
177+
}
178+
179+
at.read(&single, 1);
180+
if (single != '\r') {
181+
LOGE(TAG, "at fail to read delimiter %d after data %d!\n", '\r', single);
182+
goto err;
183+
}
175184

176185
if (g_netconn_data_input_cb && (g_link[link_id].fd >= 0)) {
177186
/* TODO get recv data src ip and port*/
@@ -184,6 +193,7 @@ static void handle_socket_data()
184193
LOGD(TAG, "%s socket data on link %d with length %d posted to sal\n",
185194
__func__, link_id, len);
186195

196+
err:
187197
aos_free(recvdata);
188198

189199
}

network/sal/wifi/mk3060/mk3060.c

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -283,15 +283,24 @@ static void handle_socket_data()
283283
return;
284284
}
285285
/* Prepare socket data */
286-
recvdata = (char *)aos_malloc(len + 1);
286+
recvdata = (char *)aos_malloc(len);
287287
if (!recvdata) {
288288
LOGE(TAG, "Error: %s %d out of memory, len is %d. \r\n", __func__, __LINE__, len);
289289
return;
290290
}
291291

292-
at.read(recvdata, len);
293-
recvdata[len] = '\0';
294-
LOGD(TAG, "The socket data is %s", recvdata);
292+
ret = at.read(recvdata, len);
293+
if (ret != len) {
294+
LOGE(TAG, "at read error recv %d want %d!\n", ret, len);
295+
goto err;
296+
}
297+
298+
memset(reader, 0, sizeof(reader));
299+
at.read(reader, 2);
300+
if (strncmp(reader, AT_RECV_PREFIX, 2) != 0) {
301+
LOGE(TAG, "at fail to read delimiter %s after data %s!\n", AT_RECV_PREFIX, reader);
302+
goto err;
303+
}
295304

296305
if (g_netconn_data_input_cb && (g_link[link_id].fd >= 0)) {
297306
/* TODO get recv data src ip and port*/
@@ -304,6 +313,7 @@ static void handle_socket_data()
304313
LOGD(TAG, "%s socket data on link %d with length %d posted to sal\n",
305314
__func__, link_id, len);
306315

316+
err:
307317
aos_free(recvdata);
308318

309319
}

0 commit comments

Comments
 (0)