From f15f20ffa22185712983a2ffbe4e34b3e9aaa87c Mon Sep 17 00:00:00 2001 From: Antony Dovgal Date: Mon, 10 Oct 2005 10:16:58 +0000 Subject: [PATCH] fix #33383 (crash when retrieving empty BLOBs) --- ext/oci8/oci8.c | 7 ++++++- ext/oci8/oci8_interface.c | 14 ++++++++++++-- ext/oci8/oci8_lob.c | 4 ++++ 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/ext/oci8/oci8.c b/ext/oci8/oci8.c index 9df7318f46..361a796cd1 100644 --- a/ext/oci8/oci8.c +++ b/ext/oci8/oci8.c @@ -1490,7 +1490,12 @@ int php_oci_column_to_zval(php_oci_out_column *column, zval *value, int mode TSR ZVAL_FALSE(value); return 1; } else { - ZVAL_STRINGL(value, lob_buffer, lob_length, 0); + if (lob_length > 0) { + ZVAL_STRINGL(value, lob_buffer, lob_length, 0); + } + else { + ZVAL_EMPTY_STRING(value); + } return 0; } } else { diff --git a/ext/oci8/oci8_interface.c b/ext/oci8/oci8_interface.c index 7b008e02d9..71191c1f1a 100644 --- a/ext/oci8/oci8_interface.c +++ b/ext/oci8/oci8_interface.c @@ -243,7 +243,12 @@ PHP_FUNCTION(oci_lob_load) if (php_oci_lob_read(descriptor, -1, 0, &buffer, &buffer_len TSRMLS_CC)) { RETURN_FALSE; } - RETURN_STRINGL(buffer, buffer_len, 0); + if (buffer_len > 0) { + RETURN_STRINGL(buffer, buffer_len, 0); + } + else { + RETURN_EMPTY_STRING(); + } } /* }}} */ @@ -282,8 +287,13 @@ PHP_FUNCTION(oci_lob_read) if (php_oci_lob_read(descriptor, length, descriptor->lob_current_position, &buffer, &buffer_len TSRMLS_CC)) { RETURN_FALSE; + } + if (buffer_len > 0) { + RETURN_STRINGL(buffer, buffer_len, 0); + } + else { + RETURN_EMPTY_STRING(); } - RETURN_STRINGL(buffer, buffer_len, 0); } /* }}} */ diff --git a/ext/oci8/oci8_lob.c b/ext/oci8/oci8_lob.c index e1e343e15b..512607942e 100644 --- a/ext/oci8/oci8_lob.c +++ b/ext/oci8/oci8_lob.c @@ -160,6 +160,10 @@ int php_oci_lob_read (php_oci_descriptor *descriptor, long read_length, long off if (php_oci_lob_get_length(descriptor, &length TSRMLS_CC)) { return 1; } + + if (length <= 0) { + return 0; + } if (offset > length) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset must be less than size of the LOB"); -- 2.40.0