Commit 5aa64c36 by xiongziliang

修复http拆包bug

parent 40c1ea9b
...@@ -41,7 +41,7 @@ void HttpRequestSplitter::input(const char *data,uint64_t len) { ...@@ -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: ...@@ -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: ...@@ -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: ...@@ -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;
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论