Commit 7ee7ee13 authored by Bruce Momjian's avatar Bruce Momjian

BLOBs containing NUL characters (ASCII 0) can be written to the

database, but they get truncated at the first NUL by lo_read
when they are read back. The reason for this is that lo_read in
Pg.xs is using the default:
    OUTPUT:
        RETVAL
        buf
which uses C's strlen() to work out the length of the scalar.

The code ought to read something more like:
    OUTPUT:
        RETVAL
        buf sv_setpvn((SV*)ST(2), buf, RETVAL);

I am not sure if this needs to be done on both lo_read methods
in this file, but I changed both and have not since had any
problems with truncated BLOBs.

Douglas Thomson <dougt@mugc.cc.monash.edu.au>
parent 714efa88
/*------------------------------------------------------- /*-------------------------------------------------------
* *
* $Id: Pg.xs,v 1.12 1999/02/19 23:27:17 tgl Exp $ * $Id: Pg.xs,v 1.13 1999/10/13 02:26:37 momjian Exp $ with patch for NULs
* *
* Copyright (c) 1997, 1998 Edmund Mergl * Copyright (c) 1997, 1998 Edmund Mergl
* *
...@@ -643,7 +643,7 @@ lo_read(conn, fd, buf, len) ...@@ -643,7 +643,7 @@ lo_read(conn, fd, buf, len)
} }
OUTPUT: OUTPUT:
RETVAL RETVAL
buf buf sv_setpvn((SV*)ST(2), buf, RETVAL); /* to handle NULs */
int int
lo_write(conn, fd, buf, len) lo_write(conn, fd, buf, len)
...@@ -1029,7 +1029,7 @@ lo_read(conn, fd, buf, len) ...@@ -1029,7 +1029,7 @@ lo_read(conn, fd, buf, len)
} }
OUTPUT: OUTPUT:
RETVAL RETVAL
buf buf sv_setpvn((SV*)ST(2), buf, RETVAL); /* to handle NULs */
int int
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment