go-sql-driver / go-sql-driver/mysql

handleOkPacket panic: runtime error: slice bounds out of range

Open
#878 5 comments 0 reactions 0 assignees View on GitHub
waiting for reply
Dominant language
Go
Stars
15.3k
Forks
2.3k
Avg merge
2h 23m
Merged PRs (30d)
10

Description

### Issue description
Encountered panic, seems len(data) can be less then 1 but was not checked?

```golang
// Ok Packet
// http://dev.mysql.com/doc/internals/en/generic-response-packets.html#packet-OK_Packet
func (mc *mysqlConn) handleOkPacket(data []byte) error {
var n, m int

// 0x00 [1 byte]

// Affected rows [Length Coded Binary]
mc.affectedRows, _, n = readLengthEncodedInteger(data[1:])

// Insert id [Length Coded Binary]
mc.insertId, _, m = readLengthEncodedInteger(data[1+n:])

// server_status [2 bytes]
mc.status = readStatus(data[1+n+m : 1+n+m+2])
if err := mc.discardResults(); err != nil {
return err
}

// warning count [2 bytes]
if !mc.strict {
return nil
}

pos := 1 + n + m + 2
if binary.LittleEndian.Uint16(data[pos:pos+2]) > 0 {
return mc.getWarnings()
}
return nil
}
```

```
panic: runtime error: slice bounds out of range
goroutine 132643 [running]:
aliyun/serverless/admin-service/vendor/github.com/go-sql-driver/mysql.(*mysqlConn).handleOkPacket(0xc420a4f290, 0xc4206fc004, 0x1, 0xffc, 0x0, 0x0)
/go/src/aliyun/serverless/admin-service/vendor/github.com/go-sql-driver/mysql/packets.go:583 +0x230
aliyun/serverless/admin-service/vendor/github.com/go-sql-driver/mysql.(*mysqlConn).readResultSetHeaderPacket(0xc420a4f290, 0x3, 0xc420196000, 0x2d0)
```

### Example code
```go
rowsX, err := w.db.QueryContext(ctx, querySQL)
if err != nil {
w.logger.Errorf("Failed to make query %s due to %v", queryName, err)
return err
}
```

### Error log
```
If you have an error log, please paste it here.
```

### Configuration
*Driver version (or git SHA):
version: commit a0583e0143b1624142adab07e0e97fe106d99561

*Go version:* run `go version` in your console
go version go1.8 linux/amd64

*Server version:* E.g. MySQL 5.6, MariaDB 10.0.20
Not a Mysql SQL, only compatible to make mysql queries

*Server OS:* E.g. Debian 8.1 (Jessie), Windows 10
NA

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.