Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:5976 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 87610 invoked by uid 1010); 2 Dec 2003 01:35:52 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 87586 invoked from network); 2 Dec 2003 01:35:51 -0000 Received: from unknown (HELO web13407.mail.yahoo.com) (216.136.175.65) by pb1.pair.com with SMTP; 2 Dec 2003 01:35:51 -0000 Message-ID: <20031202013551.66685.qmail@web13407.mail.yahoo.com> Received: from [24.215.130.244] by web13407.mail.yahoo.com via HTTP; Mon, 01 Dec 2003 17:35:51 PST Date: Mon, 1 Dec 2003 17:35:51 -0800 (PST) To: "Frank M. Kromann" Cc: internals@lists.php.net In-Reply-To: <10703199986400000@9866357972520000.9866341568840000> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Subject: Re: [PHP-DEV] [FIX] Bug #25585: PHP crash if executed MSSQL-query with RAISERROR() call and error 515 From: msisolak@yahoo.com (Michael Sisolak) References: <10703199986400000@9866357972520000.9866341568840000> --- "Frank M. Kromann" wrote: > I'm running on Windows XP and using MSSQL server 7.0 and 2000 both > with the latest service packs. > > PHP 4.3.5-dev (cli) (built: Nov 4 2003 16:23:54) > Copyright (c) 1997-2003 The PHP Group > Zend Engine v1.3.0, Copyright (c) 1998-2003 Zend Technologies > > ntwdblib is 2000.2.8.0 > Frank, I've found the reason for the crash in the bug report, although I can't explain why we are getting such different outcomes. The current PHP_RSHUTDOWN_FUNCTION(mssql) is: PHP_RSHUTDOWN_FUNCTION(mssql) { STR_FREE(MS_SQL_G(appname)); if (MS_SQL_G(server_message)) { STR_FREE(MS_SQL_G(server_message)); } return SUCCESS; } The string is free'd, but the MS_SQL_G(server_message) isn't properly reset to empty_string. If I change this to: PHP_RSHUTDOWN_FUNCTION(mssql) { STR_FREE(MS_SQL_G(appname)); if (MS_SQL_G(server_message)) { STR_FREE(MS_SQL_G(server_message)); MS_SQL_G(server_message) = empty_string; } return SUCCESS; } then the crash goes away. (For consistancy sake the "MS_SQL_G(server_message) = NULL;" on line 1315 should probably be changed to "= empty_string" also.) When I run the query in the bug report the call to mssql_query only processes the first chunk of statements of the multi-statement query and it holds on to the output of the rest of them. They remainder don't actually end up getting processed until during the call to dbclose() in _close_mssql_link. The output I end up seeing is: Warning: mssql_query(): message: Cannot insert the value NULL into column 'myFie ld1', table 'myDB.dbo.myTable'; column does not allow nulls. INSERT fails. (seve rity 16) in c:\temp\test.php on line 30 Result is true DB Error is The statement has been terminated. Warning: Unknown(): message: Some error (severity 18) in Unknown on line 0 Note that the "Some error" message comes after all the other output lines and has no script location tied to it. I'm going to continue to dig into this. Please let me know if you have any thoughts about where I might look. Michael __________________________________ Do you Yahoo!? Free Pop-Up Blocker - Get it now http://companion.yahoo.com/