diff --git a/propagation.go b/propagation.go index f599ba17..d8db08d9 100644 --- a/propagation.go +++ b/propagation.go @@ -215,11 +215,10 @@ func (p *BinaryPropagator) Inject( return nil } -// These are intended to be unimaginably high: above this number we declare -// the data is corrupted, to protect against running out of memory +// W3C limits https://github.com/w3c/baggage/blob/master/baggage/HTTP_HEADER_FORMAT.md#limits const ( - maxBinaryBaggage = 1024 * 1024 - maxBinaryValueLen = 100 * 1024 * 1024 + maxBinaryBaggage = 180 + maxBinaryNameValueLen = 4096 ) // Extract implements Extractor of BinaryPropagator @@ -265,9 +264,6 @@ func (p *BinaryPropagator) Extract(abstractCarrier interface{}) (SpanContext, er if err := binary.Read(carrier, binary.BigEndian, &keyLen); err != nil { return emptyContext, opentracing.ErrSpanContextCorrupted } - if keyLen > maxBinaryValueLen { - return emptyContext, opentracing.ErrSpanContextCorrupted - } buf.Reset() buf.Grow(int(keyLen)) if n, err := io.CopyN(buf, carrier, int64(keyLen)); err != nil || int32(n) != keyLen { @@ -278,7 +274,7 @@ func (p *BinaryPropagator) Extract(abstractCarrier interface{}) (SpanContext, er if err := binary.Read(carrier, binary.BigEndian, &valLen); err != nil { return emptyContext, opentracing.ErrSpanContextCorrupted } - if valLen > maxBinaryValueLen { + if keyLen+valLen > maxBinaryNameValueLen { return emptyContext, opentracing.ErrSpanContextCorrupted } buf.Reset()