diff options
| author | Ilia Alshanetsky <iliaa@php.net> | 2007-05-28 23:43:24 +0000 |
|---|---|---|
| committer | Ilia Alshanetsky <iliaa@php.net> | 2007-05-28 23:43:24 +0000 |
| commit | cbcb1840f32f4b3eff6c2165ecc6f4fac8746a4b (patch) | |
| tree | 2e91d5ce8fb85831987bb50b54aa584c62704cad | |
| parent | 3821f0c45acc490e6b5d80494f74798049e9cd15 (diff) | |
| download | php-git-cbcb1840f32f4b3eff6c2165ecc6f4fac8746a4b.tar.gz | |
MFB
| -rw-r--r-- | ext/mysql/php_mysql.c | 2 | ||||
| -rwxr-xr-x | ext/pdo/pdo_dbh.c | 2 | ||||
| -rw-r--r-- | ext/pdo/pdo_sql_parser.c | 16 | ||||
| -rw-r--r-- | ext/pdo/pdo_sql_parser.re | 16 | ||||
| -rwxr-xr-x | ext/pdo_mysql/mysql_statement.c | 1 | ||||
| -rw-r--r-- | ext/soap/php_http.c | 21 | ||||
| -rw-r--r-- | ext/xmlrpc/libxmlrpc/xml_to_dandarpc.c | 4 | ||||
| -rw-r--r-- | ext/xmlrpc/libxmlrpc/xml_to_soap.c | 4 | ||||
| -rw-r--r-- | ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.c | 4 |
9 files changed, 48 insertions, 22 deletions
diff --git a/ext/mysql/php_mysql.c b/ext/mysql/php_mysql.c index 95aedc25e0..54287968df 100644 --- a/ext/mysql/php_mysql.c +++ b/ext/mysql/php_mysql.c @@ -542,7 +542,7 @@ static void php_mysql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent) client_flags ^= CLIENT_LOCAL_FILES; } - hashed_details_length = spprintf(&hashed_details, 0, "mysql_%s_%s_%s", SAFE_STRING(host_and_port), SAFE_STRING(user), SAFE_STRING(passwd)); + hashed_details_length = spprintf(&hashed_details, 0, "mysql_%s_%s_%s_%d", SAFE_STRING(host_and_port), SAFE_STRING(user), SAFE_STRING(passwd), client_flags); } /* We cannot use mysql_port anymore in windows, need to use diff --git a/ext/pdo/pdo_dbh.c b/ext/pdo/pdo_dbh.c index 4925ddde01..d169a59f8e 100755 --- a/ext/pdo/pdo_dbh.c +++ b/ext/pdo/pdo_dbh.c @@ -830,7 +830,7 @@ static PHP_METHOD(PDO, setAttribute) PDO_CONSTRUCT_CHECK; - if (pdo_dbh_attribute_set(dbh, attr, value TSRMLS_CC)) { + if (pdo_dbh_attribute_set(dbh, attr, value TSRMLS_CC) != FAILURE) { RETURN_TRUE; } RETURN_FALSE; diff --git a/ext/pdo/pdo_sql_parser.c b/ext/pdo/pdo_sql_parser.c index 4355a97e68..5215efb435 100644 --- a/ext/pdo/pdo_sql_parser.c +++ b/ext/pdo/pdo_sql_parser.c @@ -327,13 +327,25 @@ PDO_API int pdo_parse_params(pdo_stmt_t *stmt, char *inquery, int inquery_len, } if (params && bindno != zend_hash_num_elements(params) && stmt->supports_placeholders == PDO_PLACEHOLDER_NONE) { + /* extra bit of validation for instances when same params are bound more then once */ + if (query_type != PDO_PLACEHOLDER_POSITIONAL && bindno > zend_hash_num_elements(params)) { + int ok = 1; + for (plc = placeholders; plc; plc = plc->next) { + if (zend_hash_find(params, plc->pos, plc->len, (void**) ¶m) == FAILURE) { + ok = 0; + break; + } + } + if (ok) { + goto safe; + } + } pdo_raise_impl_error(stmt->dbh, stmt, "HY093", "number of bound variables does not match number of tokens" TSRMLS_CC); ret = -1; goto clean_up; } - +safe: /* what are we going to do ? */ - if (stmt->supports_placeholders == PDO_PLACEHOLDER_NONE) { /* query generation */ diff --git a/ext/pdo/pdo_sql_parser.re b/ext/pdo/pdo_sql_parser.re index c5c8cbaaf4..0a6903f61b 100644 --- a/ext/pdo/pdo_sql_parser.re +++ b/ext/pdo/pdo_sql_parser.re @@ -154,13 +154,25 @@ PDO_API int pdo_parse_params(pdo_stmt_t *stmt, char *inquery, int inquery_len, } if (params && bindno != zend_hash_num_elements(params) && stmt->supports_placeholders == PDO_PLACEHOLDER_NONE) { + /* extra bit of validation for instances when same params are bound more then once */ + if (query_type != PDO_PLACEHOLDER_POSITIONAL && bindno > zend_hash_num_elements(params)) { + int ok = 1; + for (plc = placeholders; plc; plc = plc->next) { + if (zend_hash_find(params, plc->pos, plc->len, (void**) ¶m) == FAILURE) { + ok = 0; + break; + } + } + if (ok) { + goto safe; + } + } pdo_raise_impl_error(stmt->dbh, stmt, "HY093", "number of bound variables does not match number of tokens" TSRMLS_CC); ret = -1; goto clean_up; } - +safe: /* what are we going to do ? */ - if (stmt->supports_placeholders == PDO_PLACEHOLDER_NONE) { /* query generation */ diff --git a/ext/pdo_mysql/mysql_statement.c b/ext/pdo_mysql/mysql_statement.c index 86159d95ab..f0ff04dc92 100755 --- a/ext/pdo_mysql/mysql_statement.c +++ b/ext/pdo_mysql/mysql_statement.c @@ -363,6 +363,7 @@ static int pdo_mysql_stmt_fetch(pdo_stmt_t *stmt, #endif if (!S->result) { + strcpy(stmt->error_code, "HY000"); return 0; } if ((S->current_data = mysql_fetch_row(S->result)) == NULL) { diff --git a/ext/soap/php_http.c b/ext/soap/php_http.c index 68ed03bd39..4c355696b6 100644 --- a/ext/soap/php_http.c +++ b/ext/soap/php_http.c @@ -916,19 +916,20 @@ try_again: efree(http_body); efree(loc); if (new_url->scheme == NULL && new_url->path != NULL) { - new_url->scheme = estrdup(phpurl->scheme); - new_url->host = estrdup(phpurl->host); + new_url->scheme = NULL; + new_url->host = phpurl->host ? estrdup(phpurl->host) : NULL; new_url->port = phpurl->port; if (new_url->path && new_url->path[0] != '/') { - char *t = phpurl->path?phpurl->path:"/"; + char *t = phpurl->path; char *p = strrchr(t, '/'); - char *s = emalloc((p - t) + strlen(new_url->path) + 2); - - strncpy(s, t, (p - t) + 1); - s[(p - t) + 1] = 0; - strcat(s, new_url->path); - efree(new_url->path); - new_url->path = s; + if (p) { + char *s = emalloc((p - t) + strlen(new_url->path) + 2); + strncpy(s, t, (p - t) + 1); + s[(p - t) + 1] = 0; + strcat(s, new_url->path); + efree(new_url->path); + new_url->path = s; + } } } phpurl = new_url; diff --git a/ext/xmlrpc/libxmlrpc/xml_to_dandarpc.c b/ext/xmlrpc/libxmlrpc/xml_to_dandarpc.c index b51d991723..753222c55d 100644 --- a/ext/xmlrpc/libxmlrpc/xml_to_dandarpc.c +++ b/ext/xmlrpc/libxmlrpc/xml_to_dandarpc.c @@ -104,7 +104,7 @@ XMLRPC_VALUE xml_element_to_DANDARPC_REQUEST_worker(XMLRPC_REQUEST request, XMLR } else if(!strcmp(type, ATTR_BASE64)) { struct buffer_st buf; - base64_decode(&buf, el->text.str, el->text.len); + base64_decode_xmlrpc(&buf, el->text.str, el->text.len); XMLRPC_SetValueBase64(xCurrent, buf.data, buf.offset); buffer_delete(&buf); } @@ -227,7 +227,7 @@ xml_element* DANDARPC_to_xml_element_worker(XMLRPC_REQUEST request, XMLRPC_VALUE { struct buffer_st buf; pAttrType = ATTR_BASE64; - base64_encode(&buf, XMLRPC_GetValueBase64(node), XMLRPC_GetValueStringLen(node)); + base64_encode_xmlrpc(&buf, XMLRPC_GetValueBase64(node), XMLRPC_GetValueStringLen(node)); simplestring_addn(&elem_val->text, buf.data, buf.offset ); buffer_delete(&buf); } diff --git a/ext/xmlrpc/libxmlrpc/xml_to_soap.c b/ext/xmlrpc/libxmlrpc/xml_to_soap.c index a30b3c11f7..76dcc034d9 100644 --- a/ext/xmlrpc/libxmlrpc/xml_to_soap.c +++ b/ext/xmlrpc/libxmlrpc/xml_to_soap.c @@ -363,7 +363,7 @@ XMLRPC_VALUE xml_element_to_SOAP_REQUEST_worker(XMLRPC_REQUEST request, } else if (!strcmp(type, TOKEN_BASE64)) { struct buffer_st buf; - base64_decode(&buf, el->text.str, el->text.len); + base64_decode_xmlrpc(&buf, el->text.str, el->text.len); XMLRPC_SetValueBase64(xCurrent, buf.data, buf.offset); buffer_delete(&buf); } @@ -529,7 +529,7 @@ xml_element* SOAP_to_xml_element_worker(XMLRPC_REQUEST request, XMLRPC_VALUE nod { struct buffer_st buf; pAttrType = TOKEN_BASE64; - base64_encode(&buf, XMLRPC_GetValueBase64(node), XMLRPC_GetValueStringLen(node)); + base64_encode_xmlrpc(&buf, XMLRPC_GetValueBase64(node), XMLRPC_GetValueStringLen(node)); simplestring_addn(&elem_val->text, buf.data, buf.offset ); buffer_delete(&buf); } diff --git a/ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.c b/ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.c index 2a1e77312b..13976077be 100644 --- a/ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.c +++ b/ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.c @@ -139,7 +139,7 @@ XMLRPC_VALUE xml_element_to_XMLRPC_REQUEST_worker(XMLRPC_REQUEST request, XMLRPC } else if (!strcmp(el->name, ELEM_BASE64)) { struct buffer_st buf; - base64_decode(&buf, el->text.str, el->text.len); + base64_decode_xmlrpc(&buf, el->text.str, el->text.len); XMLRPC_SetValueBase64(current_val, buf.data, buf.offset); buffer_delete(&buf); } @@ -242,7 +242,7 @@ xml_element* XMLRPC_to_xml_element_worker(XMLRPC_VALUE current_vector, XMLRPC_VA { struct buffer_st buf; elem_val->name = strdup(ELEM_BASE64); - base64_encode(&buf, XMLRPC_GetValueBase64(node), XMLRPC_GetValueStringLen(node)); + base64_encode_xmlrpc(&buf, XMLRPC_GetValueBase64(node), XMLRPC_GetValueStringLen(node)); simplestring_addn(&elem_val->text, buf.data, buf.offset ); buffer_delete(&buf); } |
