From: Ard Biesheuvel Date: Sat, 16 Aug 2003 17:11:25 +0000 (+0000) Subject: MFH Fixed bug #18744 X-Git-Tag: php-4.3.3RC4~13 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=850a15853109ee4ba0c0014276ccbd01a4cbcfaa;p=php MFH Fixed bug #18744 --- diff --git a/ext/interbase/interbase.c b/ext/interbase/interbase.c index f37325cf54..f39e56bcf1 100644 --- a/ext/interbase/interbase.c +++ b/ext/interbase/interbase.c @@ -2667,6 +2667,8 @@ PHP_FUNCTION(ibase_blob_add) { zval **blob_arg, **string_arg; ibase_blob_handle *ib_blob; + unsigned long put_cnt = 0, rem_cnt; + unsigned short chunk_size; RESET_ERRMSG; @@ -2678,9 +2680,15 @@ PHP_FUNCTION(ibase_blob_add) convert_to_string_ex(string_arg); - if (isc_put_segment(IB_STATUS, &ib_blob->bl_handle, (unsigned short) Z_STRLEN_PP(string_arg), Z_STRVAL_PP(string_arg))) { - _php_ibase_error(TSRMLS_C); - RETURN_FALSE; + for (rem_cnt = Z_STRLEN_PP(string_arg); rem_cnt > 0; rem_cnt -= chunk_size) { + + chunk_size = rem_cnt > USHRT_MAX ? USHRT_MAX : rem_cnt; + + if (isc_put_segment(IB_STATUS, &ib_blob->bl_handle, chunk_size, &Z_STRVAL_PP(string_arg)[put_cnt] )) { + _php_ibase_error(TSRMLS_C); + RETURN_FALSE; + } + put_cnt += chunk_size; } RETURN_TRUE; }