summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Momjian1999-10-13 02:26:37 +0000
committerBruce Momjian1999-10-13 02:26:37 +0000
commit7ee7ee1398acb2ba8e1738a4d959025e43df8820 (patch)
treece63ab0bb06c9c7769478417b36188c10a7e1fe2
parent714efa88db22dab1b78f7002dbd190881621005b (diff)
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 <[email protected]>
-rw-r--r--src/interfaces/perl5/Pg.xs6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/interfaces/perl5/Pg.xs b/src/interfaces/perl5/Pg.xs
index 5419130a528..2c884c9c033 100644
--- a/src/interfaces/perl5/Pg.xs
+++ b/src/interfaces/perl5/Pg.xs
@@ -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