Open climech opened 3 years ago
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.
redisgraph-go
int
int64
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.
reflect.TypeOf
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/redisgraph-go@v2.0.2+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/redisgraph-go@v2.0.2+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/redisgraph-go@v2.0.2+incompatible/graph.go:91 +0x19e main.main() /tmp/rgtest/main.go:30 +0x5a5 exit status 2
Is this being worked on? I also encountered this issue, which is caused by query_result.go calling redis.Int(v, nil) instead of redis.Int64(v, nil).
redis.Int(v, nil)
redis.Int64(v, nil)
I noticed
redisgraph-go
deserializes integers intoint
instead ofint64
. 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):
Expected output:
Actual output:
Calling
reflect.TypeOf
on the record value returnsint
.Note that the node had to be added using a string query, since the other method doesn't accept
int64
properties, e.g.:causes a panic: