Fix padding

This commit is contained in:
Sergei Maklagin
2026-02-22 16:22:52 +03:00
parent 18b1101fbe
commit 3d16078651

View File

@@ -8,7 +8,6 @@ import (
"io"
"net"
"net/http"
"net/url"
"os"
"strconv"
"strings"
@@ -117,18 +116,9 @@ func (s *Server) ServeHTTP(writer http.ResponseWriter, request *http.Request) {
}
ApplyXPaddingToHeader(writer.Header(), config)
validRange := s.options.GetNormalizedXPaddingBytes()
paddingLength := 0
referrer := request.Header.Get("Referer")
if referrer != "" {
if referrerURL, err := url.Parse(referrer); err == nil {
// Browser dialer cannot control the host part of referrer header, so only check the query
paddingLength = len(referrerURL.Query().Get("x_padding"))
}
} else {
paddingLength = len(request.URL.Query().Get("x_padding"))
}
if int32(paddingLength) < validRange.From || int32(paddingLength) > validRange.To {
s.logger.ErrorContext(request.Context(), "invalid x_padding length:", int32(paddingLength))
paddingValue, paddingPlacement := ExtractXPaddingFromRequest(&s.options.V2RayXHTTPBaseOptions, request, s.options.XPaddingObfsMode)
if !IsPaddingValid(&s.options.V2RayXHTTPBaseOptions, paddingValue, validRange.From, validRange.To, PaddingMethod(s.options.XPaddingMethod)) {
s.logger.ErrorContext(request.Context(), "invalid padding ("+paddingPlacement+") length:", int32(len(paddingValue)))
writer.WriteHeader(http.StatusBadRequest)
return
}