| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
| |
a pointer and mangling data. Again, ext/mysql and ext/mysqli doesn't
have access to this codepath.
|
|
|
|
|
|
|
|
| |
and thus wrong data was saved MYSQLND_FIELD::db. However, this
wasn't caught because there is no code in mysql/mysqli/pdo_mysql
which reads that field of the structure. The problem was found
during code review.
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
used outside of the file where it is declared.
Also really export with PHPAPI the protocol init/deinit functions
|
|
|
|
|
|
| |
in half by smartly introducing 2 new macros. Make MYSQLND::stats a pointer
from being aggregated and add triggers.
|
| |
|
|
|
|
|
|
|
|
| |
If the protocol gets changed, ever, we can decide at runtime
easily which protocol to use by instantiating the right protocol
object. But this is restricted to the structure of the packets, not
the flow.
|
|
|
|
|
| |
php stream
|
| |
|
|
|
|
|
|
|
| |
mysqlnd_net.c . Now communication is split on two levels:
- logical (functions send and receive)
- physical (functions network_read and network_write)
|
|
|
|
|
|
|
|
|
|
| |
found that there is a bug in the way the data is sent, although a very rare
one which will only affect very large queries which have length 16777214. The
communication will hang. A way to test it is to execute the following:
./php -r '$c=mysqli_connect("127.0.0.1","root","root","test");
$q="insert into test.tblob values(\"".str_repeat("a",256*256*256-1-34)."\")";
$c->query($q);'
|
| |
|
|
|
|
|
|
| |
mysqlnd_wireprotocol is about the protocol not the transport
layer
|
|
|
|
|
|
| |
Thus mysqlnd_conn::connect() does less of what it should not do - think
about the transport level.
|
| |
|
| |
|
|
|
|
|
| |
and deallocator. More member functions will come.
|
|
|
|
|
|
| |
due to problems on windows, which were not debugged. Better have
code that is disabled not in the core.
|
|
|
|
| |
build
|
|
|
|
|
| |
(a header not included)
|
| |
|
|
|
|
| |
handle. Most of the patch comes from Andrey.
|
| |
|
|
|
|
|
|
|
| |
pemalloc and then efree - too bad!
Sorry for committing in two passes, my big tree is already patched
with compressed.
|
|
|
|
| |
allocated with malloc()... If a connection gets created by mysqli_init(), mysqlnd makes it 'persistent'. 'Persistent' means that mysqlnd uses malloc(). mysqlnd does use malloc() instead of ealloc() because it is unknown if the connection will become a true persistent connection in the sense of ext/mysqli. It is unknown if the user wants a persistent connection or not until the user calls mysqli_real_connect(). To avoid tricky conversions mysqlnd uses malloc(), which sets a private persistent flag in the mysqlnd structures. A precondition for the crash to happen was that the private persistent flag is set. The flag is also set when creating a real persistent connection (in the sense of ext/mysqli) and so the bug can happen with mysql_init()/mysqli_real_connect() and mysql_connect('p:<host>', ...). Therefore we test both cases. Note the (tricky?) difference between the implementation detail'mysqlnd private persistent flag = use malloc()' and persistent connections from a user perspective. Although mysqlnd will always set its private persistent flag and use malloc() for connections created with mysqli_init() it is still up to the user to decide in mysqli_real_connect() if the connection shall become a (true) persistent connection or not.
|
| |
|
|
|
|
|
| |
mysqlnd: mysql_num_fields returns wrong column count for mysql_list_fields
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
callbacks, it was done for making 2 functions static, not to pollute the
global functions space but that had its price of 8 bytes overheat per
allocation, which is just too much. Also making the app member 32b instead
of 64b, which should save additional 4 byte, to the total of 12 byte per
allocation of a row buffer.
|
|
|
|
|
|
| |
direct usage of MYSQLND_STRING pointer instead of the "s" property of the
structure.
|
| |
|
| |
|
| |
|
|
|
|
|
| |
This is a very rare situation where the server is totally broken.
|
|
|
|
|
| |
Also switch off the zval cache for now.
|
| |
|
| |
|
|
|
|
|
| |
as well as uint->unsigned int
|
|
|
|
|
|
|
| |
- fixes to sprintf modifiers, cleaning warnings
- use _t types, like uint64_t instead of uint64, thus skipping series of
typedefs.
|
|
|
|
|
|
|
|
| |
STAT_LAST was accessing wrong memory thus overwritting method pointers.
Windows doesn't have atoll(), which is C99, C89 has only atoi() + atol().
Win has _atoi64, so use it.
|
| |
|
|
|
|
|
| |
controlled by a ini setting.
|
|
|
|
|
|
|
| |
- Fixed endless loop - mysqlnd_stmt_next_result() returned FAIL but as it
is defined to be 1 (and PASS is 0), checking for mysqlnd_stmt_more_result()
was successful although we were expecting a FAIL.
|
| |
|
| |
|
|
|
|
|
|
| |
Add mysqli_stmt_more_result()/mysqli_stmt_next_result(), but only in
mysqlnd builds as libmysql doesn't support this feature.
|