Browse Source

Fix: Apply mutex when visiting Attributes as well (#3921)

https://github.com/XTLS/Xray-core/pull/3921#issuecomment-2445689462
pull/3955/head
风扇滑翔翼 3 weeks ago committed by GitHub
parent
commit
9f8bb47633
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 2
      common/protocol/http/sniff.go
  2. 16
      common/session/session.go

2
common/protocol/http/sniff.go

@ -63,7 +63,7 @@ func SniffHTTP(b []byte, c context.Context) (*SniffHeader, error) {
ShouldSniffAttr := true
// If content.Attributes have information, that means it comes from HTTP inbound PlainHTTP mode.
// It will set attributes, so skip it.
if content == nil || len(content.Attributes) != 0 {
if content == nil || content.AttributeLen() != 0 {
ShouldSniffAttr = false
}
if err := beginWithHTTPMethod(b); err != nil {

16
common/session/session.go

@ -128,8 +128,24 @@ func (c *Content) SetAttribute(name string, value string) {
// Attribute retrieves additional string attributes from content.
func (c *Content) Attribute(name string) string {
c.mu.Lock()
c.isLocked = true
defer func() {
c.isLocked = false
c.mu.Unlock()
}()
if c.Attributes == nil {
return ""
}
return c.Attributes[name]
}
func (c *Content) AttributeLen() int {
c.mu.Lock()
c.isLocked = true
defer func() {
c.isLocked = false
c.mu.Unlock()
}()
return len(c.Attributes)
}
Loading…
Cancel
Save