Skip to content

Commit e74866a

Browse files
committed
Re fixed panic len out of range in rcon.Dial #5
1 parent dac804a commit e74866a

File tree

3 files changed

+26
-24
lines changed

3 files changed

+26
-24
lines changed

CHANGELOG.md

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,18 @@ All notable changes to this project will be documented in this file.
33

44
**ATTN**: This project uses [semantic versioning](http://semver.org/).
55

6-
## [Unreleased
6+
## [Unreleased]
7+
8+
## [v1.3.3] - 2022-05-16
9+
### Fixed
10+
- Added "response from not rcon server" error on auth request (Re fixed panic: runtime error: makeslice: len out of range in rcon.Dial #5).
711

812
## [v1.3.2] - 2022-05-16
913
### Fixed
10-
- Fixed panic: runtime error: makeslice: len out of range in rcon.Dial #5
14+
- Fixed panic: runtime error: makeslice: len out of range in rcon.Dial
15+
16+
### Updated
17+
- Updated golangci linter to 1.42.1 version
1118

1219
## [v1.3.1] - 2021-01-06
1320
### Updated
@@ -78,7 +85,8 @@ changed.
7885
### Added
7986
- Initial implementation.
8087

81-
[Unreleased]: https://github.com/gorcon/rcon/compare/v1.3.2...HEAD
88+
[Unreleased]: https://github.com/gorcon/rcon/compare/v1.3.3...HEAD
89+
[v1.3.3]: https://github.com/gorcon/rcon/compare/v1.3.2...v1.3.3
8290
[v1.3.2]: https://github.com/gorcon/rcon/compare/v1.3.1...v1.3.2
8391
[v1.3.1]: https://github.com/gorcon/rcon/compare/v1.3.0...v1.3.1
8492
[v1.3.0]: https://github.com/gorcon/rcon/compare/v1.2.4...v1.3.0

rcon.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@ const (
5454
)
5555

5656
var (
57+
// ErrAuthNotRCON is returned when got auth response with negative size.
58+
ErrAuthNotRCON = errors.New("response from not rcon server")
59+
5760
// ErrInvalidAuthResponse is returned when we didn't get an auth packet
5861
// back for second read try after discard empty SERVERDATA_RESPONSE_VALUE
5962
// from authentication response.
@@ -184,8 +187,8 @@ func (c *Conn) auth(password string) error {
184187
}
185188

186189
size := response.Size - PacketHeaderSize
187-
if size <= 0 {
188-
size = response.Size
190+
if size < 0 {
191+
return ErrAuthNotRCON
189192
}
190193

191194
// When the server receives an auth request, it will respond with an empty

rcon_test.go

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -22,20 +22,15 @@ func authHandler(c *rcontest.Context) {
2222
case "another":
2323
rcon.NewPacket(rcon.SERVERDATA_AUTH_RESPONSE, 42, "").WriteTo(c.Conn())
2424
case "makeslice":
25-
size := int32(len([]byte("")) + int(rcon.PacketPaddingSize)) // Some minecraft servers does not add header size
25+
size := int32(len([]byte("")))
2626

2727
buffer := bytes.NewBuffer(make([]byte, 0, size+4))
2828

2929
_ = binary.Write(buffer, binary.LittleEndian, size)
3030
_ = binary.Write(buffer, binary.LittleEndian, c.Request().ID)
3131
_ = binary.Write(buffer, binary.LittleEndian, rcon.SERVERDATA_RESPONSE_VALUE)
3232

33-
// Write command body, null terminated ASCII string and an empty ASCIIZ string.
34-
buffer.Write(append([]byte(""), 0x00, 0x00))
35-
3633
buffer.WriteTo(c.Conn())
37-
38-
rcon.NewPacket(rcon.SERVERDATA_AUTH_RESPONSE, c.Request().ID, "").WriteTo(c.Conn())
3934
case c.Server().Settings.Password:
4035
rcon.NewPacket(rcon.SERVERDATA_RESPONSE_VALUE, c.Request().ID, "").WriteTo(c.Conn())
4136
rcon.NewPacket(rcon.SERVERDATA_AUTH_RESPONSE, c.Request().ID, "").WriteTo(c.Conn())
@@ -135,31 +130,27 @@ func TestDial(t *testing.T) {
135130
}
136131
})
137132

138-
t.Run("auth success", func(t *testing.T) {
139-
conn, err := rcon.Dial(server.Addr(), "password")
140-
if err != nil {
141-
t.Errorf("got err %q, want %v", err, nil)
142-
return
143-
}
144-
145-
conn.Close()
146-
})
147-
148133
t.Run("makeslice", func(t *testing.T) {
149134
server := rcontest.NewServer(
150135
rcontest.SetSettings(rcontest.Settings{Password: "makeslice"}),
151136
rcontest.SetAuthHandler(authHandler),
152137
)
138+
defer server.Close()
153139

154-
conn, err := rcon.Dial(server.Addr(), "makeslice")
140+
_, err := rcon.Dial(server.Addr(), "makeslice")
141+
if !errors.Is(err, rcon.ErrAuthNotRCON) {
142+
t.Errorf("got err %q, want %q", err, rcon.ErrAuthNotRCON)
143+
}
144+
})
145+
146+
t.Run("auth success", func(t *testing.T) {
147+
conn, err := rcon.Dial(server.Addr(), "password")
155148
if err != nil {
156149
t.Errorf("got err %q, want %v", err, nil)
157-
server.Close()
158150
return
159151
}
160152

161153
conn.Close()
162-
server.Close()
163154
})
164155
}
165156

0 commit comments

Comments
 (0)