修复http拆包bug

This commit is contained in:
xiongziliang 2018-09-28 21:16:39 +08:00
parent 40c1ea9b4c
commit 5aa64c3651
1 changed files with 8 additions and 4 deletions

View File

@ -41,7 +41,7 @@ void HttpRequestSplitter::input(const char *data,uint64_t len) {
len = _remain_data.size(); len = _remain_data.size();
} }
splitPacket: splitPacket:
/*确保ptr最后一个字节是0防止strstr越界 /*确保ptr最后一个字节是0防止strstr越界
*ZLToolKit确保内存最后一个字节是保留未使用字节并置0 *ZLToolKit确保内存最后一个字节是保留未使用字节并置0
@ -75,7 +75,8 @@ splitPacket:
if(_content_len == 0){ if(_content_len == 0){
//尚未找到http头缓存定位到剩余数据部分 //尚未找到http头缓存定位到剩余数据部分
_remain_data.assign(ptr,remain); string str(ptr,remain);
_remain_data = str;
return; return;
} }
@ -84,7 +85,8 @@ splitPacket:
//数据按照固定长度content处理 //数据按照固定长度content处理
if(remain < _content_len){ if(remain < _content_len){
//数据不够,缓存定位到剩余数据部分 //数据不够,缓存定位到剩余数据部分
_remain_data.assign(ptr,remain); string str(ptr,remain);
_remain_data = str;
return; return;
} }
//收到content数据并且接受content完毕 //收到content数据并且接受content完毕
@ -97,12 +99,14 @@ splitPacket:
if(remain > 0){ if(remain > 0){
//还有数据没有处理完毕 //还有数据没有处理完毕
_remain_data.assign(ptr,remain); string str(ptr,remain);
_remain_data = str;
data = ptr = (char *)_remain_data.data(); data = ptr = (char *)_remain_data.data();
len = _remain_data.size(); len = _remain_data.size();
goto splitPacket; goto splitPacket;
} }
_remain_data.clear();
return; return;
} }