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:
parent
714efa88db
commit
7ee7ee1398
@ -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
|
||||
*
|
||||
@ -643,7 +643,7 @@ lo_read(conn, fd, buf, len)
|
||||
}
|
||||
OUTPUT:
|
||||
RETVAL
|
||||
buf
|
||||
buf sv_setpvn((SV*)ST(2), buf, RETVAL); /* to handle NULs */
|
||||
|
||||
int
|
||||
lo_write(conn, fd, buf, len)
|
||||
@ -1029,7 +1029,7 @@ lo_read(conn, fd, buf, len)
|
||||
}
|
||||
OUTPUT:
|
||||
RETVAL
|
||||
buf
|
||||
buf sv_setpvn((SV*)ST(2), buf, RETVAL); /* to handle NULs */
|
||||
|
||||
|
||||
int
|
||||
|
Loading…
x
Reference in New Issue
Block a user