@@ -42,6 +42,10 @@ const (
4242 EventTypeHeader = "X-Github-Event"
4343 // DeliveryIDHeader is the GitHub header key used to pass the unique ID for the webhook event.
4444 DeliveryIDHeader = "X-Github-Delivery"
45+
46+ // maxPayloadSize is the maximum size of a GitHub webhook payload.
47+ // GitHub documents a 25 MB limit for webhook payloads.
48+ maxPayloadSize = 25 * 1024 * 1024
4549)
4650
4751var (
@@ -199,9 +203,12 @@ func ValidatePayloadFromBody(contentType string, readable io.Reader, signature s
199203 switch contentType {
200204 case "application/json" :
201205 var err error
202- if body , err = io .ReadAll (readable ); err != nil {
206+ if body , err = io .ReadAll (io . LimitReader ( readable , maxPayloadSize + 1 ) ); err != nil {
203207 return nil , err
204208 }
209+ if int64 (len (body )) > maxPayloadSize {
210+ return nil , errors .New ("webhook payload exceeds maximum allowed size" )
211+ }
205212
206213 // If the content type is application/json,
207214 // the JSON payload is just the original body.
@@ -213,9 +220,12 @@ func ValidatePayloadFromBody(contentType string, readable io.Reader, signature s
213220 const payloadFormParam = "payload"
214221
215222 var err error
216- if body , err = io .ReadAll (readable ); err != nil {
223+ if body , err = io .ReadAll (io . LimitReader ( readable , maxPayloadSize + 1 ) ); err != nil {
217224 return nil , err
218225 }
226+ if int64 (len (body )) > maxPayloadSize {
227+ return nil , errors .New ("webhook payload exceeds maximum allowed size" )
228+ }
219229
220230 // If the content type is application/x-www-form-urlencoded,
221231 // the JSON payload will be under the "payload" form param.
0 commit comments