-
Notifications
You must be signed in to change notification settings - Fork 38
Open
Description
I noticed redisgraph-go deserializes integers into int instead of int64. Depending on the system, int may be either 64 or 32 bits long. This can cause overflows for larger values, e.g. Unix timestamps beyond Y2038.
Tested on Raspberry Pi Zero W (ARMv6):
package main
import (
"fmt"
"log"
"github.com/gomodule/redigo/redis"
rg "github.com/redislabs/redisgraph-go"
)
func main() {
conn, _ := redis.Dial("tcp", "192.168.1.100:6379")
defer conn.Close()
graph := rg.GraphNew("test", conn)
graph.Delete()
var t int64 = 2147483648
q1 := fmt.Sprintf(`CREATE (:Person{name: 'John', time_created: %d})`, t)
if _, err := graph.Query(q1); err != nil {
log.Fatal(err)
}
q2 := `MATCH (p:Person) RETURN p.time_created`
result, err := graph.Query(q2)
if err != nil {
log.Fatal(err)
}
result.PrettyPrint()
}Expected output:
+----------------+
| p.time_created |
+----------------+
| 2147483648 |
+----------------+
Actual output:
+----------------+
| p.time_created |
+----------------+
| 0 |
+----------------+
Calling reflect.TypeOf on the record value returns int.
Note that the node had to be added using a string query, since the other method doesn't accept int64 properties, e.g.:
john := rg.Node{
Label: "Person",
Properties: map[string]interface{}{
"name": "John",
"time_created": time.Now().Unix(),
},
}
graph.AddNode(&john)
graph.Commit()causes a panic:
panic: Unrecognized type to convert to string
goroutine 1 [running]:
github.com/redislabs/redisgraph-go.ToString(0x60b4a0, 0xc0000b24a0, 0xc000107b40, 0x2)
/home/tomek/.local/go/pkg/mod/github.com/redislabs/[email protected]+incompatible/utils.go:40 +0x317
github.com/redislabs/redisgraph-go.Node.Encode(0x0, 0x64bfa4, 0x6, 0xc0000b24d0, 0xa, 0xc00009aae0, 0xc0000fe000, 0x10, 0x203000)
/home/tomek/.local/go/pkg/mod/github.com/redislabs/[email protected]+incompatible/node.go:70 +0x23d
github.com/redislabs/redisgraph-go.(*Graph).Commit(0xc0000fe000, 0xc00009aab0, 0xc0000b24d0, 0xa)
/home/tomek/.local/go/pkg/mod/github.com/redislabs/[email protected]+incompatible/graph.go:91 +0x19e
main.main()
/tmp/rgtest/main.go:30 +0x5a5
exit status 2
Metadata
Metadata
Assignees
Labels
No labels