fix 4224:form entity too large casue run out of memory

This commit is contained in:
Anker Jam 2020-10-18 23:18:13 +08:00
parent 140a4b90a3
commit c510926cb8
3 changed files with 12 additions and 5 deletions

View File

@ -266,7 +266,7 @@ func (input *BeegoInput) SetData(key, val interface{}) {
// ParseFormOrMulitForm parseForm or parseMultiForm based on Content-type
func (input *BeegoInput) ParseFormOrMulitForm(maxMemory int64) error {
return (*context.BeegoInput)(input).ParseFormOrMulitForm(maxMemory)
return (*context.BeegoInput)(input).ParseFormOrMultiForm(maxMemory)
}
// Bind data from request.Form[key] to dest

View File

@ -420,10 +420,11 @@ func (input *BeegoInput) SetData(key, val interface{}) {
input.data[key] = val
}
// ParseFormOrMulitForm parseForm or parseMultiForm based on Content-type
func (input *BeegoInput) ParseFormOrMulitForm(maxMemory int64) error {
// ParseFormOrMultiForm parseForm or parseMultiForm based on Content-type
func (input *BeegoInput) ParseFormOrMultiForm(maxMemory int64) error {
// Parse the body depending on the content type.
if strings.Contains(input.Header("Content-Type"), "multipart/form-data") {
input.Context.Request.Body = http.MaxBytesReader(input.Context.ResponseWriter, input.Context.Request.Body, maxMemory)
if err := input.Context.Request.ParseMultipartForm(maxMemory); err != nil {
return errors.New("Error parsing request body:" + err.Error())
}

View File

@ -666,6 +666,7 @@ func (p *ControllerRegister) ServeHTTP(rw http.ResponseWriter, r *http.Request)
}
func (p *ControllerRegister) serveHttp(ctx *beecontext.Context) {
var err error
startTime := time.Now()
r := ctx.Request
rw := ctx.ResponseWriter.ResponseWriter
@ -718,12 +719,17 @@ func (p *ControllerRegister) serveHttp(ctx *beecontext.Context) {
}
ctx.Input.CopyBody(p.cfg.MaxMemory)
}
ctx.Input.ParseFormOrMulitForm(p.cfg.MaxMemory)
err = ctx.Input.ParseFormOrMultiForm(p.cfg.MaxMemory)
if err != nil {
logs.Error(errors.New("payload too large"))
exception("413", ctx)
goto Admin
}
}
// session init
if p.cfg.WebConfig.Session.SessionOn {
var err error
ctx.Input.CruSession, err = GlobalSessions.SessionStart(rw, r)
if err != nil {
logs.Error(err)