karlseguin / pg.zig

Native PostgreSQL driver / client for Zig
MIT License
214 stars 16 forks source link

access violation #12

Closed mattn closed 6 months ago

mattn commented 7 months ago

latest commit in zig-0.11 branch might have issue about access violation. But this possibly be my bug.

["REQ",":1",{"kinds":[1]}]
select id, pubkey, created_at, kind, tags, content, sig from event where kind in ($1) order by created_at desc limit 500
["REQ",":1",{"kinds":[1]}]
select id, pubkey, created_at, kind, tags, content, sig from event where kind in ($1) order by created_at desc limit 500
thread 881242 panic: index out of bounds: index 16856, len 16645
/usr/local/zig-0.11.0/lib/std/crypto/tls/Client.zig:1251:81: 0x37cb12 in finishRead2 (zig-nostr-relay)
        @memcpy(c.partially_read_buffer[c.partial_ciphertext_idx + first.len ..][0..frag1.len], frag1);
                                                                                ^
/usr/local/zig-0.11.0/lib/std/crypto/tls/Client.zig:1071:35: 0x376e95 in readvAdvanced__anon_6330 (zig-nostr-relay)
                return finishRead2(c, first, frag1, vp.total);
                                  ^
/usr/local/zig-0.11.0/lib/std/crypto/tls/Client.zig:900:38: 0x3830cc in readvAtLeast__anon_6329 (zig-nostr-relay)
        var amt = try c.readvAdvanced(stream, iovecs[vec_i..]);
                                     ^
/usr/local/zig-0.11.0/lib/std/crypto/tls/Client.zig:861:24: 0x383562 in readAtLeast__anon_6327 (zig-nostr-relay)
    return readvAtLeast(c, stream, &iovecs, len);
                       ^
/usr/local/zig-0.11.0/lib/std/crypto/tls/Client.zig:866:23: 0x3835f4 in read__anon_6326 (zig-nostr-relay)
    return readAtLeast(c, stream, buffer, 1);
                      ^
/home/mattn/.cache/zig/p/1220e19021af49c72e97c814e317aa0e567c655fdb42fa725d0c7f8a3046506df151/src/stream.zig:30:26: 0x383705 in read (zig-nostr-relay)
   return tls_client.read(self.stream, buf);
                         ^
/home/mattn/.cache/zig/p/1220e19021af49c72e97c814e317aa0e567c655fdb42fa725d0c7f8a3046506df151/src/reader.zig:213:30: 0x384674 in read (zig-nostr-relay)
    const n = try stream.read(buf[pos..]);
                             ^
/home/mattn/.cache/zig/p/1220e19021af49c72e97c814e317aa0e567c655fdb42fa725d0c7f8a3046506df151/src/reader.zig:140:51: 0x384fe8 in next (zig-nostr-relay)
   return self.buffered(self.pos) orelse self.read();
                                                  ^
/home/mattn/.cache/zig/p/1220e19021af49c72e97c814e317aa0e567c655fdb42fa725d0c7f8a3046506df151/src/conn.zig:476:27: 0x3850e2 in read (zig-nostr-relay)
   const msg = reader.next() catch |err| {
                          ^
/home/mattn/.cache/zig/p/1220e19021af49c72e97c814e317aa0e567c655fdb42fa725d0c7f8a3046506df151/src/result.zig:75:34: 0x566a09 in next (zig-nostr-relay)
  const msg = try self._conn.read();
                                 ^
/home/mattn/dev/zig-nostr-relay/src/main.zig:733:28: 0x5695ba in handleReq (zig-nostr-relay)
        while (try res.next()) |row| {
                           ^
/home/mattn/dev/zig-nostr-relay/src/main.zig:788:31: 0x56c45c in handleText (zig-nostr-relay)
            try self.handleReq(parsed.value);
                              ^
/home/mattn/dev/zig-nostr-relay/src/main.zig:808:41: 0x56cf1d in handle (zig-nostr-relay)
            .text => try self.handleText(message),
                                        ^
/home/mattn/.cache/zig/p/1220361c4b45f9dbffa9972997298b9137741ac2ad67a41a38396e9d27e734e52128/src/server.zig:238:18: 0x56d927 in readLoop__anon_162152 (zig-nostr-relay)
     try h.handle(message);
                 ^
/home/mattn/.cache/zig/p/1220361c4b45f9dbffa9972997298b9137741ac2ad67a41a38396e9d27e734e52128/src/server.zig:133:15: 0x4c6c6d in clientLoop__anon_61413 (zig-nostr-relay)
 conn.readLoop(*H, &handler, &reader) catch {};
              ^
/usr/local/zig-0.11.0/lib/std/Thread.zig:412:13: 0x45418c in callFn__anon_57975 (zig-nostr-relay)
            @call(.auto, f, args);
            ^
/usr/local/zig-0.11.0/lib/std/Thread.zig:1210:30: 0x3d05d3 in entryFn (zig-nostr-relay)
                return callFn(f, self.fn_args);
                             ^
/usr/local/zig-0.11.0/lib/c.zig:239:13: 0x6bdf60 in clone (c)
            asm volatile (
            ^
???:?:?: 0xfff in ??? (???)
Unwind information for `???:0xfff` was not available, trace may be incomplete

https://github.com/mattn/zig-nostr-relay/blob/f0df269eec07d01bf1c07a603b0efa382c231786/src/main.zig#L742

karlseguin commented 7 months ago

That's a known bug in Zig's standard library. Been around for a while: https://github.com/ziglang/zig/issues/15226

mattn commented 7 months ago

Now I understand your said in previous issue.

TLS 1.3 and (b) is very buggy

Hmm