Don't forget the MFH.. :)
--Jani
On Tue, 3 Dec 2002, Frank M. Kromann wrote:
>fmk Tue Dec 3 00:56:39 2002 EDT
>
> Modified files:
> /php4/ext/mssql php_mssql.c
> Log:
> Allocating enough memory to hold values.
> Fix crash when certan stored procedures was called. This caused the free_result
>function to free memory not yet allocated.
>
>
>Index: php4/ext/mssql/php_mssql.c
>diff -u php4/ext/mssql/php_mssql.c:1.86 php4/ext/mssql/php_mssql.c:1.87
>--- php4/ext/mssql/php_mssql.c:1.86 Mon Oct 28 15:16:24 2002
>+++ php4/ext/mssql/php_mssql.c Tue Dec 3 00:56:39 2002
>@@ -16,7 +16,7 @@
> +----------------------------------------------------------------------+
> */
>
>-/* $Id: php_mssql.c,v 1.86 2002/10/28 20:16:24 sterling Exp $ */
>+/* $Id: php_mssql.c,v 1.87 2002/12/03 05:56:39 fmk Exp $ */
>
> #ifdef COMPILE_DL_MSSQL
> #define HAVE_MSSQL 1
>@@ -376,7 +376,7 @@
> case 0: /* defaults */
> host=user=passwd=NULL;
> hashed_details_length=5+3;
>- hashed_details = (char *) emalloc(hashed_details_length);
>+ hashed_details = (char *) emalloc(hashed_details_length+1);
> strcpy(hashed_details,"mssql___");
> break;
> case 1: {
>@@ -389,7 +389,7 @@
> host = Z_STRVAL_PP(yyhost);
> user=passwd=NULL;
> hashed_details_length = Z_STRLEN_PP(yyhost)+5+3;
>- hashed_details = (char *)
>emalloc(hashed_details_length);
>+ hashed_details = (char *)
>emalloc(hashed_details_length+1);
>
>sprintf(hashed_details,"mssql_%s__",Z_STRVAL_PP(yyhost));
> }
> break;
>@@ -405,7 +405,7 @@
> user = Z_STRVAL_PP(yyuser);
> passwd=NULL;
> hashed_details_length =
>Z_STRLEN_PP(yyhost)+Z_STRLEN_PP(yyuser)+5+3;
>- hashed_details = (char *)
>emalloc(hashed_details_length);
>+ hashed_details = (char *)
>emalloc(hashed_details_length+1);
>
>sprintf(hashed_details,"mssql_%s_%s_",Z_STRVAL_PP(yyhost),Z_STRVAL_PP(yyuser));
> }
> break;
>@@ -422,7 +422,7 @@
> user = Z_STRVAL_PP(yyuser);
> passwd = Z_STRVAL_PP(yypasswd);
> hashed_details_length =
>Z_STRLEN_PP(yyhost)+Z_STRLEN_PP(yyuser)+Z_STRLEN_PP(yypasswd)+5+3;
>- hashed_details = (char *)
>emalloc(hashed_details_length);
>+ hashed_details = (char *)
>emalloc(hashed_details_length+1);
>
>sprintf(hashed_details,"mssql_%s_%s_%s",Z_STRVAL_PP(yyhost),Z_STRVAL_PP(yyuser),Z_STRVAL_PP(yypasswd));
> /* SAFE */
> }
> break;
>@@ -796,7 +796,7 @@
> unsigned char *res_buf;
> int res_length = dbdatlen(mssql_ptr->link, offset);
>
>- res_buf = (unsigned char *) emalloc(res_length);
>+ res_buf = (unsigned char *) emalloc(res_length+1);
> bin = ((DBBINARY *)dbdata(mssql_ptr->link, offset));
> memcpy(res_buf,bin,res_length);
> res_buf[res_length] = '\0';
>@@ -817,13 +817,13 @@
> if (column_type == SQLDATETIM4) res_length +=
>14;
> if (column_type == SQLDATETIME) res_length +=
>10;
>
>- res_buf = (unsigned char *)
>emalloc(res_length);
>+ res_buf = (unsigned char *)
>emalloc(res_length+1);
> res_length =
>dbconvert(NULL,coltype(offset),dbdata(mssql_ptr->link,offset), res_length,
>SQLCHAR,res_buf,-1);
> } else {
> dbdatecrack(mssql_ptr->link, &dateinfo,
>(DBDATETIME *) dbdata(mssql_ptr->link,offset));
>
> res_length = 19;
>- res_buf = (unsigned char *)
>emalloc(res_length);
>+ res_buf = (unsigned char *)
>emalloc(res_length+1);
> sprintf(res_buf, "%d-%02d-%02d %02d:%02d:%02d"
>, dateinfo.year, dateinfo.month, dateinfo.day, dateinfo.hour, dateinfo.minute,
>dateinfo.second);
> }
>
>@@ -852,7 +852,7 @@
> unsigned char *res_buf;
> int res_length = dbdatlen(mssql_ptr->link, offset);
>
>- res_buf = (unsigned char *) emalloc(res_length);
>+ res_buf = (unsigned char *) emalloc(res_length+1);
> bin = ((DBBINARY *)dbdata(mssql_ptr->link, offset));
> memcpy(res_buf, bin, res_length);
> res_buf[res_length] = '\0';
>@@ -870,14 +870,14 @@
> if (column_type == SQLDATETIM4) res_length += 14;
> if (column_type == SQLDATETIME) res_length += 10;
>
>- res_buf = (unsigned char *) emalloc(res_length);
>+ res_buf = (unsigned char *) emalloc(res_length+1);
> res_length =
>dbconvert(NULL,coltype(offset),dbdata(mssql_ptr->link,offset), res_length, SQLCHAR,
>res_buf, -1);
>
> } else {
> dbdatecrack(mssql_ptr->link, &dateinfo, (DBDATETIME *)
>dbdata(mssql_ptr->link,offset));
>
> res_length = 19;
>- res_buf = (unsigned char *) emalloc(res_length);
>+ res_buf = (unsigned char *) emalloc(res_length+1);
> sprintf(res_buf, "%d-%02d-%02d %02d:%02d:%02d" ,
>dateinfo.year, dateinfo.month, dateinfo.day, dateinfo.hour, dateinfo.minute,
>dateinfo.second);
> }
>
>@@ -1049,16 +1049,15 @@
> * 1) Being able to fire up another query without explicitly reading all rows
> * 2) Having numrows accessible
> */
>- retvalue=dbnextrow(mssql_ptr->link);
>-
>- if (retvalue==FAIL) {
>- RETURN_FALSE;
>- }
>-
> if ((num_fields = dbnumcols(mssql_ptr->link)) <= 0 &&
>!dbdataready(mssql_ptr->link)) {
> RETURN_TRUE;
> }
>
>+ retvalue=dbnextrow(mssql_ptr->link);
>+ if (retvalue==FAIL) {
>+ RETURN_FALSE;
>+ }
>+
> result = (mssql_result *) emalloc(sizeof(mssql_result));
> result->num_fields = num_fields;
> result->blocks_initialized = 1;
>@@ -1073,6 +1072,8 @@
> result->fields = (mssql_field *)
>emalloc(sizeof(mssql_field)*result->num_fields);
> result->num_rows = _mssql_fetch_batch(mssql_ptr, result, retvalue
>TSRMLS_CC);
> }
>+ else
>+ result->fields = NULL;
>
> ZEND_REGISTER_RESOURCE(return_value, result, le_result);
> }
>
>
>
>
--
<- For Sale! ->
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php