Skip to content

Commit 4feb168

Browse files
author
shij
authored
Merge branch 'SagerNet:dev' into dev
2 parents 8d24297 + d852e9c commit 4feb168

File tree

3 files changed

+43
-6
lines changed

3 files changed

+43
-6
lines changed

common/buf/ptr.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//go:build !disable_unsafe
1+
//go:build !disable_unsafe && go1.21
22

33
package buf
44

@@ -23,7 +23,7 @@ func init() {
2323
if !common.UnsafeBuffer {
2424
return
2525
}
26-
debugVars := *(*[]dbgVar)(unsafe.Pointer(&dbgvars))
26+
debugVars := *(*[]*dbgVar)(unsafe.Pointer(&dbgvars))
2727
for _, v := range debugVars {
2828
if v.name == "invalidptr" {
2929
*v.value = 0

common/buf/ptr_go120.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
//go:build !disable_unsafe && !go1.21
2+
3+
package buf
4+
5+
import (
6+
"unsafe"
7+
8+
"github.com/sagernet/sing/common"
9+
)
10+
11+
type dbgVar struct {
12+
name string
13+
value *int32
14+
}
15+
16+
//go:linkname dbgvars runtime.dbgvars
17+
var dbgvars any
18+
19+
// go.info.runtime.dbgvars: relocation target go.info.[]github.com/sagernet/sing/common/buf.dbgVar not defined
20+
// var dbgvars []dbgVar
21+
22+
func init() {
23+
if !common.UnsafeBuffer {
24+
return
25+
}
26+
debugVars := *(*[]dbgVar)(unsafe.Pointer(&dbgvars))
27+
for _, v := range debugVars {
28+
if v.name == "invalidptr" {
29+
*v.value = 0
30+
return
31+
}
32+
}
33+
panic("can't disable invalidptr")
34+
}

protocol/socks/packet.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,15 +89,18 @@ func (c *AssociatePacketConn) Write(b []byte) (n int, err error) {
8989
return c.WriteTo(b, c.remoteAddr)
9090
}
9191

92-
func (c *AssociatePacketConn) ReadPacket(buffer *buf.Buffer) (M.Socksaddr, error) {
93-
destination, err := c.NetPacketConn.ReadPacket(buffer)
92+
func (c *AssociatePacketConn) ReadPacket(buffer *buf.Buffer) (destination M.Socksaddr, err error) {
93+
destination, err = c.NetPacketConn.ReadPacket(buffer)
9494
if err != nil {
9595
return M.Socksaddr{}, err
9696
}
9797
c.remoteAddr = destination
9898
buffer.Advance(3)
99-
dest, err := M.SocksaddrSerializer.ReadAddrPort(buffer)
100-
return dest, err
99+
destination, err = M.SocksaddrSerializer.ReadAddrPort(buffer)
100+
if err != nil {
101+
return
102+
}
103+
return destination.Unwrap(), nil
101104
}
102105

103106
func (c *AssociatePacketConn) WritePacket(buffer *buf.Buffer, destination M.Socksaddr) error {

0 commit comments

Comments
 (0)