Frank Kromann has investigated these issues and has made fixes in the CVS version of ext/mssql.
Michael --- Michael Sisolak <[EMAIL PROTECTED]> wrote: > Testing my existing SQL Server based sites with 4.3.0RC2 resulted in > many memory access violations and crashes. I believe that I have > tracked these down to two different changes made to the MSSQL > extension > since 4.2.3: > > 1) In version 1.82 of php_mssql.c there were 6 mallocs that were > changed from "emalloc(res_length + 1);" to "emalloc(res_length);". I > believe, however, that the code that uses those memory blocks in at > least four of the cases required that extra space. This is the code > as > it is now for two of the changes in 4.3.0RC2: > > res_buf = (unsigned char *) emalloc(res_length); > bin = ((DBBINARY *)dbdata(mssql_ptr->link, offset)); > memcpy(res_buf, bin, res_length); > res_buf[res_length] = '\0'; > > It's the setting of res_buf[res_length] illegal, as that would be > beyond the bounds of emalloc(res_length)? Also this code (appearing > in > two of the changes): > > res_length = 19; > res_buf = (unsigned char *) emalloc(res_length); > sprintf(res_buf, "%d-%02d-%02d %02d:%02d:%02d" , . . . > > Since the length of the character string is going to be 19 > characters, > isn't the sprintf going to write an ASCIIZ ending beyond the size of > res_buf? > > Does the way emalloc() works take care of these problems? Adding the > "+ 1" back to these four emalloc() calls stopped one set of crashes. > > 2) In version 1.83 of php_mssql.c the mssql_query() function was > altered from: > > if ((num_fields = dbnumcols(mssql_ptr->link)) <= 0) { > RETURN_TRUE; > } > > to: > > if ((num_fields = dbnumcols(mssql_ptr->link)) <= 0 && > !dbdataready(mssql_ptr->link)) { > RETURN_TRUE; > } > > The CVS comment indicates that this change was for "fixing the > mssql_query to handle multiple results correct if the first result > does > not return any data." If I now call mssql_query() with a query that > doesn't return any values (like a SQL-T EXEC call), however, PHP will > crash (removing the new dbdataready() check eliminates the crash). > > Michael Sisolak > [EMAIL PROTECTED] > > __________________________________________________ > Do you Yahoo!? > Yahoo! Mail Plus - Powerful. Affordable. Sign up now. > http://mailplus.yahoo.com > __________________________________________________ Do you Yahoo!? Yahoo! Mail Plus - Powerful. Affordable. Sign up now. http://mailplus.yahoo.com -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, visit: http://www.php.net/unsub.php