if (CONN_GET_STATE(conn) == CONN_READY) {
size_t packet_len;
- stmt->param_bind[param_no].flags |= MYSQLND_PARAM_BIND_BLOB_USED;
cmd_buf = mnd_emalloc(packet_len = STMT_ID_LENGTH + 2 + length);
-
- int4store(cmd_buf, stmt->stmt_id);
- int2store(cmd_buf + STMT_ID_LENGTH, param_no);
- memcpy(cmd_buf + STMT_ID_LENGTH + 2, data, length);
-
- /* COM_STMT_SEND_LONG_DATA doesn't send an OK packet*/
- ret = conn->m->simple_command(conn, cmd, (char *)cmd_buf, packet_len,
- PROT_LAST , FALSE, TRUE TSRMLS_CC);
- mnd_efree(cmd_buf);
- if (FAIL == ret) {
- stmt->error_info = conn->error_info;
+ if (cmd_buf) {
+ stmt->param_bind[param_no].flags |= MYSQLND_PARAM_BIND_BLOB_USED;
+
+ int4store(cmd_buf, stmt->stmt_id);
+ int2store(cmd_buf + STMT_ID_LENGTH, param_no);
+ memcpy(cmd_buf + STMT_ID_LENGTH + 2, data, length);
+
+ /* COM_STMT_SEND_LONG_DATA doesn't send an OK packet*/
+ ret = conn->m->simple_command(conn, cmd, (char *)cmd_buf, packet_len,
+ PROT_LAST , FALSE, TRUE TSRMLS_CC);
+ mnd_efree(cmd_buf);
+ if (FAIL == ret) {
+ stmt->error_info = conn->error_info;
+ }
+ } else {
+ ret = FAIL;
+ SET_OOM_ERROR(stmt->error_info);
+ SET_OOM_ERROR(conn->error_info);
}
/*
Cover protocol error: COM_STMT_SEND_LONG_DATA was designed to be quick and not
DBG_INF_FMT("stmt=%d", stmt? stmt->stmt_id:0);
ret = FAIL;
- rset_header = conn->protocol->m.get_rset_header_packet(conn->protocol, FALSE TSRMLS_CC);
do {
+ rset_header = conn->protocol->m.get_rset_header_packet(conn->protocol, FALSE TSRMLS_CC);
+ if (!rset_header) {
+ SET_OOM_ERROR(conn->error_info);
+ ret = FAIL;
+ break;
+ }
+
SET_ERROR_AFF_ROWS(conn);
+
if (FAIL == (ret = PACKET_READ(rset_header, conn))) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error reading result set's header");
break;
static enum_func_status
php_mysqlnd_rset_header_read(void *_packet, MYSQLND *conn TSRMLS_DC)
{
+ enum_func_status ret = PASS;
size_t buf_len = conn->net->cmd_buffer.length;
zend_uchar *buf = (zend_uchar *) conn->net->cmd_buffer.buffer;
zend_uchar *p = buf;
*/
len = packet->header.size - 1;
packet->info_or_local_file = mnd_emalloc(len + 1);
- memcpy(packet->info_or_local_file, p, len);
- packet->info_or_local_file[len] = '\0';
- packet->info_or_local_file_len = len;
+ if (packet->info_or_local_file) {
+ memcpy(packet->info_or_local_file, p, len);
+ packet->info_or_local_file[len] = '\0';
+ packet->info_or_local_file_len = len;
+ } else {
+ SET_OOM_ERROR(conn->error_info);
+ ret = FAIL;
+ }
break;
case 0x00:
DBG_INF("UPSERT");
/* Check for additional textual data */
if (packet->header.size > (size_t) (p - buf) && (len = php_mysqlnd_net_field_length(&p))) {
packet->info_or_local_file = mnd_emalloc(len + 1);
- memcpy(packet->info_or_local_file, p, len);
- packet->info_or_local_file[len] = '\0';
- packet->info_or_local_file_len = len;
+ if (packet->info_or_local_file) {
+ memcpy(packet->info_or_local_file, p, len);
+ packet->info_or_local_file[len] = '\0';
+ packet->info_or_local_file_len = len;
+ } else {
+ SET_OOM_ERROR(conn->error_info);
+ ret = FAIL;
+ }
}
DBG_INF_FMT("affected_rows=%llu last_insert_id=%llu server_status=%d warning_count=%d",
packet->affected_rows, packet->last_insert_id,
}
BAIL_IF_NO_MORE_DATA;
- DBG_RETURN(PASS);
+ DBG_RETURN(ret);
premature_end:
DBG_ERR_FMT("RSET_HEADER packet %d bytes shorter than expected", p - begin - packet->header.size);
php_error_docref(NULL TSRMLS_CC, E_WARNING, "RSET_HEADER packet "MYSQLND_SZ_T_SPEC" bytes shorter than expected",