fix(vmess): bool fuzzy parsing for sharing link

This commit is contained in:
mzz2017 2023-04-05 18:00:37 +08:00
parent ec3a63b689
commit 7cb71c501f
2 changed files with 54 additions and 0 deletions

View File

@ -0,0 +1,51 @@
/*
* SPDX-License-Identifier: AGPL-3.0-only
* Copyright (c) 2023, daeuniverse Organization <dae@v2raya.org>
*/
package json
import (
jsoniter "github.com/json-iterator/go"
"unsafe"
)
type FuzzyBoolDecoder struct {
}
func (decoder *FuzzyBoolDecoder) Decode(ptr unsafe.Pointer, iter *jsoniter.Iterator) {
valueType := iter.WhatIsNext()
switch valueType {
case jsoniter.NumberValue:
*((*bool)(ptr)) = iter.ReadFloat64() != 0
case jsoniter.StringValue:
str := iter.ReadString()
switch str {
case "", "0":
*((*bool)(ptr)) = false
default:
*((*bool)(ptr)) = true
}
case jsoniter.BoolValue:
*((*bool)(ptr)) = iter.ReadBool()
// In order to stay consistent with the other decoders here, leaving arrays and objects out for now.
// case jsoniter.ObjectValue:
// iter.Skip()
// *((*bool)(ptr)) = true
// case jsoniter.ArrayValue:
// var nonEmptyArray bool
// iter.ReadArrayCB(
// func(*jsoniter.Iterator) bool {
// iter.Skip()
// nonEmptyArray = true
// return true
// },
// )
// *((*bool)(ptr)) = nonEmptyArray
case jsoniter.NilValue:
iter.Skip()
*((*bool)(ptr)) = false
default:
iter.ReportError("FuzzyBoolDecoder", "not number, string or bool")
}
}

View File

@ -9,6 +9,8 @@ package main
import (
"github.com/daeuniverse/dae/cmd"
"github.com/daeuniverse/dae/common/json"
jsoniter "github.com/json-iterator/go"
"github.com/json-iterator/go/extra"
"net/http"
"os"
@ -16,6 +18,7 @@ import (
)
func main() {
jsoniter.RegisterTypeDecoder("bool", &json.FuzzyBoolDecoder{})
extra.RegisterFuzzyDecoders()
http.DefaultClient.Timeout = 30 * time.Second