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

https://github.com/XTLS/Xray-core/pull/3921#issuecomment-2445689462
This commit is contained in:
风扇滑翔翼 2024-10-30 10:26:43 +08:00 committed by GitHub
parent ceb6eac8e7
commit 9f8bb47633
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 17 additions and 1 deletions

View file

@ -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 {

View file

@ -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)
}