@@ -529,6 +529,7 @@ MYSQLND_METHOD(mysqlnd_conn, connect)(MYSQLND *conn,
529
529
db = "" ;
530
530
db_len = 0 ;
531
531
}
532
+
532
533
host_len = strlen (host );
533
534
{
534
535
char * transport = NULL ;
@@ -553,7 +554,7 @@ MYSQLND_METHOD(mysqlnd_conn, connect)(MYSQLND *conn,
553
554
DBG_INF_FMT ("transport=%s" , transport );
554
555
conn -> scheme = mnd_pestrndup (transport , transport_len , conn -> persistent );
555
556
conn -> scheme_len = transport_len ;
556
- efree (transport );
557
+ efree (transport ); /* allocated by spprintf */
557
558
transport = NULL ;
558
559
}
559
560
@@ -643,6 +644,7 @@ MYSQLND_METHOD(mysqlnd_conn, connect)(MYSQLND *conn,
643
644
}
644
645
} else {
645
646
CONN_SET_STATE (conn , CONN_READY );
647
+
646
648
if (!self_alloced && saved_compression ) {
647
649
conn -> net -> compressed = TRUE;
648
650
}
@@ -662,16 +664,14 @@ MYSQLND_METHOD(mysqlnd_conn, connect)(MYSQLND *conn,
662
664
conn -> connect_or_select_db_len = db_len ;
663
665
664
666
if (!unix_socket ) {
665
- char * p ;
666
667
667
668
conn -> host = mnd_pestrdup (host , conn -> persistent );
668
669
conn -> host_len = strlen (conn -> host );
669
- spprintf (& p , 0 , "%s via TCP/IP" , conn -> host );
670
- if (conn -> persistent ) {
671
- conn -> host_info = mnd_pestrdup (p , 1 );
672
- mnd_efree (p );
673
- } else {
674
- conn -> host_info = p ;
670
+ {
671
+ char * p ;
672
+ spprintf (& p , 0 , "%s via TCP/IP" , conn -> host );
673
+ conn -> host_info = mnd_pestrdup (p , conn -> persistent );
674
+ efree (p ); /* allocated by spprintf */
675
675
}
676
676
} else {
677
677
conn -> unix_socket = mnd_pestrdup (socket , conn -> persistent );
@@ -693,10 +693,6 @@ MYSQLND_METHOD(mysqlnd_conn, connect)(MYSQLND *conn,
693
693
SET_EMPTY_ERROR (conn -> error_info );
694
694
695
695
mysqlnd_local_infile_default (conn );
696
- {
697
- unsigned int buf_size = MYSQLND_G (net_cmd_buffer_size ); /* this is long, cast to unsigned int*/
698
- conn -> m -> set_client_option (conn , MYSQLND_OPT_NET_CMD_BUFFER_SIZE , (char * )& buf_size TSRMLS_CC );
699
- }
700
696
701
697
MYSQLND_INC_CONN_STATISTIC_W_VALUE2 (conn -> stats , STAT_CONNECT_SUCCESS , 1 , STAT_OPENED_CONNECTIONS , 1 );
702
698
if (reconnect ) {
@@ -707,6 +703,7 @@ MYSQLND_METHOD(mysqlnd_conn, connect)(MYSQLND *conn,
707
703
}
708
704
709
705
DBG_INF_FMT ("connection_id=%llu" , conn -> thread_id );
706
+
710
707
#if PHP_MAJOR_VERSION >= 6
711
708
{
712
709
unsigned int as_unicode = 1 ;
@@ -715,7 +712,6 @@ MYSQLND_METHOD(mysqlnd_conn, connect)(MYSQLND *conn,
715
712
DBG_INF ("unicode set" );
716
713
}
717
714
#endif
718
-
719
715
if (conn -> options .init_commands ) {
720
716
int current_command = 0 ;
721
717
for (; current_command < conn -> options .num_commands ; ++ current_command ) {
@@ -773,7 +769,7 @@ PHPAPI MYSQLND * mysqlnd_connect(MYSQLND * conn,
773
769
unsigned int mysql_flags
774
770
TSRMLS_DC )
775
771
{
776
- enum_func_status ret ;
772
+ enum_func_status ret = FAIL ;
777
773
zend_bool self_alloced = FALSE;
778
774
779
775
DBG_ENTER ("mysqlnd_connect" );
@@ -1139,7 +1135,7 @@ MYSQLND_METHOD(mysqlnd_conn, list_method)(MYSQLND *conn, const char *query, cons
1139
1135
result = conn -> m -> store_result (conn TSRMLS_CC );
1140
1136
}
1141
1137
if (show_query != query ) {
1142
- mnd_efree (show_query );
1138
+ efree (show_query ); /* allocated by spprintf */
1143
1139
}
1144
1140
DBG_RETURN (result );
1145
1141
}
@@ -1225,7 +1221,7 @@ MYSQLND_METHOD(mysqlnd_conn, select_db)(MYSQLND * const conn, const char * const
1225
1221
SET_ERROR_AFF_ROWS (conn );
1226
1222
if (ret == PASS ) {
1227
1223
if (conn -> connect_or_select_db ) {
1228
- pefree (conn -> connect_or_select_db , conn -> persistent );
1224
+ mnd_pefree (conn -> connect_or_select_db , conn -> persistent );
1229
1225
}
1230
1226
conn -> connect_or_select_db = mnd_pestrndup (db , db_len , conn -> persistent );
1231
1227
conn -> connect_or_select_db_len = db_len ;
@@ -1275,10 +1271,9 @@ MYSQLND_METHOD(mysqlnd_conn, stat)(MYSQLND *conn, char **message, unsigned int *
1275
1271
if (FAIL == (ret = PACKET_READ (stats_header , conn ))) {
1276
1272
DBG_RETURN (FAIL );
1277
1273
}
1278
- * message = stats_header -> message ;
1274
+ /* will be freed by Zend, thus don't use the mnd_ allocator */
1275
+ * message = estrndup (stats_header -> message , stats_header -> message_len );
1279
1276
* message_len = stats_header -> message_len ;
1280
- /* Ownership transfer */
1281
- stats_header -> message = NULL ;
1282
1277
PACKET_FREE (stats_header );
1283
1278
1284
1279
DBG_INF (* message );
@@ -1343,7 +1338,7 @@ MYSQLND_METHOD(mysqlnd_conn, set_charset)(MYSQLND * const conn, const char * con
1343
1338
} else {
1344
1339
conn -> charset = charset ;
1345
1340
}
1346
- mnd_efree (query );
1341
+ efree (query ); /* allocated by spprintf */
1347
1342
1348
1343
DBG_INF (ret == PASS ? "PASS" :"FAIL" );
1349
1344
DBG_RETURN (ret );
0 commit comments