1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-30 11:03:19 +03:00

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>
This commit is contained in:
Bruce Momjian
1999-10-13 02:26:37 +00:00
parent 714efa88db
commit 7ee7ee1398

View File

@ -1,6 +1,6 @@
/*------------------------------------------------------- /*-------------------------------------------------------
* *
* $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)
} }
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)
} }
OUTPUT: OUTPUT:
RETVAL RETVAL
buf buf sv_setpvn((SV*)ST(2), buf, RETVAL); /* to handle NULs */
int int