From ae9e7aa5f4b1ed98d6befce8f1b0c264bddbc271 Mon Sep 17 00:00:00 2001 From: Sergei Maklagin Date: Sun, 15 Jun 2025 22:21:58 +0300 Subject: [PATCH] Fix Range --- common/xray/json/badoption/range.go | 41 ++++++++++++++++++----------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/common/xray/json/badoption/range.go b/common/xray/json/badoption/range.go index 6390a158..645fda82 100644 --- a/common/xray/json/badoption/range.go +++ b/common/xray/json/badoption/range.go @@ -24,27 +24,36 @@ func (c *Range) MarshalJSON() ([]byte, error) { } func (c *Range) UnmarshalJSON(content []byte) error { + var rangeValue struct { + From int32 `json:"from"` + To int32 `json:"to"` + } var stringValue string err := json.Unmarshal(content, &stringValue) - if err != nil { - return err + if err == nil { + parts := strings.Split(stringValue, "-") + if len(parts) != 2 { + return E.New("invalid length of range parts") + } + from, err := strconv.ParseInt(parts[0], 10, 32) + if err != nil { + return err + } + to, err := strconv.ParseInt(parts[1], 10, 32) + if err != nil { + return err + } + rangeValue.From, rangeValue.To = int32(from), int32(to) + } else { + err := json.Unmarshal(content, &rangeValue) + if err != nil { + return err + } } - parts := strings.Split(stringValue, "-") - if len(parts) != 2 { - return E.New("invalid length of range parts") - } - from, err := strconv.ParseInt(parts[0], 10, 32) - if err != nil { - return err - } - to, err := strconv.ParseInt(parts[1], 10, 32) - if err != nil { - return err - } - if from > to { + if rangeValue.From > rangeValue.To { return E.New("invalid range") } - *c = Range{int32(from), int32(to)} + *c = Range{rangeValue.From, rangeValue.To} return nil }