1
0
mirror of https://github.com/astaxie/beego.git synced 2024-11-22 04:40:55 +00:00

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 // ParseFormOrMulitForm parseForm or parseMultiForm based on Content-type
func (input *BeegoInput) ParseFormOrMulitForm(maxMemory int64) error { 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 // 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 input.data[key] = val
} }
// ParseFormOrMulitForm parseForm or parseMultiForm based on Content-type // ParseFormOrMultiForm parseForm or parseMultiForm based on Content-type
func (input *BeegoInput) ParseFormOrMulitForm(maxMemory int64) error { func (input *BeegoInput) ParseFormOrMultiForm(maxMemory int64) error {
// Parse the body depending on the content type. // Parse the body depending on the content type.
if strings.Contains(input.Header("Content-Type"), "multipart/form-data") { 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 { if err := input.Context.Request.ParseMultipartForm(maxMemory); err != nil {
return errors.New("Error parsing request body:" + err.Error()) 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) { func (p *ControllerRegister) serveHttp(ctx *beecontext.Context) {
var err error
startTime := time.Now() startTime := time.Now()
r := ctx.Request r := ctx.Request
rw := ctx.ResponseWriter.ResponseWriter rw := ctx.ResponseWriter.ResponseWriter
@ -718,12 +719,17 @@ func (p *ControllerRegister) serveHttp(ctx *beecontext.Context) {
} }
ctx.Input.CopyBody(p.cfg.MaxMemory) 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 // session init
if p.cfg.WebConfig.Session.SessionOn { if p.cfg.WebConfig.Session.SessionOn {
var err error
ctx.Input.CruSession, err = GlobalSessions.SessionStart(rw, r) ctx.Input.CruSession, err = GlobalSessions.SessionStart(rw, r)
if err != nil { if err != nil {
logs.Error(err) logs.Error(err)