ID: 36934 User updated by: sswpwp at poczta dot onet dot pl Reported By: sswpwp at poczta dot onet dot pl Status: Assigned Bug Type: OCI8 related Operating System: Windows 2000 PHP Version: 5CVS-2006-03-31 (snap) Assigned To: tony2001 New Comment:
I'm using Apache 2.0.55 and Oracle Instant Client 10.2.0 Previous Comments: ------------------------------------------------------------------------ [2006-03-31 16:51:13] sswpwp at poczta dot onet dot pl Description: ------------ When using OCILob->read(length) function with BLOBs containing 0's it reads specified amount of bytes but doesn't move internal pointer properly. The pointer is moved to the next '0' byte and no further. I think the possible cause of this bug is line 223 in oci8_lob.c file: data_len_chars = OCIMultiByteStrnDisplayLength(connection->env, *data, bytes_total); Propably the function quits after reaching '\0' character instead of checking bytes_total bytes and as such should be used only with CLOBs. Reproduce code: --------------- First 128 bytes in the BLOB I'm reading are 0's, then there are 5 non-zero bytes followed by some more 0's. $stmt = oci_parse($auth->conn, "SELECT ZDJT_IMAGE FROM IMAGES WHERE IMAGE_ID = 1"); oci_execute($stmt); $row = oci_fetch_assoc($stmt); $row['ZDJT_IMAGE']->read(128); echo $row['ZDJT_IMAGE']->tell(); $row['ZDJT_IMAGE']->read(128); echo $row['ZDJT_IMAGE']->tell(); $row['ZDJT_IMAGE']->seek(128); echo $row['ZDJT_IMAGE']->tell(); $row['ZDJT_IMAGE']->read(128); echo $row['ZDJT_IMAGE']->tell(); Expected result: ---------------- The expected result would be: 128 256 128 256 Actual result: -------------- 0 0 128 133 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=36934&edit=1