Browse Source

fix: websocket, 如果分片连续帧分配内存失败,需要额外释放掉之前存储的旧数据

??? 8 months ago
parent
commit
477a48c0af
1 changed files with 7 additions and 4 deletions
  1. 7 4
      components/network/websocket/luat_lib_websocket.c

+ 7 - 4
components/network/websocket/luat_lib_websocket.c

@@ -113,13 +113,16 @@ int l_websocket_callback(lua_State *L, void *ptr)
 			
 			size_t new_len = websocket_ctrl->frame_buffer_len + pkg.plen;
 			char *new_buf = luat_heap_realloc(websocket_ctrl->frame_buffer, new_len);
-			if (!new_buf)
-			{
-				LLOGE("not continuation");
+			if (!new_buf) {
+				LLOGE("realloc failed for continuation frame");
 				luat_heap_free(raw);
+				luat_heap_free(websocket_ctrl->frame_buffer); // 释放旧内存
+				websocket_ctrl->frame_buffer = NULL;
+				websocket_ctrl->frame_buffer_len = 0;
+				websocket_ctrl->is_fragmenting = 0; // 重置状态
 				break;
 			}
-			websocket_ctrl->frame_buffer = new_buf;
+			websocket_ctrl->frame_buffer = new_buf; // 更新指针
 			memcpy(websocket_ctrl->frame_buffer + websocket_ctrl->frame_buffer_len,
 				pkg.payload, pkg.plen);
 			websocket_ctrl->frame_buffer_len = new_len;