Skip to content

runtime error: slice bounds out of range in packets.go #36

Closed
@timnash

Description

@timnash

Trying to ApacheBench test a basic page created with Go, and I get this error:

2013/03/05 23:27:03 http: panic serving ipaddress:58369: runtime error: slice bounds out of range
/usr/local/go/src/pkg/net/http/server.go:589 (0x43eb1b)
        _func_004: buf.Write(debug.Stack())
/usr/local/go/src/pkg/runtime/proc.c:1443 (0x410aab)
        panic: reflect·call(d->fn, d->args, d->siz);
/usr/local/go/src/pkg/runtime/runtime.c:128 (0x411577)
        panicstring: runtime·panic(err);
/usr/local/go/src/pkg/runtime/runtime.c:91 (0x411448)
        panicslice: runtime·panicstring("slice bounds out of range");
/usr/local/go/src/pkg/github.com/Go-SQL-Driver/MySQL/packets.go:133 (0x44b2a6)
        com/Go-SQL-Driver/MySQL.(*mysqlConn).readInitPacket: mc.cipher = append(mc.cipher, data[pos:pos+12]...)
/usr/local/go/src/pkg/github.com/Go-SQL-Driver/MySQL/driver.go:46 (0x44a38a)
        com/Go-SQL-Driver/MySQL.(*mysqlDriver).Open: err = mc.readInitPacket()
/usr/local/go/src/pkg/database/sql/sql.go:248 (0x4435bd)
        (*DB).conn: return db.driver.Open(db.dsn)
/usr/local/go/src/pkg/database/sql/sql.go:310 (0x443b10)
        (*DB).prepare: ci, err := db.conn()
/usr/local/go/src/pkg/database/sql/sql.go:295 (0x443a33)
        (*DB).Prepare: stmt, err = db.prepare(query)
/usr/local/go/src/pkg/database/sql/sql.go:380 (0x444493)
        (*DB).Query: stmt, err := db.Prepare(query)
/myfolder/test.go:13 (0x400cd0)
        wwwHandler: result, e := db.Query("SELECT * FROM s WHERE sid=?",sid)
/myfolder/test.go:35 (0x401406)
        _func_001: wwwHandler(w, r, db)
/usr/local/go/src/pkg/net/http/server.go:703 (0x432964)
        HandlerFunc.ServeHTTP: f(w, r)
/usr/local/go/src/pkg/net/http/server.go:941 (0x4337b8)
        (*ServeMux).ServeHTTP: mux.handler(r).ServeHTTP(w, r)
/usr/local/go/src/pkg/net/http/server.go:669 (0x432777)
        (*conn).serve: handler.ServeHTTP(w, w.req)
/usr/local/go/src/pkg/runtime/proc.c:271 (0x40ebb1)
        goexit: runtime·goexit(void)

Here's my code:

package main

import (
    "fmt"
    "net/http"
    "database/sql"
    _ "github.com/Go-SQL-Driver/MySQL"
)

func wwwHandler(w http.ResponseWriter, r *http.Request, db *sql.DB) {
    for i := 0; i < 10; i++ {
        sid := 1
        result, e := db.Query("SELECT * FROM s WHERE sid=?",sid)
        if e != nil {
            panic(e.Error())
        }
        result.Next()
        var resultsid, created, posted, title, above_the_fold, below_the_fold sql.NullString
        var draft_or_final bool
        err := result.Scan(&resultsid,&created,&posted,&title,&above_the_fold,&below_the_fold,&draft_or_final)
        if err != nil {
            panic(err.Error())
        }
        fmt.Fprintf(w, "%s%s%s%s%s",resultsid.String,created.String,title.String,above_the_fold.String,below_the_fold.String)   
    }
}

func main() {
    db, e := sql.Open("mysql", "username:password@/dbname")
    if e != nil {
        panic(e.Error())
    }   
    defer db.Close()
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        wwwHandler(w, r, db)
    })  
    http.ListenAndServe(":80",nil)  
}

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions