Fix protocol input validation

This commit is contained in:
世界
2026-10-09 12:36:03 +08:00
parent a0d775ea66
commit 52f9bad034
22 changed files with 165 additions and 71 deletions
+13 -5
View File
@@ -264,16 +264,24 @@ func (j *ClientHello) parseExtensions(exs []byte) error {
return &ParseError{LengthErr, 19}
}
versionsLen := int(sex[0])
for i := 0; i < versionsLen; i += 2 {
versions = append(versions, binary.BigEndian.Uint16(sex[1:][i:]))
sex = sex[versionExtensionHeaderLen:]
if len(sex) < versionsLen {
return &ParseError{LengthErr, 21}
}
for i := range versionsLen / 2 {
versions = append(versions, binary.BigEndian.Uint16(sex[i*2:]))
}
case signatureAlgorithmsExtensionType:
if len(sex) < signatureAlgorithmsExtensionHeaderLen {
return &ParseError{LengthErr, 20}
}
ssaLen := binary.BigEndian.Uint16(sex)
for i := 0; i < int(ssaLen); i += 2 {
signatureAlgorithms = append(signatureAlgorithms, binary.BigEndian.Uint16(sex[2:][i:]))
ssaLen := int(binary.BigEndian.Uint16(sex))
sex = sex[signatureAlgorithmsExtensionHeaderLen:]
if len(sex) < ssaLen {
return &ParseError{LengthErr, 22}
}
for i := range ssaLen / 2 {
signatureAlgorithms = append(signatureAlgorithms, binary.BigEndian.Uint16(sex[i*2:]))
}
}
exs = exs[4+exLen:]