summaryrefslogtreecommitdiff
path: root/ext/mysqlnd
diff options
context:
space:
mode:
authorAndrey Hristov <andrey@php.net>2014-03-19 18:54:39 +0200
committerAndrey Hristov <andrey@php.net>2014-03-19 18:54:39 +0200
commit01c2ec03bcbb03dba378ad4606561c3c147b7ad5 (patch)
tree633a3b011501e0294016aff8be3c8d71512c07ee /ext/mysqlnd
parentd613b0acc2969512da55cdc6649879cfa489f668 (diff)
parentd63ed101ee7bb632c54504b1278c79414a75a792 (diff)
downloadphp-git-01c2ec03bcbb03dba378ad4606561c3c147b7ad5.tar.gz
Merge branch 'PHP-5.5' into PHP-5.6
Conflicts: NEWS configure.in ext/mysqli/mysqli_api.c main/php_version.h
Diffstat (limited to 'ext/mysqlnd')
-rw-r--r--ext/mysqlnd/mysqlnd.c59
1 files changed, 47 insertions, 12 deletions
diff --git a/ext/mysqlnd/mysqlnd.c b/ext/mysqlnd/mysqlnd.c
index 3c1bc82f44..88c59a9a56 100644
--- a/ext/mysqlnd/mysqlnd.c
+++ b/ext/mysqlnd/mysqlnd.c
@@ -2651,24 +2651,24 @@ MYSQLND_METHOD(mysqlnd_conn_data, tx_cor_options_to_string)(const MYSQLND_CONN_D
{
if (mode & TRANS_COR_AND_CHAIN && !(mode & TRANS_COR_AND_NO_CHAIN)) {
if (str->len) {
- smart_str_appendl(str, ", ", sizeof(", ") - 1);
+ smart_str_appendl(str, " ", sizeof(" ") - 1);
}
smart_str_appendl(str, "AND CHAIN", sizeof("AND CHAIN") - 1);
} else if (mode & TRANS_COR_AND_NO_CHAIN && !(mode & TRANS_COR_AND_CHAIN)) {
if (str->len) {
- smart_str_appendl(str, ", ", sizeof(", ") - 1);
+ smart_str_appendl(str, " ", sizeof(" ") - 1);
}
smart_str_appendl(str, "AND NO CHAIN", sizeof("AND NO CHAIN") - 1);
}
if (mode & TRANS_COR_RELEASE && !(mode & TRANS_COR_NO_RELEASE)) {
if (str->len) {
- smart_str_appendl(str, ", ", sizeof(", ") - 1);
+ smart_str_appendl(str, " ", sizeof(" ") - 1);
}
smart_str_appendl(str, "RELEASE", sizeof("RELEASE") - 1);
} else if (mode & TRANS_COR_NO_RELEASE && !(mode & TRANS_COR_RELEASE)) {
if (str->len) {
- smart_str_appendl(str, ", ", sizeof(", ") - 1);
+ smart_str_appendl(str, " ", sizeof(" ") - 1);
}
smart_str_appendl(str, "NO RELEASE", sizeof("NO RELEASE") - 1);
}
@@ -2691,23 +2691,58 @@ MYSQLND_METHOD(mysqlnd_conn_data, tx_commit_or_rollback)(MYSQLND_CONN_DATA * con
conn->m->tx_cor_options_to_string(conn, &tmp_str, flags TSRMLS_CC);
smart_str_0(&tmp_str);
+
{
- char * commented_name = NULL;
- unsigned int commented_name_len = name? mnd_sprintf(&commented_name, 0, " /*%s*/", name):0;
char * query;
- unsigned int query_len = mnd_sprintf(&query, 0, (commit? "COMMIT%s %s":"ROLLBACK%s %s"),
- commented_name? commented_name:"", tmp_str.c? tmp_str.c:"");
- smart_str_free(&tmp_str);
+ char * name_esc = NULL;
+ size_t query_len;
+
+ if (name) {
+ const char * p_orig = name;
+ char * p_copy;
+ p_copy = name_esc = mnd_emalloc(strlen(name) + 1 + 2 + 2 + 1); /* space, open, close, NullS */
+ *p_copy++ = ' ';
+ *p_copy++ = '/';
+ *p_copy++ = '*';
+ while (1) {
+ register char v = *p_orig;
+ if (v == 0) {
+ break;
+ }
+ if ((v >= '0' && v <= '9') ||
+ (v >= 'a' && v <= 'z') ||
+ (v >= 'A' && v <= 'Z') ||
+ v == '-' ||
+ v == '_' ||
+ v == ' ' ||
+ v == '=')
+ {
+ *p_copy = v;
+ } else {
+ *p_copy = '?';
+ }
+ ++p_orig;
+ ++p_copy;
+ }
+ *p_copy++ = '*';
+ *p_copy++ = '/';
+ *p_copy++ = 0;
+ }
+ query_len = mnd_sprintf(&query, 0, (commit? "COMMIT%s %s":"ROLLBACK%s %s"),
+ name_esc? name_esc:"", tmp_str.c? tmp_str.c:"");
+ smart_str_free(&tmp_str);
if (!query) {
SET_OOM_ERROR(*conn->error_info);
break;
}
+ if (name_esc) {
+ mnd_efree(name_esc);
+ name_esc = NULL;
+ }
+
ret = conn->m->query(conn, query, query_len TSRMLS_CC);
mnd_sprintf_free(query);
- if (commented_name) {
- mnd_sprintf_free(commented_name);
- }
}
} while (0);
conn->m->local_tx_end(conn, this_func, ret TSRMLS_CC);