ASCII NUL ("\0") character terminates bytea query parameter

Issue #112 invalid
Former user created an issue



c.exec("SELECT $1::bytea", ["a\0b"]).getvalue(0, 0) => "\x61"

c.exec("SELECT '#{c.escape_bytea("a\0b")}'::bytea").getvalue(0, 0) => "\x610062" }}}

Comments (2)

  1. Lars Kanis

    This seems to be a bug from the ruby perspective. But from a postgres perspective it's a feature ;)

    Giving params as strings implicitly says they are text-format. Binary data may be escaped/unescaped:

    c.unescape_bytea(c.exec("SELECT $1::bytea", [c.escape_bytea("a\0b")]).getvalue(0, 0))

    or marked as binary:

    c.exec("SELECT $1::bytea", [value:"a\0b",format:1], 1).getvalue(0, 0)

    To receive a binary string, you can set the result format to binary (second form), but this can only done per query, not per column. So for non bytea objects you have to unpack the results as described in the postgres documentation.

  2. Log in to comment