File tree Expand file tree Collapse file tree 3 files changed +43
-6
lines changed
Expand file tree Collapse file tree 3 files changed +43
-6
lines changed Original file line number Diff line number Diff line change 1- //go:build !disable_unsafe
1+ //go:build !disable_unsafe && go1.21
22
33package 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
Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff 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
103106func (c * AssociatePacketConn ) WritePacket (buffer * buf.Buffer , destination M.Socksaddr ) error {
You can’t perform that action at this time.
0 commit comments