OCILob->read() doesn't move internal pointer when reading 0's
| Bug #36934 | OCILob->read() doesn't move internal pointer when reading 0's | ||||
|---|---|---|---|---|---|
| Submitted: | 2006-03-31 16:51 UTC | Modified: | 2006-04-05 14:09 UTC | ||
| From: | sswpwp at poczta dot onet dot pl | Assigned: | tony2001 (profile) | ||
| Status: | Closed | Package: | OCI8 related | ||
| PHP Version: | 5CVS-2006-03-31 (snap) | OS: | Windows 2000 | ||
| Private report: | No | CVE-ID: | None | ||
[2006-03-31 16:51 UTC] 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
Patches
Pull Requests
History
AllCommentsChangesGit/SVN commits
[2006-03-31 17:02 UTC] sswpwp at poczta dot onet dot pl
[2006-04-05 14:09 UTC] tony2001@php.net