@@ -267,6 +267,19 @@ mysqlnd_read_header(MYSQLND_PFC * pfc, MYSQLND_VIO * vio, MYSQLND_PACKET_HEADER
267
267
pfc -> data -> packet_no ++ ;
268
268
DBG_RETURN (PASS );
269
269
}
270
+ // @see https://dev.mysql.com/worklog/task/?id=12999
271
+ if (header -> size > 0 ) {
272
+ zend_uchar * buf = mnd_emalloc (header -> size );
273
+ if ((PASS == pfc -> data -> m .receive (pfc , vio , buf , header -> size , conn_stats , error_info )) && buf [0 ] == ERROR_MARKER ) {
274
+ php_mysqlnd_read_error_from_line (buf + 1 , header -> size - 1 ,
275
+ error_info -> error , sizeof (error_info -> error ),
276
+ & error_info -> error_no , error_info -> sqlstate
277
+ );
278
+ mnd_efree (buf );
279
+ DBG_RETURN (FAIL );
280
+ }
281
+ mnd_efree (buf );
282
+ }
270
283
271
284
DBG_ERR_FMT ("Logical link: packets out of order. Expected %u received %u. Packet size=%zu" ,
272
285
pfc -> data -> packet_no , header -> packet_no , header -> size );
@@ -294,7 +307,9 @@ mysqlnd_read_packet_header_and_body(MYSQLND_PACKET_HEADER * packet_header,
294
307
DBG_INF_FMT ("buf=%p size=%zu" , buf , buf_size );
295
308
if (FAIL == mysqlnd_read_header (pfc , vio , packet_header , stats , error_info )) {
296
309
SET_CONNECTION_STATE (connection_state , CONN_QUIT_SENT );
297
- SET_CLIENT_ERROR (error_info , CR_SERVER_GONE_ERROR , UNKNOWN_SQLSTATE , mysqlnd_server_gone );
310
+ if (error_info -> error_no == 0 ) {
311
+ SET_CLIENT_ERROR (error_info , CR_SERVER_GONE_ERROR , UNKNOWN_SQLSTATE , mysqlnd_server_gone );
312
+ }
298
313
DBG_ERR_FMT ("Can't read %s's header" , packet_type_as_text );
299
314
DBG_RETURN (FAIL );
300
315
}
0 commit comments