Skip to content

Commit fbb8f2a

Browse files
committed
fix readLengthEncodedInteger w\ n > 1
Fixes Issue #37 Fixes Issue #38
1 parent e6e2205 commit fbb8f2a

File tree

2 files changed

+29
-6
lines changed

2 files changed

+29
-6
lines changed

driver_test.go

+23
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,29 @@ func TestString(t *testing.T) {
310310

311311
mustExec(t, db, "DROP TABLE IF EXISTS test")
312312
}
313+
314+
// BLOB
315+
mustExec(t, db, "CREATE TABLE test (id int, value BLOB) CHARACTER SET utf8 COLLATE utf8_unicode_ci")
316+
317+
id := 2
318+
in = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, " +
319+
"sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, " +
320+
"sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. " +
321+
"Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. " +
322+
"Lorem ipsum dolor sit amet, consetetur sadipscing elitr, " +
323+
"sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, " +
324+
"sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. " +
325+
"Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."
326+
mustExec(t, db, ("INSERT INTO test VALUES (?, ?)"), id, in)
327+
328+
err = db.QueryRow("SELECT value FROM test WHERE id = ?", id).Scan(&out)
329+
if err != nil {
330+
t.Fatalf("Error on BLOB-Query: %v", err)
331+
} else if out != in {
332+
t.Errorf("BLOB: %s != %s", in, out)
333+
}
334+
335+
return
313336
}
314337

315338
func TestNULL(t *testing.T) {

utils.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ func skipLengthEnodedString(b []byte) (int, error) {
183183
}
184184

185185
func readLengthEncodedInteger(b []byte) (num uint64, isNull bool, n int) {
186-
switch (b)[0] {
186+
switch b[0] {
187187

188188
// 251: NULL
189189
case 0xfb:
@@ -212,15 +212,15 @@ func readLengthEncodedInteger(b []byte) (num uint64, isNull bool, n int) {
212212

213213
switch n - 1 {
214214
case 2:
215-
num = uint64(b[0]) | uint64(b[1])<<8
215+
num = uint64(b[1]) | uint64(b[2])<<8
216216
return
217217
case 3:
218-
num = uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16
218+
num = uint64(b[1]) | uint64(b[2])<<8 | uint64(b[3])<<16
219219
return
220220
default:
221-
num = uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 |
222-
uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 |
223-
uint64(b[6])<<48 | uint64(b[7])<<54
221+
num = uint64(b[1]) | uint64(b[2])<<8 | uint64(b[3])<<16 |
222+
uint64(b[4])<<24 | uint64(b[5])<<32 | uint64(b[6])<<40 |
223+
uint64(b[7])<<48 | uint64(b[8])<<54
224224
}
225225
return
226226
}

0 commit comments

Comments
 (0)