diff options
Diffstat (limited to 'ext')
| -rw-r--r-- | ext/pdo/pdo_dbh.c | 2 | ||||
| -rw-r--r-- | ext/pdo/pdo_sqlstate.c | 2 | ||||
| -rw-r--r-- | ext/pdo_pgsql/pgsql_driver.c | 103 | ||||
| -rw-r--r-- | ext/pdo_pgsql/pgsql_statement.c | 54 | ||||
| -rw-r--r-- | ext/pdo_pgsql/php_pdo_pgsql_int.h | 4 | ||||
| -rw-r--r-- | ext/soap/php_encoding.c | 6 | ||||
| -rw-r--r-- | ext/soap/php_sdl.c | 4 | ||||
| -rw-r--r-- | ext/soap/soap.c | 12 |
8 files changed, 91 insertions, 96 deletions
diff --git a/ext/pdo/pdo_dbh.c b/ext/pdo/pdo_dbh.c index 9f286a5ca6..2ff3be7cbb 100644 --- a/ext/pdo/pdo_dbh.c +++ b/ext/pdo/pdo_dbh.c @@ -402,7 +402,7 @@ options: zval *attr_value; ulong long_key; zend_string *str_key = NULL; - + ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(options), long_key, str_key, attr_value) { if (str_key) { continue; diff --git a/ext/pdo/pdo_sqlstate.c b/ext/pdo/pdo_sqlstate.c index 4d6a01011c..e3585844c6 100644 --- a/ext/pdo/pdo_sqlstate.c +++ b/ext/pdo/pdo_sqlstate.c @@ -319,7 +319,7 @@ int pdo_sqlstate_init_error_table(void) for (i = 0; i < sizeof(err_initializer)/sizeof(err_initializer[0]); i++) { info = &err_initializer[i]; - zend_hash_str_add_ptr(&err_hash, info->state, sizeof(info->state), info); + zend_hash_str_add_ptr(&err_hash, info->state, sizeof(info->state), (void *)info); } return SUCCESS; diff --git a/ext/pdo_pgsql/pgsql_driver.c b/ext/pdo_pgsql/pgsql_driver.c index 24a5865c75..2b7f217418 100644 --- a/ext/pdo_pgsql/pgsql_driver.c +++ b/ext/pdo_pgsql/pgsql_driver.c @@ -137,13 +137,12 @@ static size_t pgsql_lob_read(php_stream *stream, char *buf, size_t count TSRMLS_ static int pgsql_lob_close(php_stream *stream, int close_handle TSRMLS_DC) { struct pdo_pgsql_lob_self *self = (struct pdo_pgsql_lob_self*)stream->abstract; - pdo_dbh_t *dbh = self->dbh; if (close_handle) { lo_close(self->conn, self->lfd); } + zval_ptr_dtor(&self->dbh); efree(self); - php_pdo_dbh_delref(dbh TSRMLS_CC); return 0; } @@ -173,13 +172,13 @@ php_stream_ops pdo_pgsql_lob_stream_ops = { NULL }; -php_stream *pdo_pgsql_create_lob_stream(pdo_dbh_t *dbh, int lfd, Oid oid TSRMLS_DC) +php_stream *pdo_pgsql_create_lob_stream(zval *dbh, int lfd, Oid oid TSRMLS_DC) { php_stream *stm; struct pdo_pgsql_lob_self *self = ecalloc(1, sizeof(*self)); - pdo_pgsql_db_handle *H = (pdo_pgsql_db_handle *)dbh->driver_data; + pdo_pgsql_db_handle *H = (pdo_pgsql_db_handle *)(Z_PDO_DBH_P(dbh))->driver_data; - self->dbh = dbh; + ZVAL_COPY_VALUE(&self->dbh, dbh); self->lfd = lfd; self->oid = oid; self->conn = H->server; @@ -187,7 +186,7 @@ php_stream *pdo_pgsql_create_lob_stream(pdo_dbh_t *dbh, int lfd, Oid oid TSRMLS_ stm = php_stream_alloc(&pdo_pgsql_lob_stream_ops, self, 0, "r+b"); if (stm) { - php_pdo_dbh_addref(dbh TSRMLS_CC); + Z_ADDREF_P(dbh); return stm; } @@ -380,17 +379,17 @@ static int pdo_pgsql_get_attribute(pdo_dbh_t *dbh, long attr, zval *return_value switch (attr) { case PDO_ATTR_CLIENT_VERSION: - ZVAL_STRING(return_value, PG_VERSION, 1); + ZVAL_STRING(return_value, PG_VERSION); break; case PDO_ATTR_SERVER_VERSION: if (PQprotocolVersion(H->server) >= 3) { /* PostgreSQL 7.4 or later */ - ZVAL_STRING(return_value, (char*)PQparameterStatus(H->server, "server_version"), 1); + ZVAL_STRING(return_value, (char*)PQparameterStatus(H->server, "server_version")); } else /* emulate above via a query */ { PGresult *res = PQexec(H->server, "SELECT VERSION()"); if (res && PQresultStatus(res) == PGRES_TUPLES_OK) { - ZVAL_STRING(return_value, (char *)PQgetvalue(res, 0, 0), 1); + ZVAL_STRING(return_value, (char *)PQgetvalue(res, 0, 0)); } if (res) { @@ -402,48 +401,51 @@ static int pdo_pgsql_get_attribute(pdo_dbh_t *dbh, long attr, zval *return_value case PDO_ATTR_CONNECTION_STATUS: switch (PQstatus(H->server)) { case CONNECTION_STARTED: - ZVAL_STRINGL(return_value, "Waiting for connection to be made.", sizeof("Waiting for connection to be made.")-1, 1); + ZVAL_STRINGL(return_value, "Waiting for connection to be made.", sizeof("Waiting for connection to be made.")-1); break; case CONNECTION_MADE: case CONNECTION_OK: - ZVAL_STRINGL(return_value, "Connection OK; waiting to send.", sizeof("Connection OK; waiting to send.")-1, 1); + ZVAL_STRINGL(return_value, "Connection OK; waiting to send.", sizeof("Connection OK; waiting to send.")-1); break; case CONNECTION_AWAITING_RESPONSE: - ZVAL_STRINGL(return_value, "Waiting for a response from the server.", sizeof("Waiting for a response from the server.")-1, 1); + ZVAL_STRINGL(return_value, "Waiting for a response from the server.", sizeof("Waiting for a response from the server.")-1); break; case CONNECTION_AUTH_OK: - ZVAL_STRINGL(return_value, "Received authentication; waiting for backend start-up to finish.", sizeof("Received authentication; waiting for backend start-up to finish.")-1, 1); + ZVAL_STRINGL(return_value, "Received authentication; waiting for backend start-up to finish.", sizeof("Received authentication; waiting for backend start-up to finish.")-1); break; #ifdef CONNECTION_SSL_STARTUP case CONNECTION_SSL_STARTUP: - ZVAL_STRINGL(return_value, "Negotiating SSL encryption.", sizeof("Negotiating SSL encryption.")-1, 1); + ZVAL_STRINGL(return_value, "Negotiating SSL encryption.", sizeof("Negotiating SSL encryption.")-1); break; #endif case CONNECTION_SETENV: - ZVAL_STRINGL(return_value, "Negotiating environment-driven parameter settings.", sizeof("Negotiating environment-driven parameter settings.")-1, 1); + ZVAL_STRINGL(return_value, "Negotiating environment-driven parameter settings.", sizeof("Negotiating environment-driven parameter settings.")-1); break; case CONNECTION_BAD: default: - ZVAL_STRINGL(return_value, "Bad connection.", sizeof("Bad connection.")-1, 1); + ZVAL_STRINGL(return_value, "Bad connection.", sizeof("Bad connection.")-1); break; } break; case PDO_ATTR_SERVER_INFO: { int spid = PQbackendPID(H->server); - char *tmp; - spprintf(&tmp, 0, - "PID: %d; Client Encoding: %s; Is Superuser: %s; Session Authorization: %s; Date Style: %s", - spid, - (char*)PQparameterStatus(H->server, "client_encoding"), - (char*)PQparameterStatus(H->server, "is_superuser"), - (char*)PQparameterStatus(H->server, "session_authorization"), - (char*)PQparameterStatus(H->server, "DateStyle")); - ZVAL_STRING(return_value, tmp, 0); + + + zend_string *str_info = + strpprintf(0, + "PID: %d; Client Encoding: %s; Is Superuser: %s; Session Authorization: %s; Date Style: %s", + spid, + (char*)PQparameterStatus(H->server, "client_encoding"), + (char*)PQparameterStatus(H->server, "is_superuser"), + (char*)PQparameterStatus(H->server, "session_authorization"), + (char*)PQparameterStatus(H->server, "DateStyle")); + + ZVAL_STR(return_value, str_info); } break; @@ -533,7 +535,7 @@ static PHP_METHOD(PDO, pgsqlCopyFromArray) RETURN_FALSE; } - dbh = zend_object_store_get_object(getThis() TSRMLS_CC); + dbh = Z_PDO_DBH_P(getThis()); PDO_CONSTRUCT_CHECK; PDO_DBH_CLEAR_ERR(); @@ -564,33 +566,30 @@ static PHP_METHOD(PDO, pgsqlCopyFromArray) if (status == PGRES_COPY_IN && pgsql_result) { int command_failed = 0; int buffer_len = 0; - zval **tmp; - HashPosition pos; + zval *tmp; PQclear(pgsql_result); - zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pg_rows), &pos); - while (zend_hash_get_current_data_ex(Z_ARRVAL_P(pg_rows), (void **) &tmp, &pos) == SUCCESS) { + ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(pg_rows), tmp) { int query_len; convert_to_string_ex(tmp); - if (buffer_len < Z_STRLEN_PP(tmp)) { - buffer_len = Z_STRLEN_PP(tmp); + if (buffer_len < Z_STRLEN_P(tmp)) { + buffer_len = Z_STRLEN_P(tmp); query = erealloc(query, buffer_len + 2); /* room for \n\0 */ } - memcpy(query, Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp)); - query_len = Z_STRLEN_PP(tmp); + memcpy(query, Z_STRVAL_P(tmp), Z_STRLEN_P(tmp)); + query_len = Z_STRLEN_P(tmp); if (query[query_len - 1] != '\n') { query[query_len++] = '\n'; } query[query_len] = '\0'; if (PQputCopyData(H->server, query, query_len) != 1) { - efree(query); - pdo_pgsql_error(dbh, PGRES_FATAL_ERROR, NULL); + efree(query); + pdo_pgsql_error(dbh, PGRES_FATAL_ERROR, NULL); PDO_HANDLE_DBH_ERR(); - RETURN_FALSE; - } - zend_hash_move_forward_ex(Z_ARRVAL_P(pg_rows), &pos); - } + RETURN_FALSE; + } + } ZEND_HASH_FOREACH_END(); if (query) { efree(query); } @@ -641,7 +640,7 @@ static PHP_METHOD(PDO, pgsqlCopyFromFile) } /* Obtain db Handler */ - dbh = zend_object_store_get_object(getThis() TSRMLS_CC); + dbh = Z_PDO_DBH_P(getThis()); PDO_CONSTRUCT_CHECK; PDO_DBH_CLEAR_ERR(); @@ -741,7 +740,7 @@ static PHP_METHOD(PDO, pgsqlCopyToFile) return; } - dbh = zend_object_store_get_object(getThis() TSRMLS_CC); + dbh = Z_PDO_DBH_P(getThis()); PDO_CONSTRUCT_CHECK; PDO_DBH_CLEAR_ERR(); @@ -834,7 +833,7 @@ static PHP_METHOD(PDO, pgsqlCopyToArray) return; } - dbh = zend_object_store_get_object(getThis() TSRMLS_CC); + dbh = Z_PDO_DBH_P(getThis()); PDO_CONSTRUCT_CHECK; PDO_DBH_CLEAR_ERR(); @@ -899,7 +898,7 @@ static PHP_METHOD(PDO, pgsqlLOBCreate) pdo_pgsql_db_handle *H; Oid lfd; - dbh = zend_object_store_get_object(getThis() TSRMLS_CC); + dbh = Z_PDO_DBH_P(getThis()); PDO_CONSTRUCT_CHECK; PDO_DBH_CLEAR_ERR(); @@ -907,9 +906,9 @@ static PHP_METHOD(PDO, pgsqlLOBCreate) lfd = lo_creat(H->server, INV_READ|INV_WRITE); if (lfd != InvalidOid) { - char *buf; - spprintf(&buf, 0, "%lu", (long) lfd); - RETURN_STRING(buf, 0); + zend_string *buf = strpprintf(0, "%lu", (long) lfd); + + RETURN_STR(buf); } pdo_pgsql_error(dbh, PGRES_FATAL_ERROR, NULL); @@ -947,7 +946,7 @@ static PHP_METHOD(PDO, pgsqlLOBOpen) mode = INV_READ|INV_WRITE; } - dbh = zend_object_store_get_object(getThis() TSRMLS_CC); + dbh = Z_PDO_DBH_P(getThis()); PDO_CONSTRUCT_CHECK; PDO_DBH_CLEAR_ERR(); @@ -956,7 +955,7 @@ static PHP_METHOD(PDO, pgsqlLOBOpen) lfd = lo_open(H->server, oid, mode); if (lfd >= 0) { - php_stream *stream = pdo_pgsql_create_lob_stream(dbh, lfd, oid TSRMLS_CC); + php_stream *stream = pdo_pgsql_create_lob_stream(getThis(), lfd, oid TSRMLS_CC); if (stream) { php_stream_to_zval(stream, return_value); return; @@ -990,7 +989,7 @@ static PHP_METHOD(PDO, pgsqlLOBUnlink) RETURN_FALSE; } - dbh = zend_object_store_get_object(getThis() TSRMLS_CC); + dbh = Z_PDO_DBH_P(getThis()); PDO_CONSTRUCT_CHECK; PDO_DBH_CLEAR_ERR(); @@ -1021,7 +1020,7 @@ static PHP_METHOD(PDO, pgsqlGetNotify) RETURN_FALSE; } - dbh = zend_object_store_get_object(getThis() TSRMLS_CC); + dbh = Z_PDO_DBH_P(getThis()); PDO_CONSTRUCT_CHECK; if (result_type == PDO_FETCH_USE_DEFAULT) { @@ -1075,7 +1074,7 @@ static PHP_METHOD(PDO, pgsqlGetPid) pdo_dbh_t *dbh; pdo_pgsql_db_handle *H; - dbh = zend_object_store_get_object(getThis() TSRMLS_CC); + dbh = Z_PDO_DBH_P(getThis()); PDO_CONSTRUCT_CHECK; H = (pdo_pgsql_db_handle *)dbh->driver_data; diff --git a/ext/pdo_pgsql/pgsql_statement.c b/ext/pdo_pgsql/pgsql_statement.c index c9c9e5c450..bfceaf4949 100644 --- a/ext/pdo_pgsql/pgsql_statement.c +++ b/ext/pdo_pgsql/pgsql_statement.c @@ -255,16 +255,17 @@ static int pgsql_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_data * case PDO_PARAM_EVT_NORMALIZE: /* decode name from $1, $2 into 0, 1 etc. */ if (param->name) { - if (param->name[0] == '$') { - param->paramno = atoi(param->name + 1); + if (param->name->val[0] == '$') { + param->paramno = atoi(param->name->val + 1); } else { /* resolve parameter name to rewritten name */ - char *nameptr; - if (stmt->bound_param_map && SUCCESS == zend_hash_find(stmt->bound_param_map, - param->name, param->namelen + 1, (void**)&nameptr)) { - param->paramno = atoi(nameptr + 1) - 1; + zval *namevar; + + if (stmt->bound_param_map && (namevar = zend_hash_find(stmt->bound_param_map, + param->name)) != NULL) { + param->paramno = atoi(Z_PTR_P(namevar) + 1) - 1; } else { - pdo_raise_impl_error(stmt->dbh, stmt, "HY093", param->name TSRMLS_CC); + pdo_raise_impl_error(stmt->dbh, stmt, "HY093", param->name->val TSRMLS_CC); return 0; } } @@ -303,7 +304,7 @@ static int pgsql_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_data * } if (PDO_PARAM_TYPE(param->param_type) == PDO_PARAM_LOB && - Z_TYPE_P(param->parameter) == IS_RESOURCE) { + Z_TYPE(param->parameter) == IS_RESOURCE) { php_stream *stm; php_stream_from_zval_no_verify(stm, ¶m->parameter); if (stm) { @@ -322,15 +323,12 @@ static int pgsql_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_data * S->param_types[param->paramno] = OIDOID; return 1; } else { - int len; - - SEPARATE_ZVAL_IF_NOT_REF(¶m->parameter); - Z_TYPE_P(param->parameter) = IS_STRING; - - if ((len = php_stream_copy_to_mem(stm, &Z_STRVAL_P(param->parameter), PHP_STREAM_COPY_ALL, 0)) > 0) { - Z_STRLEN_P(param->parameter) = len; + zend_string *str = php_stream_copy_to_mem(stm, PHP_STREAM_COPY_ALL, 0); + if (str != NULL) { + SEPARATE_ZVAL_IF_NOT_REF(¶m->parameter); + ZVAL_STR(¶m->parameter, str); } else { - ZVAL_EMPTY_STRING(param->parameter); + ZVAL_EMPTY_STRING(¶m->parameter); } } } else { @@ -341,18 +339,18 @@ static int pgsql_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_data * } if (PDO_PARAM_TYPE(param->param_type) == PDO_PARAM_NULL || - Z_TYPE_P(param->parameter) == IS_NULL) { + Z_TYPE(param->parameter) == IS_NULL) { S->param_values[param->paramno] = NULL; S->param_lengths[param->paramno] = 0; - } else if (Z_TYPE_P(param->parameter) == IS_BOOL) { - S->param_values[param->paramno] = Z_BVAL_P(param->parameter) ? "t" : "f"; + } else if (Z_TYPE(param->parameter) == IS_FALSE || Z_TYPE(param->parameter) == IS_TRUE) { + S->param_values[param->paramno] = Z_TYPE(param->parameter) == IS_TRUE ? "t" : "f"; S->param_lengths[param->paramno] = 1; S->param_formats[param->paramno] = 0; } else { SEPARATE_ZVAL_IF_NOT_REF(¶m->parameter); - convert_to_string(param->parameter); - S->param_values[param->paramno] = Z_STRVAL_P(param->parameter); - S->param_lengths[param->paramno] = Z_STRLEN_P(param->parameter); + convert_to_string_ex(¶m->parameter); + S->param_values[param->paramno] = Z_STRVAL(param->parameter); + S->param_lengths[param->paramno] = Z_STRLEN(param->parameter); S->param_formats[param->paramno] = 0; } @@ -371,7 +369,7 @@ static int pgsql_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_data * ((param->param_type & PDO_PARAM_INPUT_OUTPUT) != PDO_PARAM_INPUT_OUTPUT)) { SEPARATE_ZVAL(¶m->parameter); param->param_type = PDO_PARAM_STR; - ZVAL_STRINGL(param->parameter, Z_BVAL_P(param->parameter) ? "t" : "f", 1, 1); + ZVAL_STRINGL(¶m->parameter, Z_TYPE(param->parameter) == IS_TRUE ? "t" : "f", 1); } } return 1; @@ -450,11 +448,9 @@ static int pgsql_stmt_describe(pdo_stmt_t *stmt, int colno TSRMLS_DC) case OIDOID: /* did the user bind the column as a LOB ? */ if (stmt->bound_columns && ( - SUCCESS == zend_hash_index_find(stmt->bound_columns, - colno, (void**)¶m) || - SUCCESS == zend_hash_find(stmt->bound_columns, - cols[colno].name, cols[colno].namelen, - (void**)¶m))) { + (param = zend_hash_index_find_ptr(stmt->bound_columns, colno)) != NULL || + (param = zend_hash_str_find_ptr(stmt->bound_columns, cols[colno].name, cols[colno].namelen)) != NULL)) { + if (PDO_PARAM_TYPE(param->param_type) == PDO_PARAM_LOB) { cols[colno].param_type = PDO_PARAM_LOB; break; @@ -526,7 +522,7 @@ static int pgsql_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr, unsigned Oid oid = (Oid)strtoul(*ptr, &end_ptr, 10); int loid = lo_open(S->H->server, oid, INV_READ); if (loid >= 0) { - *ptr = (char*)pdo_pgsql_create_lob_stream(stmt->dbh, loid, oid TSRMLS_CC); + *ptr = (char*)pdo_pgsql_create_lob_stream(&stmt->database_object_handle, loid, oid TSRMLS_CC); *len = 0; return *ptr ? 1 : 0; } diff --git a/ext/pdo_pgsql/php_pdo_pgsql_int.h b/ext/pdo_pgsql/php_pdo_pgsql_int.h index 1fedababd2..4d0652049e 100644 --- a/ext/pdo_pgsql/php_pdo_pgsql_int.h +++ b/ext/pdo_pgsql/php_pdo_pgsql_int.h @@ -95,7 +95,7 @@ enum { }; struct pdo_pgsql_lob_self { - pdo_dbh_t *dbh; + zval dbh; PGconn *conn; int lfd; Oid oid; @@ -109,7 +109,7 @@ enum pdo_pgsql_specific_constants { PGSQL_TRANSACTION_UNKNOWN = PQTRANS_UNKNOWN }; -php_stream *pdo_pgsql_create_lob_stream(pdo_dbh_t *stmt, int lfd, Oid oid TSRMLS_DC); +php_stream *pdo_pgsql_create_lob_stream(zval *pdh, int lfd, Oid oid TSRMLS_DC); extern php_stream_ops pdo_pgsql_lob_stream_ops; #endif /* PHP_PDO_PGSQL_INT_H */ diff --git a/ext/soap/php_encoding.c b/ext/soap/php_encoding.c index 9afaa51b9c..29ca2ab41d 100644 --- a/ext/soap/php_encoding.c +++ b/ext/soap/php_encoding.c @@ -642,11 +642,11 @@ zval *to_zval_user(zval *ret, encodeTypePtr type, xmlNodePtr node TSRMLS_DC) ZVAL_STRING(&data, (char*)xmlBufferContent(buf)); xmlBufferFree(buf); xmlFreeNode(copy); - - ZVAL_NULL(ret); if (call_user_function(EG(function_table), NULL, &type->map->to_zval, ret, 1, &data TSRMLS_CC) == FAILURE) { soap_error0(E_ERROR, "Encoding: Error calling from_xml callback"); + } else if (EG(exception)) { + ZVAL_NULL(ret); } zval_ptr_dtor(&data); } else { @@ -3063,9 +3063,9 @@ static xmlNodePtr to_xml_list(encodeTypePtr enc, zval *data, int style, xmlNodeP *next = '\0'; next++; } -//??? ZVAL_STRING(&dummy_zval, start, 0); ZVAL_STRING(&dummy_zval, start); dummy = master_to_xml(list_enc, &dummy_zval, SOAP_LITERAL, ret TSRMLS_CC); + zval_ptr_dtor(&dummy_zval); if (dummy && dummy->children && dummy->children->content) { if (list.s && list.s->len != 0) { smart_str_appendc(&list, ' '); diff --git a/ext/soap/php_sdl.c b/ext/soap/php_sdl.c index ff98fae696..faafdecee7 100644 --- a/ext/soap/php_sdl.c +++ b/ext/soap/php_sdl.c @@ -446,7 +446,7 @@ static void load_wsdl_ex(zval *this_ptr, char *struri, sdlCtx *ctx, int include static sdlSoapBindingFunctionHeaderPtr wsdl_soap_binding_header(sdlCtx* ctx, xmlNodePtr header, char* wsdl_soap_namespace, int fault) { xmlAttrPtr tmp; - xmlNodePtr *message, part; + xmlNodePtr message, part; char *ctype; sdlSoapBindingFunctionHeaderPtr h; @@ -469,7 +469,7 @@ static sdlSoapBindingFunctionHeaderPtr wsdl_soap_binding_header(sdlCtx* ctx, xml if (!tmp) { soap_error0(E_ERROR, "Parsing WSDL: Missing part attribute for <header>"); } - part = get_node_with_attribute_ex((*message)->children, "part", WSDL_NAMESPACE, "name", (char*)tmp->children->content, NULL); + part = get_node_with_attribute_ex(message->children, "part", WSDL_NAMESPACE, "name", (char*)tmp->children->content, NULL); if (!part) { soap_error1(E_ERROR, "Parsing WSDL: Missing part '%s' in <message>", tmp->children->content); } diff --git a/ext/soap/soap.c b/ext/soap/soap.c index 937d50b15d..570b1ad640 100644 --- a/ext/soap/soap.c +++ b/ext/soap/soap.c @@ -1029,22 +1029,22 @@ static HashTable* soap_create_typemap(sdlPtr sdl, HashTable *ht TSRMLS_DC) ZEND_HASH_FOREACH_STR_KEY_VAL(ht2, name, tmp) { if (name) { - if (name->len == sizeof("type_name") && + if (name->len == sizeof("type_name")-1 && strncmp(name->val, "type_name", sizeof("type_name")-1) == 0) { if (Z_TYPE_P(tmp) == IS_STRING) { type_name = Z_STRVAL_P(tmp); } else if (Z_TYPE_P(tmp) != IS_NULL) { } - } else if (name->len == sizeof("type_ns") && + } else if (name->len == sizeof("type_ns")-1 && strncmp(name->val, "type_ns", sizeof("type_ns")-1) == 0) { if (Z_TYPE_P(tmp) == IS_STRING) { type_ns = Z_STRVAL_P(tmp); } else if (Z_TYPE_P(tmp) != IS_NULL) { } - } else if (name->len == sizeof("to_xml") && + } else if (name->len == sizeof("to_xml")-1 && strncmp(name->val, "to_xml", sizeof("to_xml")-1) == 0) { to_xml = tmp; - } else if (name->len == sizeof("from_xml") && + } else if (name->len == sizeof("from_xml")-1 && strncmp(name->val, "from_xml", sizeof("from_xml")-1) == 0) { to_zval = tmp; } @@ -4382,16 +4382,15 @@ static xmlNodePtr serialize_zval(zval *val, sdlParamPtr param, char *paramName, encodePtr enc; zval defval; + ZVAL_UNDEF(&defval); if (param != NULL) { enc = param->encode; if (val == NULL) { if (param->element) { if (param->element->fixed) { - //??? val has to be freed ZVAL_STRING(&defval, param->element->fixed); val = &defval; } else if (param->element->def && !param->element->nillable) { - //??? val has to be freed ZVAL_STRING(&defval, param->element->def); val = &defval; } @@ -4401,6 +4400,7 @@ static xmlNodePtr serialize_zval(zval *val, sdlParamPtr param, char *paramName, enc = NULL; } xmlParam = master_to_xml(enc, val, style, parent TSRMLS_CC); + zval_ptr_dtor(&defval); if (!strcmp((char*)xmlParam->name, "BOGUS")) { xmlNodeSetName(xmlParam, BAD_CAST(paramName)); } |
