Bug #71863 [Asn]: Segfault when EXPLAIN with "Unknown column" error
| From: | andrey@php.net | Date: | Fri, 22 Jul 2016 20:55:48 +0000 |
| Subject: | Bug #71863 [Asn]: Segfault when EXPLAIN with "Unknown column" error | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-202513@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=71863&edit=1
ID: 71863
Updated by: andrey@php.net
Reported by: Azq2 at ya dot ru
Summary: Segfault when EXPLAIN with "Unknown column" error
Status: Assigned
Type: Bug
Package: MySQLi related
Operating System: Ubuntu 14.04
PHP Version: master-Git-2016-03-20 (Git)
Assigned To: andrey
Block user comment: N
Private report: N
New Comment:
Here is an example of MariaDB. A test from the suite fails. Why? Because they changed a text
message, which is not that weird, but they changed the ID of the error.
001+ int(2)
002+ int(1146)
003+ string(39) "Table 'mysql.table_stats' doesn't exist"
001- int(1)
002- int(1051)
003- %unicode|string%(%d) "Unknown table %snot_exists%s"
Previous Comments:
------------------------------------------------------------------------
[2016-07-22 20:42:35] andrey@php.net
MariaDB bends the protocol and this is why this happened. I am preparing a fix for this. The crash
happens because of a bug of mine of not initializing correctly callbacks for the error structure.
Reporting an error after reporting that there is no error is very rare case, which I saw last time
in 2007 (see http://bugs.mysql.com/bug.php?id=27876 :)
mysqlnd should not crash, that is for sure.
------------------------------------------------------------------------
[2016-07-22 20:26:45] reyad dot attiyat at gmail dot com
This segfault only happens in PHP 7.1 and not in previous versions of PHP. I understand that mysqlnd
only supports the official MySQL implementation, but don't believe we should have a separate
driver for MariaDB or other forks (like AWS Aurora). Do you think we should add a quirk/flag to the
mysqlnd driver for MariaDB that would handle these errors correctly?
------------------------------------------------------------------------
[2016-07-22 20:03:56] andrey@php.net
MySQL sends an error directly after the query is executed, as it should happen. MariaDB does send
OK, meaning that there are fields and sends meta for 10 fields, then EOF (marking end of metadata)
and only then it sends an error message. Such sending of errors is not common. It exists when we
talk calling stored procedures because they can fail in the middle after some meta is sent.
------------------------------------------------------------------------
[2016-07-19 19:10:20] andrey@php.net
I confirm a segfault with MariaDB 10.1.16 . Will have to check how it is incompatible with the MySQL
client server protocol.
------------------------------------------------------------------------
[2016-07-19 14:05:08] andrey@php.net
MariaDB might be an issue. I don't know. Keep in mind that mysqlnd supports officially only
MySQL and not any forks.
I will try to get MariaDB up and running to test with it.
Best,
Andrey
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=71863
--
Edit this bug report at https://bugs.php.net/bug.php?id=71863&edit=1