diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index adc51382..2ccc81a8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -46,7 +46,7 @@ jobs: - name: Setup Go uses: actions/setup-go@v5 with: - go-version: ^1.24.5 + go-version: ^1.24.6 - name: Check input version if: github.event_name == 'workflow_dispatch' run: |- @@ -109,7 +109,7 @@ jobs: if: ${{ ! matrix.legacy_go }} uses: actions/setup-go@v5 with: - go-version: ^1.24.5 + go-version: ^1.24.6 - name: Cache Legacy Go if: matrix.require_legacy_go id: cache-legacy-go @@ -294,7 +294,7 @@ jobs: - name: Setup Go uses: actions/setup-go@v5 with: - go-version: ^1.24.5 + go-version: ^1.24.6 - name: Setup Android NDK id: setup-ndk uses: nttld/setup-ndk@v1 @@ -374,7 +374,7 @@ jobs: - name: Setup Go uses: actions/setup-go@v5 with: - go-version: ^1.24.5 + go-version: ^1.24.6 - name: Setup Android NDK id: setup-ndk uses: nttld/setup-ndk@v1 @@ -472,7 +472,7 @@ jobs: if: matrix.if uses: actions/setup-go@v5 with: - go-version: ^1.24.5 + go-version: ^1.24.6 - name: Setup Xcode stable if: matrix.if && github.ref == 'refs/heads/main-next' run: |- diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 1b09ad2a..08d54402 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -28,7 +28,7 @@ jobs: - name: Setup Go uses: actions/setup-go@v5 with: - go-version: ^1.24.5 + go-version: ^1.24.6 - name: golangci-lint uses: golangci/golangci-lint-action@v6 with: diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 00a3f71d..c64398b0 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -25,7 +25,7 @@ jobs: - name: Setup Go uses: actions/setup-go@v5 with: - go-version: ^1.24.5 + go-version: ^1.24.6 - name: Check input version if: github.event_name == 'workflow_dispatch' run: |- @@ -66,7 +66,7 @@ jobs: - name: Setup Go uses: actions/setup-go@v5 with: - go-version: ^1.24.5 + go-version: ^1.24.6 - name: Setup Android NDK if: matrix.os == 'android' uses: nttld/setup-ndk@v1 diff --git a/clients/android b/clients/android index 7384b97f..6db8e06e 160000 --- a/clients/android +++ b/clients/android @@ -1 +1 @@ -Subproject commit 7384b97fdc36a9956f3d43174b89e4697a8ea47d +Subproject commit 6db8e06e8d6c77648e79e3f93bdd41a4d48cc319 diff --git a/clients/apple b/clients/apple index f7883b0f..c5734677 160000 --- a/clients/apple +++ b/clients/apple @@ -1 +1 @@ -Subproject commit f7883b0f3ec26c449cba26b3b1a692f070f5424d +Subproject commit c5734677bdfcba5d2d4faf10c4f10475077a82ab diff --git a/cmd/internal/build_libbox/main.go b/cmd/internal/build_libbox/main.go index 2b81ff36..de470eb3 100644 --- a/cmd/internal/build_libbox/main.go +++ b/cmd/internal/build_libbox/main.go @@ -112,6 +112,8 @@ func buildAndroid() { args = append(args, debugFlags...) } + args = append(args, "-ldflags", "-checklinkname=0") + tags := append(sharedTags, memcTags...) if debugEnabled { tags = append(tags, debugTags...) diff --git a/common/convertor/adguard/convertor.go b/common/convertor/adguard/convertor.go index 68bc9319..3e6d0254 100644 --- a/common/convertor/adguard/convertor.go +++ b/common/convertor/adguard/convertor.go @@ -454,5 +454,5 @@ func parseADGuardIPCIDRLine(ruleLine string) (netip.Prefix, error) { for len(ruleParts) < 4 { ruleParts = append(ruleParts, 0) } - return netip.PrefixFrom(netip.AddrFrom4(*(*[4]byte)(ruleParts)), bitLen), nil + return netip.PrefixFrom(netip.AddrFrom4([4]byte(ruleParts)), bitLen), nil } diff --git a/common/dialer/dialer.go b/common/dialer/dialer.go index 7bf8ff02..bfa8af21 100644 --- a/common/dialer/dialer.go +++ b/common/dialer/dialer.go @@ -111,7 +111,7 @@ func NewWithOptions(options Options) (N.Dialer, error) { dnsQueryOptions.Transport = dnsTransport.Default() } else if options.NewDialer { return nil, E.New("missing domain resolver for domain server address") - } else if !options.DirectOutbound { + } else { deprecated.Report(options.Context, deprecated.OptionMissingDomainResolver) } } diff --git a/common/process/searcher_darwin.go b/common/process/searcher_darwin.go index 16e2c87a..5c1addd5 100644 --- a/common/process/searcher_darwin.go +++ b/common/process/searcher_darwin.go @@ -96,11 +96,11 @@ func findProcessName(network string, ip netip.Addr, port int) (string, error) { switch { case flag&0x1 > 0 && isIPv4: // ipv4 - srcIP = netip.AddrFrom4(*(*[4]byte)(buf[inp+76 : inp+80])) + srcIP = netip.AddrFrom4([4]byte(buf[inp+76 : inp+80])) srcIsIPv4 = true case flag&0x2 > 0 && !isIPv4: // ipv6 - srcIP = netip.AddrFrom16(*(*[16]byte)(buf[inp+64 : inp+80])) + srcIP = netip.AddrFrom16([16]byte(buf[inp+64 : inp+80])) default: continue } diff --git a/dns/transport/local/resolv_darwin_cgo.go b/dns/transport/local/resolv_darwin_cgo.go index e19d087f..bbe4ccfe 100644 --- a/dns/transport/local/resolv_darwin_cgo.go +++ b/dns/transport/local/resolv_darwin_cgo.go @@ -20,8 +20,8 @@ import ( ) func dnsReadConfig(_ context.Context, _ string) *dnsConfig { - var state C.res_state - if C.res_ninit(state) != 0 { + var state C.struct___res_state + if C.res_ninit(&state) != 0 { return &dnsConfig{ servers: defaultNS, search: dnsDefaultSearch(), diff --git a/dns/transport/local/resolv_test.go b/dns/transport/local/resolv_test.go new file mode 100644 index 00000000..546e8408 --- /dev/null +++ b/dns/transport/local/resolv_test.go @@ -0,0 +1,13 @@ +package local + +import ( + "context" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestDNSReadConfig(t *testing.T) { + t.Parallel() + require.NoError(t, dnsReadConfig(context.Background(), "/etc/resolv.conf").err) +} diff --git a/docs/changelog.md b/docs/changelog.md index 1544deb6..e54a9d17 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -2,6 +2,10 @@ icon: material/alert-decagram --- +#### 1.12.1 + +* Fixes and improvements + #### 1.12.0 * Refactor DNS servers **1** diff --git a/docs/migration.md b/docs/migration.md index 50a0655f..86074ac7 100644 --- a/docs/migration.md +++ b/docs/migration.md @@ -351,14 +351,15 @@ DNS servers are refactored for better performance and scalability. ```json { "dns": { - "servers": [ + "rules": [ { - "type": "predefined", - "responses": [ - { - "rcode": "REFUSED" - } - ] + "domain": [ + "example.com" + ], + // other rules + + "action": "predefined", + "rcode": "REFUSED" } ] } @@ -1187,4 +1188,4 @@ which will disrupt the existing `process_path` use cases in Windows. } } } - ``` \ No newline at end of file + ``` diff --git a/docs/migration.zh.md b/docs/migration.zh.md index 255b7069..3a4dde7f 100644 --- a/docs/migration.zh.md +++ b/docs/migration.zh.md @@ -8,7 +8,7 @@ icon: material/arrange-bring-forward DNS 服务器已经重构。 -!!! info "饮用" +!!! info "引用" [DNS 服务器](/configuration/dns/server/) / [旧 DNS 服务器](/configuration/dns/server/legacy/) @@ -351,14 +351,15 @@ DNS 服务器已经重构。 ```json { "dns": { - "servers": [ + "rules": [ { - "type": "predefined", - "responses": [ - { - "rcode": "REFUSED" - } - ] + "domain": [ + "example.com" + ], + // 其它规则 + + "action": "predefined", + "rcode": "REFUSED" } ] } diff --git a/experimental/libbox/pidfd_android.go b/experimental/libbox/pidfd_android.go new file mode 100644 index 00000000..cc7cdd7a --- /dev/null +++ b/experimental/libbox/pidfd_android.go @@ -0,0 +1,19 @@ +package libbox + +import ( + "os" + _ "unsafe" +) + +// https://github.com/SagerNet/sing-box/issues/3233 +// https://github.com/golang/go/issues/70508 +// https://github.com/tailscale/tailscale/issues/13452 + +//go:linkname checkPidfdOnce os.checkPidfdOnce +var checkPidfdOnce func() error + +func init() { + checkPidfdOnce = func() error { + return os.ErrInvalid + } +} diff --git a/go.mod b/go.mod index 6c144604..d19ea379 100644 --- a/go.mod +++ b/go.mod @@ -31,7 +31,7 @@ require ( github.com/sagernet/gomobile v0.1.7 github.com/sagernet/gvisor v0.0.0-20250325023245-7a9c0f5725fb github.com/sagernet/quic-go v0.52.0-beta.1 - github.com/sagernet/sing v0.7.0-beta.2 + github.com/sagernet/sing v0.7.5 github.com/sagernet/sing-dns v0.0.0-00010101000000-000000000000 github.com/sagernet/sing-mux v0.3.2 github.com/sagernet/sing-quic v0.5.0-beta.3 diff --git a/go.sum b/go.sum index 7c34951e..a72c4651 100644 --- a/go.sum +++ b/go.sum @@ -177,8 +177,8 @@ github.com/sagernet/nftables v0.3.0-beta.4/go.mod h1:OQXAjvjNGGFxaTgVCSTRIhYB5/l github.com/sagernet/quic-go v0.52.0-beta.1 h1:hWkojLg64zjV+MJOvJU/kOeWndm3tiEfBLx5foisszs= github.com/sagernet/quic-go v0.52.0-beta.1/go.mod h1:OV+V5kEBb8kJS7k29MzDu6oj9GyMc7HA07sE1tedxz4= github.com/sagernet/sing v0.6.9/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak= -github.com/sagernet/sing v0.7.0-beta.2 h1:UImAKtHGQX205lGYYXKA2qnEeVSml+hKS1oaOwvA14c= -github.com/sagernet/sing v0.7.0-beta.2/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak= +github.com/sagernet/sing v0.7.5 h1:gNMwZCLPqR+4e0g6dwi0sSsrvOmoMjpZgqxKsuJZatc= +github.com/sagernet/sing v0.7.5/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak= github.com/sagernet/sing-mux v0.3.2 h1:meZVFiiStvHThb/trcpAkCrmtJOuItG5Dzl1RRP5/NE= github.com/sagernet/sing-mux v0.3.2/go.mod h1:pht8iFY4c9Xltj7rhVd208npkNaeCxzyXCgulDPLUDA= github.com/sagernet/sing-quic v0.5.0-beta.3 h1:X/acRNsqQNfDlmwE7SorHfaZiny5e67hqIzM/592ric= diff --git a/test/clash_darwin_test.go b/test/clash_darwin_test.go index d4eff13e..013d8b3f 100644 --- a/test/clash_darwin_test.go +++ b/test/clash_darwin_test.go @@ -26,7 +26,7 @@ func defaultRouteIP() (netip.Addr, error) { for _, addr := range addrs { ip := addr.(*net.IPNet).IP if ip.To4() != nil { - return netip.AddrFrom4(*(*[4]byte)(ip)), nil + return netip.AddrFrom4([4]byte(ip)), nil } } diff --git a/transport/v2raywebsocket/writer.go b/transport/v2raywebsocket/writer.go index c08a654f..cd5a5d6a 100644 --- a/transport/v2raywebsocket/writer.go +++ b/transport/v2raywebsocket/writer.go @@ -63,7 +63,7 @@ func (w *Writer) WriteBuffer(buffer *buf.Buffer) error { if !w.isServer { maskKey := rand.Uint32() binary.BigEndian.PutUint32(header[1+payloadBitLength:], maskKey) - ws.Cipher(data, *(*[4]byte)(header[1+payloadBitLength:]), 0) + ws.Cipher(data, [4]byte(header[1+payloadBitLength:]), 0) } return wrapWsError(w.writer.WriteBuffer(buffer))