Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Z
ZLMediaKit
概览
Overview
Details
Activity
Cycle Analytics
版本库
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
问题
0
Issues
0
列表
Board
标记
里程碑
合并请求
0
Merge Requests
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
Snippets
成员
Collapse sidebar
Close sidebar
活动
图像
聊天
创建新问题
作业
提交
Issue Boards
Open sidebar
张翔宇
ZLMediaKit
Commits
798858aa
Commit
798858aa
authored
6 years ago
by
xiongziliang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修复content-length为0时的bug
parent
61966292
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
14 行增加
和
3 行删除
+14
-3
src/Http/HttpSession.cpp
+14
-3
没有找到文件。
src/Http/HttpSession.cpp
查看文件 @
798858aa
...
...
@@ -620,19 +620,27 @@ inline bool HttpSession::emitHttpEvent(bool doInvoke){
inline
bool
HttpSession
::
Handle_Req_POST
(
int64_t
&
content_len
)
{
//////////////获取HTTP POST Content/////////////
GET_CONFIG_AND_REGISTER
(
uint32_t
,
reqSize
,
Config
::
Http
::
kMaxReqSize
);
int
realContentLen
=
atoi
(
m_parser
[
"Content-Length"
].
data
());
int
realContentLen
=
m_parser
[
"Content-Length"
].
empty
()
?
-
1
:
atoi
(
m_parser
[
"Content-Length"
].
data
());
int
iContentLen
=
realContentLen
;
if
(
iContentLen
>
reqSize
){
//Content大小超过限制,那么我们把这个http post请求当做不限制content长度来处理
//这种情况下,用于文件post很有必要,否则内存可能溢出
iContentLen
=
0
;
iContentLen
=
-
1
;
}
GET_CONFIG_AND_REGISTER
(
uint32_t
,
reqCnt
,
Config
::
Http
::
kMaxReqCount
);
bool
bClose
=
(
strcasecmp
(
m_parser
[
"Connection"
].
data
(),
"close"
)
==
0
)
||
(
++
m_iReqCnt
>
reqCnt
);
if
(
iContentLen
==
0
){
emitHttpEvent
(
true
);
return
!
bClose
;
}
if
(
iContentLen
>
0
){
//返回固定长度的content
content_len
=
iContentLen
;
auto
parserCopy
=
m_parser
;
m_contentCallBack
=
[
this
,
parserCopy
](
const
string
&
content
){
m_contentCallBack
=
[
this
,
parserCopy
,
bClose
](
const
string
&
content
){
//恢复http头
m_parser
=
parserCopy
;
//设置content
...
...
@@ -642,6 +650,9 @@ inline bool HttpSession::Handle_Req_POST(int64_t &content_len) {
//清空数据,节省内存
m_parser
.
Clear
();
//m_contentCallBack是不可持续的,收到一次content后就销毁
if
(
bClose
){
shutdown
();
}
return
false
;
};
}
else
{
...
...
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论