summaryrefslogtreecommitdiff
path: root/ext/mysqlnd/mysqlnd_ps.c
diff options
context:
space:
mode:
authorAndrey Hristov <andrey@php.net>2010-05-04 14:02:42 +0000
committerAndrey Hristov <andrey@php.net>2010-05-04 14:02:42 +0000
commitebae62d7c42442a576da3ed5917be74a239f36ed (patch)
treeb4826ca773da95b93c423f08f8ab523243461010 /ext/mysqlnd/mysqlnd_ps.c
parent04d24bde20f1374d73fc88853bae4320d5573461 (diff)
downloadphp-git-ebae62d7c42442a576da3ed5917be74a239f36ed.tar.gz
OOM stability fixes
Diffstat (limited to 'ext/mysqlnd/mysqlnd_ps.c')
-rw-r--r--ext/mysqlnd/mysqlnd_ps.c30
1 files changed, 18 insertions, 12 deletions
diff --git a/ext/mysqlnd/mysqlnd_ps.c b/ext/mysqlnd/mysqlnd_ps.c
index d8b37b01ee..778663b08a 100644
--- a/ext/mysqlnd/mysqlnd_ps.c
+++ b/ext/mysqlnd/mysqlnd_ps.c
@@ -1227,19 +1227,25 @@ MYSQLND_METHOD(mysqlnd_stmt, send_long_data)(MYSQLND_STMT * const s, unsigned in
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