summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXinchen Hui <laruence@php.net>2014-08-14 11:52:46 +0800
committerXinchen Hui <laruence@php.net>2014-08-14 11:52:46 +0800
commitbfc1ae07bec3bda6dc0522da50b35ba093d4247c (patch)
treece6d954be2be675df92a9cab7c662bc73a6491e0
parent35dd200430994b1b2807633e5d5dd3370b59633e (diff)
parent73fe4186370d8ca8bd0b8a4a8f995852cb42fa75 (diff)
downloadphp-git-bfc1ae07bec3bda6dc0522da50b35ba093d4247c.tar.gz
Merge branch 'phpng' of https://git.php.net/repository/php-src into phpng
-rw-r--r--ext/date/php_date.c9
-rw-r--r--ext/imap/php_imap.c138
-rw-r--r--ext/mysqlnd/mysqlnd_net.c6
-rw-r--r--ext/odbc/php_odbc.c18
-rwxr-xr-xext/openssl/openssl.c226
-rw-r--r--ext/openssl/xp_ssl.c13
-rw-r--r--ext/pdo_odbc/odbc_driver.c8
-rw-r--r--ext/phar/phar_object.c51
-rw-r--r--ext/phar/util.c5
-rw-r--r--ext/reflection/php_reflection.c20
-rw-r--r--ext/soap/php_http.c3
-rw-r--r--ext/soap/soap.c9
-rw-r--r--ext/spl/spl_iterators.c8
-rw-r--r--ext/standard/fsock.c12
-rw-r--r--ext/standard/http_fopen_wrapper.c7
-rw-r--r--ext/standard/info.c1
-rw-r--r--ext/standard/streamsfuncs.c59
-rw-r--r--ext/standard/string.c56
-rw-r--r--ext/standard/user_filters.c1
-rw-r--r--ext/standard/var_unserializer.c77
-rw-r--r--ext/standard/var_unserializer.re31
-rw-r--r--ext/xml/xml.c34
-rw-r--r--main/fopen_wrappers.c29
-rw-r--r--main/network.c107
-rw-r--r--main/output.c47
-rw-r--r--main/php_network.h19
-rw-r--r--main/php_output.h3
-rw-r--r--main/streams/filter.c1
-rw-r--r--main/streams/php_stream_transport.h22
-rw-r--r--main/streams/transports.c27
-rw-r--r--main/streams/xp_socket.c20
-rw-r--r--sapi/cgi/cgi_main.c1
-rw-r--r--sapi/cli/php_cli_server.c37
-rw-r--r--win32/sendmail.c3
34 files changed, 506 insertions, 602 deletions
diff --git a/ext/date/php_date.c b/ext/date/php_date.c
index 78251383e1..49dab65147 100644
--- a/ext/date/php_date.c
+++ b/ext/date/php_date.c
@@ -4556,7 +4556,7 @@ static void php_do_date_sunrise_sunset(INTERNAL_FUNCTION_PARAMETERS, int calc_su
int rs;
timelib_time *t;
timelib_tzinfo *tzi;
- char *retstr;
+ zend_string *retstr;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|ldddd", &time, &retformat, &latitude, &longitude, &zenith, &gmt_offset) == FAILURE) {
RETURN_FALSE;
@@ -4621,11 +4621,8 @@ static void php_do_date_sunrise_sunset(INTERNAL_FUNCTION_PARAMETERS, int calc_su
switch (retformat) {
case SUNFUNCS_RET_STRING:
- spprintf(&retstr, 0, "%02d:%02d", (int) N, (int) (60 * (N - (int) N)));
- // TODO: avoid reallocation ???
- RETVAL_STRINGL(retstr, 5);
- efree(retstr);
- return;
+ retstr = strpprintf(0, "%02d:%02d", (int) N, (int) (60 * (N - (int) N)));
+ RETURN_STR(retstr);
break;
case SUNFUNCS_RET_DOUBLE:
RETURN_DOUBLE(N);
diff --git a/ext/imap/php_imap.c b/ext/imap/php_imap.c
index fddcad5730..09295a87f3 100644
--- a/ext/imap/php_imap.c
+++ b/ext/imap/php_imap.c
@@ -76,8 +76,8 @@ MAILSTREAM DEFAULTPROTO;
static void _php_make_header_object(zval *myzvalue, ENVELOPE *en TSRMLS_DC);
static void _php_imap_add_body(zval *arg, BODY *body TSRMLS_DC);
-static char* _php_imap_parse_address(ADDRESS *addresslist, zval *paddress TSRMLS_DC);
-static char* _php_rfc822_write_address(ADDRESS *addresslist TSRMLS_DC);
+static zend_string* _php_imap_parse_address(ADDRESS *addresslist, zval *paddress TSRMLS_DC);
+static zend_string* _php_rfc822_write_address(ADDRESS *addresslist TSRMLS_DC);
/* the gets we use */
static char *php_mail_gets(readfn_t f, void *stream, unsigned long size, GETS_DATA *md);
@@ -1482,7 +1482,7 @@ PHP_FUNCTION(imap_set_quota)
ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
- limits.text.data = "STORAGE";
+ limits.text.data = (unsigned char*)"STORAGE";
limits.text.size = mailbox_size;
limits.next = NIL;
@@ -1864,7 +1864,7 @@ PHP_FUNCTION(imap_list)
array_init(return_value);
cur=IMAPG(imap_folders);
while (cur != NIL) {
- add_next_index_string(return_value, cur->LTEXT);
+ add_next_index_string(return_value, (char*)cur->LTEXT);
cur=cur->next;
}
mail_free_stringlist (&IMAPG(imap_folders));
@@ -1905,7 +1905,7 @@ PHP_FUNCTION(imap_list_full)
cur=IMAPG(imap_folder_objects);
while (cur != NIL) {
object_init(&mboxob);
- add_property_string(&mboxob, "name", cur->LTEXT);
+ add_property_string(&mboxob, "name", (char*)cur->LTEXT);
add_property_long(&mboxob, "attributes", cur->attributes);
#ifdef IMAP41
delim[0] = (char)cur->delimiter;
@@ -1948,7 +1948,7 @@ PHP_FUNCTION(imap_listscan)
array_init(return_value);
cur=IMAPG(imap_folders);
while (cur != NIL) {
- add_next_index_string(return_value, cur->LTEXT);
+ add_next_index_string(return_value, (char*)cur->LTEXT);
cur=cur->next;
}
mail_free_stringlist (&IMAPG(imap_folders));
@@ -2170,7 +2170,7 @@ PHP_FUNCTION(imap_lsub)
array_init(return_value);
cur=IMAPG(imap_sfolders);
while (cur != NIL) {
- add_next_index_string(return_value, cur->LTEXT);
+ add_next_index_string(return_value, (char*)cur->LTEXT);
cur=cur->next;
}
mail_free_stringlist (&IMAPG(imap_sfolders));
@@ -2210,7 +2210,7 @@ PHP_FUNCTION(imap_lsub_full)
cur=IMAPG(imap_sfolder_objects);
while (cur != NIL) {
object_init(&mboxob);
- add_property_string(&mboxob, "name", cur->LTEXT);
+ add_property_string(&mboxob, "name", (char*)cur->LTEXT);
add_property_long(&mboxob, "attributes", cur->attributes);
#ifdef IMAP41
delim[0] = (char)cur->delimiter;
@@ -2535,7 +2535,7 @@ PHP_FUNCTION(imap_binary)
return;
}
- decode = rfc822_binary(text, text_len, &newlength);
+ decode = (char*)rfc822_binary(text, text_len, &newlength);
if (decode == NULL) {
RETURN_FALSE;
@@ -2600,7 +2600,7 @@ PHP_FUNCTION(imap_rfc822_write_address)
char *mailbox, *host, *personal;
int mailbox_len, host_len, personal_len;
ADDRESS *addr;
- char *string;
+ zend_string *string;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss", &mailbox, &mailbox_len, &host, &host_len, &personal, &personal_len) == FAILURE) {
return;
@@ -2626,8 +2626,7 @@ PHP_FUNCTION(imap_rfc822_write_address)
string = _php_rfc822_write_address(addr TSRMLS_CC);
if (string) {
- RETVAL_STRING(string);
- efree(string);
+ RETVAL_STR(string);
} else {
RETURN_FALSE;
}
@@ -2704,7 +2703,7 @@ PHP_FUNCTION(imap_utf8)
#else
utf8_mime2text(&src, &dest, U8T_DECOMPOSE);
#endif
- RETVAL_STRINGL(dest.data, dest.size);
+ RETVAL_STRINGL((char*)dest.data, dest.size);
if (dest.data) {
free(dest.data);
}
@@ -2869,7 +2868,7 @@ PHP_FUNCTION(imap_utf7_decode)
}
#endif
- RETURN_STRINGL(out, outlen);
+ RETURN_STRINGL((char*)out, outlen);
}
/* }}} */
@@ -2933,7 +2932,7 @@ PHP_FUNCTION(imap_utf7_encode)
out = STR_ALLOC(outlen, 0);
/* encode input string */
- outp = out->val;
+ outp = (unsigned char*)out->val;
state = ST_NORMAL;
endp = (inp = in) + inlen;
while (inp < endp || state != ST_NORMAL) {
@@ -3283,7 +3282,7 @@ PHP_FUNCTION(imap_bodystruct)
object_init(return_value);
- body=mail_body(imap_le_struct->imap_stream, msg, section);
+ body=mail_body(imap_le_struct->imap_stream, msg, (unsigned char*)section);
if (body == NULL) {
zval_dtor(return_value);
RETURN_FALSE;
@@ -3378,7 +3377,7 @@ PHP_FUNCTION(imap_fetch_overview)
int sequence_len;
pils *imap_le_struct;
zval myoverview;
- char *address;
+ zend_string *address;
long status, flags = 0L;
int argc = ZEND_NUM_ARGS();
@@ -3396,8 +3395,8 @@ PHP_FUNCTION(imap_fetch_overview)
array_init(return_value);
status = (flags & FT_UID)
- ? mail_uid_sequence(imap_le_struct->imap_stream, sequence)
- : mail_sequence(imap_le_struct->imap_stream, sequence);
+ ? mail_uid_sequence(imap_le_struct->imap_stream, (unsigned char*)sequence)
+ : mail_sequence(imap_le_struct->imap_stream, (unsigned char*)sequence);
if (status) {
MESSAGECACHE *elt;
@@ -3415,22 +3414,18 @@ PHP_FUNCTION(imap_fetch_overview)
env->from->next=NULL;
address =_php_rfc822_write_address(env->from TSRMLS_CC);
if (address) {
- // TODO: avoid reallocation ???
- add_property_string(&myoverview, "from", address);
- efree(address);
+ add_property_str(&myoverview, "from", address);
}
}
if (env->to) {
env->to->next = NULL;
address = _php_rfc822_write_address(env->to TSRMLS_CC);
if (address) {
- // TODO: avoid reallocation ???
- add_property_string(&myoverview, "to", address);
- efree(address);
+ add_property_str(&myoverview, "to", address);
}
}
if (env->date) {
- add_property_string(&myoverview, "date", env->date);
+ add_property_string(&myoverview, "date", (char*)env->date);
}
if (env->message_id) {
add_property_string(&myoverview, "message_id", env->message_id);
@@ -3494,7 +3489,7 @@ PHP_FUNCTION(imap_mail_compose)
}
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(envelope), "date", sizeof("date") - 1)) != NULL) {
convert_to_string_ex(pvalue);
- env->date = cpystr(Z_STRVAL_P(pvalue));
+ env->date = (unsigned char*)cpystr(Z_STRVAL_P(pvalue));
}
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(envelope), "from", sizeof("from") - 1)) != NULL) {
convert_to_string_ex(pvalue);
@@ -3622,11 +3617,11 @@ PHP_FUNCTION(imap_mail_compose)
}
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "contents.data", sizeof("contents.data") - 1)) != NULL) {
convert_to_string_ex(pvalue);
- bod->contents.text.data = (char *) fs_get(Z_STRLEN_P(pvalue) + 1);
+ bod->contents.text.data = fs_get(Z_STRLEN_P(pvalue) + 1);
memcpy(bod->contents.text.data, Z_STRVAL_P(pvalue), Z_STRLEN_P(pvalue)+1);
bod->contents.text.size = Z_STRLEN_P(pvalue);
} else {
- bod->contents.text.data = (char *) fs_get(1);
+ bod->contents.text.data = fs_get(1);
memcpy(bod->contents.text.data, "", 1);
bod->contents.text.size = 0;
}
@@ -3726,11 +3721,11 @@ PHP_FUNCTION(imap_mail_compose)
}
if ((pvalue = zend_hash_str_find(Z_ARRVAL_P(data), "contents.data", sizeof("contents.data") - 1)) != NULL) {
convert_to_string_ex(pvalue);
- bod->contents.text.data = (char *) fs_get(Z_STRLEN_P(pvalue) + 1);
+ bod->contents.text.data = fs_get(Z_STRLEN_P(pvalue) + 1);
memcpy(bod->contents.text.data, Z_STRVAL_P(pvalue), Z_STRLEN_P(pvalue) + 1);
bod->contents.text.size = Z_STRLEN_P(pvalue);
} else {
- bod->contents.text.data = (char *) fs_get(1);
+ bod->contents.text.data = fs_get(1);
memcpy(bod->contents.text.data, "", 1);
bod->contents.text.size = 0;
}
@@ -4133,7 +4128,7 @@ PHP_FUNCTION(imap_alerts)
cur = IMAPG(imap_alertstack);
while (cur != NIL) {
- add_next_index_string(return_value, cur->LTEXT);
+ add_next_index_string(return_value, (char*)cur->LTEXT);
cur = cur->next;
}
mail_free_stringlist(&IMAPG(imap_alertstack));
@@ -4160,7 +4155,7 @@ PHP_FUNCTION(imap_errors)
cur = IMAPG(imap_errorstack);
while (cur != NIL) {
- add_next_index_string(return_value, cur->LTEXT);
+ add_next_index_string(return_value, (char*)cur->LTEXT);
cur = cur->next;
}
mail_free_errorlist(&IMAPG(imap_errorstack));
@@ -4186,7 +4181,7 @@ PHP_FUNCTION(imap_last_error)
cur = IMAPG(imap_errorstack);
while (cur != NIL) {
if (cur->next == NIL) {
- RETURN_STRING(cur->LTEXT);
+ RETURN_STRING((char*)cur->LTEXT);
}
cur = cur->next;
}
@@ -4305,10 +4300,9 @@ static long _php_rfc822_soutr (void *stream, char *string)
/* {{{ _php_rfc822_write_address
*/
-static char* _php_rfc822_write_address(ADDRESS *addresslist TSRMLS_DC)
+static zend_string* _php_rfc822_write_address(ADDRESS *addresslist TSRMLS_DC)
{
char address[MAILTMPLEN];
- char *str;
smart_str ret = {0};
RFC822BUFFER buf;
@@ -4320,11 +4314,7 @@ static char* _php_rfc822_write_address(ADDRESS *addresslist TSRMLS_DC)
rfc822_output_address_list(&buf, addresslist, 0, NULL);
rfc822_output_flush(&buf);
smart_str_0(&ret);
- /* avoide dup? */
- str = estrndup(ret.s->val, ret.s->len);
- smart_str_free(&ret);
-
- return str;
+ return ret.s;
}
/* }}} */
@@ -4390,7 +4380,7 @@ static int _php_imap_address_size (ADDRESS *addresslist)
/* {{{ _php_rfc822_write_address
*/
-static char* _php_rfc822_write_address(ADDRESS *addresslist TSRMLS_DC)
+static zend_string* _php_rfc822_write_address(ADDRESS *addresslist TSRMLS_DC)
{
char address[SENDBUFLEN];
@@ -4400,15 +4390,15 @@ static char* _php_rfc822_write_address(ADDRESS *addresslist TSRMLS_DC)
}
address[0] = 0;
rfc822_write_address(address, addresslist);
- return estrdup(address);
+ return STR_INIT(address, strlen(address), 0);
}
/* }}} */
#endif
/* {{{ _php_imap_parse_address
*/
-static char* _php_imap_parse_address (ADDRESS *addresslist, zval *paddress TSRMLS_DC)
+static zend_string* _php_imap_parse_address (ADDRESS *addresslist, zval *paddress TSRMLS_DC)
{
- char *fulladdress;
+ zend_string *fulladdress;
ADDRESS *addresstmp;
zval tmpvals;
@@ -4434,13 +4424,13 @@ static char* _php_imap_parse_address (ADDRESS *addresslist, zval *paddress TSRML
static void _php_make_header_object(zval *myzvalue, ENVELOPE *en TSRMLS_DC)
{
zval paddress;
- char *fulladdress=NULL;
+ zend_string *fulladdress=NULL;
object_init(myzvalue);
if (en->remail) add_property_string(myzvalue, "remail", en->remail);
- if (en->date) add_property_string(myzvalue, "date", en->date);
- if (en->date) add_property_string(myzvalue, "Date", en->date);
+ if (en->date) add_property_string(myzvalue, "date", (char*)en->date);
+ if (en->date) add_property_string(myzvalue, "Date", (char*)en->date);
if (en->subject) add_property_string(myzvalue, "subject", en->subject);
if (en->subject) add_property_string(myzvalue, "Subject", en->subject);
if (en->in_reply_to) add_property_string(myzvalue, "in_reply_to", en->in_reply_to);
@@ -4453,9 +4443,7 @@ static void _php_make_header_object(zval *myzvalue, ENVELOPE *en TSRMLS_DC)
array_init(&paddress);
fulladdress = _php_imap_parse_address(en->to, &paddress TSRMLS_CC);
if (fulladdress) {
- // TODO: avoid reallocation ???
- add_property_string(myzvalue, "toaddress", fulladdress);
- efree(fulladdress);
+ add_property_str(myzvalue, "toaddress", fulladdress);
}
add_assoc_object(myzvalue, "to", &paddress TSRMLS_CC);
}
@@ -4464,9 +4452,7 @@ static void _php_make_header_object(zval *myzvalue, ENVELOPE *en TSRMLS_DC)
array_init(&paddress);
fulladdress = _php_imap_parse_address(en->from, &paddress TSRMLS_CC);
if (fulladdress) {
- // TODO: avoid reallocation ???
- add_property_string(myzvalue, "fromaddress", fulladdress);
- efree(fulladdress);
+ add_property_str(myzvalue, "fromaddress", fulladdress);
}
add_assoc_object(myzvalue, "from", &paddress TSRMLS_CC);
}
@@ -4475,9 +4461,7 @@ static void _php_make_header_object(zval *myzvalue, ENVELOPE *en TSRMLS_DC)
array_init(&paddress);
fulladdress = _php_imap_parse_address(en->cc, &paddress TSRMLS_CC);
if (fulladdress) {
- // TODO: avoid reallocation ???
- add_property_string(myzvalue, "ccaddress", fulladdress);
- efree(fulladdress);
+ add_property_str(myzvalue, "ccaddress", fulladdress);
}
add_assoc_object(myzvalue, "cc", &paddress TSRMLS_CC);
}
@@ -4486,9 +4470,7 @@ static void _php_make_header_object(zval *myzvalue, ENVELOPE *en TSRMLS_DC)
array_init(&paddress);
fulladdress = _php_imap_parse_address(en->bcc, &paddress TSRMLS_CC);
if (fulladdress) {
- // TODO: avoid reallocation ???
- add_property_string(myzvalue, "bccaddress", fulladdress);
- efree(fulladdress);
+ add_property_str(myzvalue, "bccaddress", fulladdress);
}
add_assoc_object(myzvalue, "bcc", &paddress TSRMLS_CC);
}
@@ -4497,9 +4479,7 @@ static void _php_make_header_object(zval *myzvalue, ENVELOPE *en TSRMLS_DC)
array_init(&paddress);
fulladdress = _php_imap_parse_address(en->reply_to, &paddress TSRMLS_CC);
if (fulladdress) {
- // TODO: avoid reallocation ???
- add_property_string(myzvalue, "reply_toaddress", fulladdress);
- efree(fulladdress);
+ add_property_str(myzvalue, "reply_toaddress", fulladdress);
}
add_assoc_object(myzvalue, "reply_to", &paddress TSRMLS_CC);
}
@@ -4508,9 +4488,7 @@ static void _php_make_header_object(zval *myzvalue, ENVELOPE *en TSRMLS_DC)
array_init(&paddress);
fulladdress = _php_imap_parse_address(en->sender, &paddress TSRMLS_CC);
if (fulladdress) {
- // TODO: avoid reallocation ???
- add_property_string(myzvalue, "senderaddress", fulladdress);
- efree(fulladdress);
+ add_property_str(myzvalue, "senderaddress", fulladdress);
}
add_assoc_object(myzvalue, "sender", &paddress TSRMLS_CC);
}
@@ -4519,9 +4497,7 @@ static void _php_make_header_object(zval *myzvalue, ENVELOPE *en TSRMLS_DC)
array_init(&paddress);
fulladdress = _php_imap_parse_address(en->return_path, &paddress TSRMLS_CC);
if (fulladdress) {
- // TODO: avoid reallocation ???
- add_property_string(myzvalue, "return_pathaddress", fulladdress);
- efree(fulladdress);
+ add_property_str(myzvalue, "return_pathaddress", fulladdress);
}
add_assoc_object(myzvalue, "return_path", &paddress TSRMLS_CC);
}
@@ -4873,7 +4849,7 @@ PHP_IMAP_EXPORT void mm_notify(MAILSTREAM *stream, char *str, long errflg)
if (strncmp(str, "[ALERT] ", 8) == 0) {
if (IMAPG(imap_alertstack) == NIL) {
IMAPG(imap_alertstack) = mail_newstringlist();
- IMAPG(imap_alertstack)->LSIZE = strlen(IMAPG(imap_alertstack)->LTEXT = cpystr(str));
+ IMAPG(imap_alertstack)->LSIZE = strlen((char*)(IMAPG(imap_alertstack)->LTEXT = (unsigned char*)cpystr(str)));
IMAPG(imap_alertstack)->next = NIL;
} else {
cur = IMAPG(imap_alertstack);
@@ -4882,7 +4858,7 @@ PHP_IMAP_EXPORT void mm_notify(MAILSTREAM *stream, char *str, long errflg)
}
cur->next = mail_newstringlist ();
cur = cur->next;
- cur->LSIZE = strlen(cur->LTEXT = cpystr(str));
+ cur->LSIZE = strlen((char*)(cur->LTEXT = (unsigned char*)cpystr(str)));
cur->next = NIL;
}
}
@@ -4899,7 +4875,7 @@ PHP_IMAP_EXPORT void mm_list(MAILSTREAM *stream, DTYPE delimiter, char *mailbox,
/* Author: CJH */
if (IMAPG(imap_folder_objects) == NIL) {
IMAPG(imap_folder_objects) = mail_newfolderobjectlist();
- IMAPG(imap_folder_objects)->LSIZE=strlen(IMAPG(imap_folder_objects)->LTEXT=cpystr(mailbox));
+ IMAPG(imap_folder_objects)->LSIZE=strlen((char*)(IMAPG(imap_folder_objects)->LTEXT = (unsigned char*)cpystr(mailbox)));
IMAPG(imap_folder_objects)->delimiter = delimiter;
IMAPG(imap_folder_objects)->attributes = attributes;
IMAPG(imap_folder_objects)->next = NIL;
@@ -4908,7 +4884,7 @@ PHP_IMAP_EXPORT void mm_list(MAILSTREAM *stream, DTYPE delimiter, char *mailbox,
ocur=IMAPG(imap_folder_objects_tail);
ocur->next=mail_newfolderobjectlist();
ocur=ocur->next;
- ocur->LSIZE = strlen(ocur->LTEXT = cpystr(mailbox));
+ ocur->LSIZE = strlen((char*)(ocur->LTEXT = (unsigned char*)cpystr(mailbox)));
ocur->delimiter = delimiter;
ocur->attributes = attributes;
ocur->next = NIL;
@@ -4920,14 +4896,14 @@ PHP_IMAP_EXPORT void mm_list(MAILSTREAM *stream, DTYPE delimiter, char *mailbox,
if (!(attributes & LATT_NOSELECT)) {
if (IMAPG(imap_folders) == NIL) {
IMAPG(imap_folders)=mail_newstringlist();
- IMAPG(imap_folders)->LSIZE=strlen(IMAPG(imap_folders)->LTEXT=cpystr(mailbox));
+ IMAPG(imap_folders)->LSIZE=strlen((char*)(IMAPG(imap_folders)->LTEXT = (unsigned char*)cpystr(mailbox)));
IMAPG(imap_folders)->next=NIL;
IMAPG(imap_folders_tail) = IMAPG(imap_folders);
} else {
cur=IMAPG(imap_folders_tail);
cur->next=mail_newstringlist ();
cur=cur->next;
- cur->LSIZE = strlen (cur->LTEXT = cpystr (mailbox));
+ cur->LSIZE = strlen((char*)(cur->LTEXT = (unsigned char*)cpystr(mailbox)));
cur->next = NIL;
IMAPG(imap_folders_tail) = cur;
}
@@ -4946,7 +4922,7 @@ PHP_IMAP_EXPORT void mm_lsub(MAILSTREAM *stream, DTYPE delimiter, char *mailbox,
/* Author: CJH */
if (IMAPG(imap_sfolder_objects) == NIL) {
IMAPG(imap_sfolder_objects) = mail_newfolderobjectlist();
- IMAPG(imap_sfolder_objects)->LSIZE=strlen(IMAPG(imap_sfolder_objects)->LTEXT=cpystr(mailbox));
+ IMAPG(imap_sfolder_objects)->LSIZE = strlen((char*)(IMAPG(imap_sfolder_objects)->LTEXT = (unsigned char*)cpystr(mailbox)));
IMAPG(imap_sfolder_objects)->delimiter = delimiter;
IMAPG(imap_sfolder_objects)->attributes = attributes;
IMAPG(imap_sfolder_objects)->next = NIL;
@@ -4955,7 +4931,7 @@ PHP_IMAP_EXPORT void mm_lsub(MAILSTREAM *stream, DTYPE delimiter, char *mailbox,
ocur=IMAPG(imap_sfolder_objects_tail);
ocur->next=mail_newfolderobjectlist();
ocur=ocur->next;
- ocur->LSIZE=strlen(ocur->LTEXT = cpystr(mailbox));
+ ocur->LSIZE=strlen((char*)(ocur->LTEXT = (unsigned char*)cpystr(mailbox)));
ocur->delimiter = delimiter;
ocur->attributes = attributes;
ocur->next = NIL;
@@ -4965,14 +4941,14 @@ PHP_IMAP_EXPORT void mm_lsub(MAILSTREAM *stream, DTYPE delimiter, char *mailbox,
/* build the old simple array for imap_listsubscribed() */
if (IMAPG(imap_sfolders) == NIL) {
IMAPG(imap_sfolders)=mail_newstringlist();
- IMAPG(imap_sfolders)->LSIZE=strlen(IMAPG(imap_sfolders)->LTEXT=cpystr(mailbox));
+ IMAPG(imap_sfolders)->LSIZE=strlen((char*)(IMAPG(imap_sfolders)->LTEXT = (unsigned char*)cpystr(mailbox)));
IMAPG(imap_sfolders)->next=NIL;
IMAPG(imap_sfolders_tail) = IMAPG(imap_sfolders);
} else {
cur=IMAPG(imap_sfolders_tail);
cur->next=mail_newstringlist ();
cur=cur->next;
- cur->LSIZE = strlen (cur->LTEXT = cpystr (mailbox));
+ cur->LSIZE = strlen((char*)(cur->LTEXT = (unsigned char*)cpystr(mailbox)));
cur->next = NIL;
IMAPG(imap_sfolders_tail) = cur;
}
@@ -5010,7 +4986,7 @@ PHP_IMAP_EXPORT void mm_log(char *str, long errflg)
if (errflg != NIL) { /* CJH: maybe put these into a more comprehensive log for debugging purposes? */
if (IMAPG(imap_errorstack) == NIL) {
IMAPG(imap_errorstack) = mail_newerrorlist();
- IMAPG(imap_errorstack)->LSIZE = strlen(IMAPG(imap_errorstack)->LTEXT = cpystr(str));
+ IMAPG(imap_errorstack)->LSIZE = strlen((char*)(IMAPG(imap_errorstack)->LTEXT = (unsigned char*)cpystr(str)));
IMAPG(imap_errorstack)->errflg = errflg;
IMAPG(imap_errorstack)->next = NIL;
} else {
@@ -5020,7 +4996,7 @@ PHP_IMAP_EXPORT void mm_log(char *str, long errflg)
}
cur->next = mail_newerrorlist();
cur = cur->next;
- cur->LSIZE = strlen(cur->LTEXT = cpystr(str));
+ cur->LSIZE = strlen((char*)(cur->LTEXT = (unsigned char*)cpystr(str)));
cur->errflg = errflg;
cur->next = NIL;
}
diff --git a/ext/mysqlnd/mysqlnd_net.c b/ext/mysqlnd/mysqlnd_net.c
index 76e49a5d9d..84757f88c1 100644
--- a/ext/mysqlnd/mysqlnd_net.c
+++ b/ext/mysqlnd/mysqlnd_net.c
@@ -160,7 +160,7 @@ MYSQLND_METHOD(mysqlnd_net, open_tcp_or_unix)(MYSQLND_NET * const net, const cha
unsigned int streams_flags = STREAM_XPORT_CLIENT | STREAM_XPORT_CONNECT;
char * hashed_details = NULL;
int hashed_details_len = 0;
- char * errstr = NULL;
+ zend_string *errstr = NULL;
int errcode = 0;
struct timeval tv;
dtor_func_t origin_dtor;
@@ -190,10 +190,10 @@ MYSQLND_METHOD(mysqlnd_net, open_tcp_or_unix)(MYSQLND_NET * const net, const cha
mnd_sprintf_free(hashed_details);
}
errcode = CR_CONNECTION_ERROR;
- SET_CLIENT_ERROR(*error_info, errcode? errcode:CR_CONNECTION_ERROR, UNKNOWN_SQLSTATE, errstr);
+ SET_CLIENT_ERROR(*error_info, errcode? errcode:CR_CONNECTION_ERROR, UNKNOWN_SQLSTATE, errstr->val);
if (errstr) {
/* no mnd_ since we don't allocate it */
- efree(errstr);
+ STR_RELEASE(errstr);
}
DBG_RETURN(NULL);
}
diff --git a/ext/odbc/php_odbc.c b/ext/odbc/php_odbc.c
index 5fb5990050..10384da2ad 100644
--- a/ext/odbc/php_odbc.c
+++ b/ext/odbc/php_odbc.c
@@ -2954,7 +2954,7 @@ static void php_odbc_lasterror(INTERNAL_FUNCTION_PARAMETERS, int mode)
{
odbc_connection *conn;
zval *pv_handle;
- char *ptr;
+ zend_string *ptr;
int len;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|r", &pv_handle) == FAILURE) {
@@ -2969,23 +2969,21 @@ static void php_odbc_lasterror(INTERNAL_FUNCTION_PARAMETERS, int mode)
if (ZEND_NUM_ARGS() == 1) {
ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_handle, -1, "ODBC-Link", le_conn, le_pconn);
- ptr = ecalloc(len + 1, 1);
+ ptr = STR_ALLOC(len + 1, 0);
if (mode == 0) {
- strlcpy(ptr, conn->laststate, len+1);
+ strlcpy(ptr->val, conn->laststate, len+1);
} else {
- strlcpy(ptr, conn->lasterrormsg, len+1);
+ strlcpy(ptr->val, conn->lasterrormsg, len+1);
}
} else {
- ptr = ecalloc(len + 1, 1);
+ ptr = STR_ALLOC(len, 0);
if (mode == 0) {
- strlcpy(ptr, ODBCG(laststate), len+1);
+ strlcpy(ptr->val, ODBCG(laststate), len+1);
} else {
- strlcpy(ptr, ODBCG(lasterrormsg), len+1);
+ strlcpy(ptr->val, ODBCG(lasterrormsg), len+1);
}
}
- RETVAL_STRING(ptr);
- // TODO: avoid double reallocation ???
- efree(ptr);
+ RETVAL_STR(ptr);
}
/* }}} */
diff --git a/ext/openssl/openssl.c b/ext/openssl/openssl.c
index cf89f8d17f..1d75ff08fc 100755
--- a/ext/openssl/openssl.c
+++ b/ext/openssl/openssl.c
@@ -1760,31 +1760,30 @@ PHP_FUNCTION(openssl_x509_export)
}
/* }}} */
-int php_openssl_x509_fingerprint(X509 *peer, const char *method, zend_bool raw, char **out, int *out_len TSRMLS_DC)
+zend_string* php_openssl_x509_fingerprint(X509 *peer, const char *method, zend_bool raw TSRMLS_DC)
{
unsigned char md[EVP_MAX_MD_SIZE];
const EVP_MD *mdtype;
unsigned int n;
+ zend_string *ret;
if (!(mdtype = EVP_get_digestbyname(method))) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown signature algorithm");
- return FAILURE;
+ return NULL;
} else if (!X509_digest(peer, mdtype, md, &n)) {
php_error_docref(NULL TSRMLS_CC, E_ERROR, "Could not generate signature");
- return FAILURE;
+ return NULL;
}
if (raw) {
- *out_len = n;
- *out = estrndup((char *) md, n);
+ ret = STR_INIT((char*)md, n, 0);
} else {
- *out_len = n * 2;
- *out = emalloc(*out_len + 1);
-
- make_digest_ex(*out, md, n);
+ ret = STR_ALLOC(n * 2, 0);
+ make_digest_ex(ret->val, md, n);
+ ret->val[n * 2] = '\0';
}
- return SUCCESS;
+ return ret;
}
PHP_FUNCTION(openssl_x509_fingerprint)
@@ -1795,9 +1794,7 @@ PHP_FUNCTION(openssl_x509_fingerprint)
zend_bool raw_output = 0;
char *method = "sha1";
int method_len;
-
- char *fingerprint;
- int fingerprint_len;
+ zend_string *fingerprint;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|sb", &zcert, &method, &method_len, &raw_output) == FAILURE) {
return;
@@ -1809,10 +1806,9 @@ PHP_FUNCTION(openssl_x509_fingerprint)
RETURN_FALSE;
}
- if (php_openssl_x509_fingerprint(cert, method, raw_output, &fingerprint, &fingerprint_len TSRMLS_CC) == SUCCESS) {
- // TODO: avoid reallocation ???
- RETVAL_STRINGL(fingerprint, fingerprint_len);
- efree(fingerprint);
+ fingerprint = php_openssl_x509_fingerprint(cert, method, raw_output TSRMLS_CC);
+ if (fingerprint) {
+ RETVAL_STR(fingerprint);
} else {
RETVAL_FALSE;
}
@@ -3458,12 +3454,10 @@ static int php_openssl_is_private_key(EVP_PKEY* pkey TSRMLS_DC)
#define OPENSSL_PKEY_GET_BN(_type, _name) do { \
if (pkey->pkey._type->_name != NULL) { \
int len = BN_num_bytes(pkey->pkey._type->_name); \
- char *str = emalloc(len + 1); \
- BN_bn2bin(pkey->pkey._type->_name, (unsigned char*)str); \
- str[len] = 0; \
- /* TODO: avoid reallocation ??? */ \
- add_assoc_stringl(&_type, #_name, str, len); \
- efree(str); \
+ zend_string *str = STR_ALLOC(len, 0); \
+ BN_bn2bin(pkey->pkey._type->_name, (unsigned char*)str->val); \
+ str->val[len] = 0; \
+ add_assoc_str(&_type, #_name, str); \
} \
} while (0)
@@ -3877,7 +3871,7 @@ PHP_FUNCTION(openssl_pbkdf2)
char *password; int password_len;
char *salt; int salt_len;
char *method; int method_len = 0;
- unsigned char *out_buffer;
+ zend_string *out_buffer;
const EVP_MD *digest;
@@ -3904,15 +3898,13 @@ PHP_FUNCTION(openssl_pbkdf2)
RETURN_FALSE;
}
- out_buffer = emalloc(key_length + 1);
- out_buffer[key_length] = '\0';
+ out_buffer = STR_ALLOC(key_length, 0);
- if (PKCS5_PBKDF2_HMAC(password, password_len, (unsigned char *)salt, salt_len, iterations, digest, key_length, out_buffer) == 1) {
- // TODO: avoid reallocation ???
- RETVAL_STRINGL((char *)out_buffer, key_length);
- efree(out_buffer);
+ if (PKCS5_PBKDF2_HMAC(password, password_len, (unsigned char *)salt, salt_len, iterations, digest, key_length, (unsigned char*)out_buffer->val) == 1) {
+ out_buffer->val[key_length] = 0;
+ RETURN_STR(out_buffer);
} else {
- efree(out_buffer);
+ STR_RELEASE(out_buffer);
RETURN_FALSE;
}
}
@@ -4336,7 +4328,7 @@ PHP_FUNCTION(openssl_private_encrypt)
zval *key, *crypted;
EVP_PKEY *pkey;
int cryptedlen;
- unsigned char *cryptedbuf = NULL;
+ zend_string *cryptedbuf = NULL;
int successful = 0;
zend_resource *keyresource = NULL;
char * data;
@@ -4356,14 +4348,14 @@ PHP_FUNCTION(openssl_private_encrypt)
}
cryptedlen = EVP_PKEY_size(pkey);
- cryptedbuf = emalloc(cryptedlen + 1);
+ cryptedbuf = STR_ALLOC(cryptedlen, 0);
switch (pkey->type) {
case EVP_PKEY_RSA:
case EVP_PKEY_RSA2:
successful = (RSA_private_encrypt(data_len,
(unsigned char *)data,
- cryptedbuf,
+ (unsigned char *)cryptedbuf->val,
pkey->pkey.rsa,
padding) == cryptedlen);
break;
@@ -4373,15 +4365,13 @@ PHP_FUNCTION(openssl_private_encrypt)
if (successful) {
zval_dtor(crypted);
- cryptedbuf[cryptedlen] = '\0';
- // TODO: avoid reallocation ???
- ZVAL_STRINGL(crypted, (char *)cryptedbuf, cryptedlen);
- efree(cryptedbuf);
+ cryptedbuf->val[cryptedlen] = '\0';
+ ZVAL_STR(crypted, cryptedbuf);
cryptedbuf = NULL;
RETVAL_TRUE;
}
if (cryptedbuf) {
- efree(cryptedbuf);
+ STR_RELEASE(cryptedbuf);
}
if (keyresource == NULL) {
EVP_PKEY_free(pkey);
@@ -4396,7 +4386,7 @@ PHP_FUNCTION(openssl_private_decrypt)
zval *key, *crypted;
EVP_PKEY *pkey;
int cryptedlen;
- unsigned char *cryptedbuf = NULL;
+ zend_string *cryptedbuf = NULL;
unsigned char *crypttemp;
int successful = 0;
long padding = RSA_PKCS1_PADDING;
@@ -4427,8 +4417,8 @@ PHP_FUNCTION(openssl_private_decrypt)
pkey->pkey.rsa,
padding);
if (cryptedlen != -1) {
- cryptedbuf = emalloc(cryptedlen + 1);
- memcpy(cryptedbuf, crypttemp, cryptedlen);
+ cryptedbuf = STR_ALLOC(cryptedlen, 0);
+ memcpy(cryptedbuf->val, crypttemp, cryptedlen);
successful = 1;
}
break;
@@ -4440,10 +4430,8 @@ PHP_FUNCTION(openssl_private_decrypt)
if (successful) {
zval_dtor(crypted);
- cryptedbuf[cryptedlen] = '\0';
- // TODO: avoid reallocation ???
- ZVAL_STRINGL(crypted, (char *)cryptedbuf, cryptedlen);
- efree(cryptedbuf);
+ cryptedbuf->val[cryptedlen] = '\0';
+ ZVAL_STR(crypted, cryptedbuf);
cryptedbuf = NULL;
RETVAL_TRUE;
}
@@ -4452,7 +4440,7 @@ PHP_FUNCTION(openssl_private_decrypt)
EVP_PKEY_free(pkey);
}
if (cryptedbuf) {
- efree(cryptedbuf);
+ STR_RELEASE(cryptedbuf);
}
}
/* }}} */
@@ -4464,7 +4452,7 @@ PHP_FUNCTION(openssl_public_encrypt)
zval *key, *crypted;
EVP_PKEY *pkey;
int cryptedlen;
- unsigned char *cryptedbuf;
+ zend_string *cryptedbuf;
int successful = 0;
zend_resource *keyresource = NULL;
long padding = RSA_PKCS1_PADDING;
@@ -4482,14 +4470,14 @@ PHP_FUNCTION(openssl_public_encrypt)
}
cryptedlen = EVP_PKEY_size(pkey);
- cryptedbuf = emalloc(cryptedlen + 1);
+ cryptedbuf = STR_ALLOC(cryptedlen, 0);
switch (pkey->type) {
case EVP_PKEY_RSA:
case EVP_PKEY_RSA2:
successful = (RSA_public_encrypt(data_len,
(unsigned char *)data,
- cryptedbuf,
+ (unsigned char *)cryptedbuf->val,
pkey->pkey.rsa,
padding) == cryptedlen);
break;
@@ -4500,10 +4488,8 @@ PHP_FUNCTION(openssl_public_encrypt)
if (successful) {
zval_dtor(crypted);
- cryptedbuf[cryptedlen] = '\0';
- // TODO: avoid reallocation ???
- ZVAL_STRINGL(crypted, (char *)cryptedbuf, cryptedlen);
- efree(cryptedbuf);
+ cryptedbuf->val[cryptedlen] = '\0';
+ ZVAL_STR(crypted, cryptedbuf);
cryptedbuf = NULL;
RETVAL_TRUE;
}
@@ -4511,7 +4497,7 @@ PHP_FUNCTION(openssl_public_encrypt)
EVP_PKEY_free(pkey);
}
if (cryptedbuf) {
- efree(cryptedbuf);
+ STR_RELEASE(cryptedbuf);
}
}
/* }}} */
@@ -4523,7 +4509,7 @@ PHP_FUNCTION(openssl_public_decrypt)
zval *key, *crypted;
EVP_PKEY *pkey;
int cryptedlen;
- unsigned char *cryptedbuf = NULL;
+ zend_string *cryptedbuf = NULL;
unsigned char *crypttemp;
int successful = 0;
zend_resource *keyresource = NULL;
@@ -4554,8 +4540,8 @@ PHP_FUNCTION(openssl_public_decrypt)
pkey->pkey.rsa,
padding);
if (cryptedlen != -1) {
- cryptedbuf = emalloc(cryptedlen + 1);
- memcpy(cryptedbuf, crypttemp, cryptedlen);
+ cryptedbuf = STR_ALLOC(cryptedlen, 0);
+ memcpy(cryptedbuf->val, crypttemp, cryptedlen);
successful = 1;
}
break;
@@ -4569,16 +4555,14 @@ PHP_FUNCTION(openssl_public_decrypt)
if (successful) {
zval_dtor(crypted);
- cryptedbuf[cryptedlen] = '\0';
- // TODO: avoid reallocation ???
- ZVAL_STRINGL(crypted, (char *)cryptedbuf, cryptedlen);
- efree(cryptedbuf);
+ cryptedbuf->val[cryptedlen] = '\0';
+ ZVAL_STR(crypted, cryptedbuf);
cryptedbuf = NULL;
RETVAL_TRUE;
}
if (cryptedbuf) {
- efree(cryptedbuf);
+ STR_RELEASE(cryptedbuf);
}
if (keyresource == NULL) {
EVP_PKEY_free(pkey);
@@ -4612,8 +4596,8 @@ PHP_FUNCTION(openssl_sign)
{
zval *key, *signature;
EVP_PKEY *pkey;
- int siglen;
- unsigned char *sigbuf;
+ unsigned int siglen;
+ zend_string *sigbuf;
zend_resource *keyresource = NULL;
char * data;
int data_len;
@@ -4648,16 +4632,15 @@ PHP_FUNCTION(openssl_sign)
}
siglen = EVP_PKEY_size(pkey);
- sigbuf = emalloc(siglen + 1);
+ sigbuf = STR_ALLOC(siglen, 0);
EVP_SignInit(&md_ctx, mdtype);
EVP_SignUpdate(&md_ctx, data, data_len);
- if (EVP_SignFinal (&md_ctx, sigbuf,(unsigned int *)&siglen, pkey)) {
+ if (EVP_SignFinal (&md_ctx, (unsigned char*)sigbuf->val, &siglen, pkey)) {
zval_dtor(signature);
- sigbuf[siglen] = '\0';
- // TODO: avoid reallocation ???
- ZVAL_STRINGL(signature, (char *)sigbuf, siglen);
- efree(sigbuf);
+ sigbuf->val[siglen] = '\0';
+ sigbuf->len = siglen;
+ ZVAL_STR(signature, sigbuf);
RETVAL_TRUE;
} else {
efree(sigbuf);
@@ -4965,8 +4948,8 @@ PHP_FUNCTION(openssl_digest)
int data_len, method_len;
const EVP_MD *mdtype;
EVP_MD_CTX md_ctx;
- int siglen;
- unsigned char *sigbuf;
+ unsigned int siglen;
+ zend_string *sigbuf;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|b", &data, &data_len, &method, &method_len, &raw_output) == FAILURE) {
return;
@@ -4978,28 +4961,26 @@ PHP_FUNCTION(openssl_digest)
}
siglen = EVP_MD_size(mdtype);
- sigbuf = emalloc(siglen + 1);
+ sigbuf = STR_ALLOC(siglen, 0);
EVP_DigestInit(&md_ctx, mdtype);
EVP_DigestUpdate(&md_ctx, (unsigned char *)data, data_len);
- if (EVP_DigestFinal (&md_ctx, (unsigned char *)sigbuf, (unsigned int *)&siglen)) {
+ if (EVP_DigestFinal (&md_ctx, (unsigned char *)sigbuf->val, &siglen)) {
if (raw_output) {
- sigbuf[siglen] = '\0';
- // TODO: avoid reallocation ???
- RETVAL_STRINGL((char *)sigbuf, siglen);
- efree(sigbuf);
+ sigbuf->val[siglen] = '\0';
+ sigbuf->len = siglen;
+ RETVAL_STR(sigbuf);
} else {
int digest_str_len = siglen * 2;
- char *digest_str = emalloc(digest_str_len + 1);
+ zend_string *digest_str = STR_ALLOC(digest_str_len, 0);
- make_digest_ex(digest_str, sigbuf, siglen);
- efree(sigbuf);
- // TODO: avid reallocation ???
- RETVAL_STRINGL(digest_str, digest_str_len);
- efree(digest_str);
+ make_digest_ex(digest_str->val, (unsigned char*)sigbuf->val, siglen);
+ digest_str->val[digest_str_len] = '\0';
+ STR_RELEASE(sigbuf);
+ RETVAL_STR(digest_str);
}
} else {
- efree(sigbuf);
+ STR_RELEASE(sigbuf);
RETVAL_FALSE;
}
}
@@ -5049,7 +5030,8 @@ PHP_FUNCTION(openssl_encrypt)
const EVP_CIPHER *cipher_type;
EVP_CIPHER_CTX cipher_ctx;
int i=0, outlen, keylen;
- unsigned char *outbuf, *key;
+ zend_string *outbuf;
+ unsigned char *key;
zend_bool free_iv;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss|ls", &data, &data_len, &method, &method_len, &password, &password_len, &options, &iv, &iv_len) == FAILURE) {
@@ -5077,7 +5059,7 @@ PHP_FUNCTION(openssl_encrypt)
free_iv = php_openssl_validate_iv(&iv, &iv_len, max_iv_len TSRMLS_CC);
outlen = data_len + EVP_CIPHER_block_size(cipher_type);
- outbuf = emalloc(outlen + 1);
+ outbuf = STR_ALLOC(outlen, 0);
EVP_EncryptInit(&cipher_ctx, cipher_type, NULL, NULL);
if (password_len > keylen) {
@@ -5088,25 +5070,24 @@ PHP_FUNCTION(openssl_encrypt)
EVP_CIPHER_CTX_set_padding(&cipher_ctx, 0);
}
if (data_len > 0) {
- EVP_EncryptUpdate(&cipher_ctx, outbuf, &i, (unsigned char *)data, data_len);
+ EVP_EncryptUpdate(&cipher_ctx, (unsigned char*)outbuf->val, &i, (unsigned char *)data, data_len);
}
outlen = i;
- if (EVP_EncryptFinal(&cipher_ctx, (unsigned char *)outbuf + i, &i)) {
+ if (EVP_EncryptFinal(&cipher_ctx, (unsigned char *)outbuf->val + i, &i)) {
outlen += i;
if (options & OPENSSL_RAW_DATA) {
- outbuf[outlen] = '\0';
- // TODO: avoid reallocation ???
- RETVAL_STRINGL((char *)outbuf, outlen);
- efree(outbuf);
+ outbuf->val[outlen] = '\0';
+ outbuf->len = outlen;
+ RETVAL_STR(outbuf);
} else {
zend_string *base64_str;
- base64_str = php_base64_encode(outbuf, outlen);
- efree(outbuf);
+ base64_str = php_base64_encode((unsigned char*)outbuf->val, outlen);
+ STR_RELEASE(outbuf);
RETVAL_STR(base64_str);
}
} else {
- efree(outbuf);
+ STR_RELEASE(outbuf);
RETVAL_FALSE;
}
if (key != (unsigned char*)password) {
@@ -5129,7 +5110,8 @@ PHP_FUNCTION(openssl_decrypt)
const EVP_CIPHER *cipher_type;
EVP_CIPHER_CTX cipher_ctx;
int i, outlen, keylen;
- unsigned char *outbuf, *key;
+ zend_string *outbuf;
+ unsigned char *key;
zend_string *base64_str = NULL;
zend_bool free_iv;
@@ -5170,7 +5152,7 @@ PHP_FUNCTION(openssl_decrypt)
free_iv = php_openssl_validate_iv(&iv, &iv_len, EVP_CIPHER_iv_length(cipher_type) TSRMLS_CC);
outlen = data_len + EVP_CIPHER_block_size(cipher_type);
- outbuf = emalloc(outlen + 1);
+ outbuf = STR_ALLOC(outlen, 0);
EVP_DecryptInit(&cipher_ctx, cipher_type, NULL, NULL);
if (password_len > keylen) {
@@ -5180,16 +5162,15 @@ PHP_FUNCTION(openssl_decrypt)
if (options & OPENSSL_ZERO_PADDING) {
EVP_CIPHER_CTX_set_padding(&cipher_ctx, 0);
}
- EVP_DecryptUpdate(&cipher_ctx, outbuf, &i, (unsigned char *)data, data_len);
+ EVP_DecryptUpdate(&cipher_ctx, (unsigned char*)outbuf->val, &i, (unsigned char *)data, data_len);
outlen = i;
- if (EVP_DecryptFinal(&cipher_ctx, (unsigned char *)outbuf + i, &i)) {
+ if (EVP_DecryptFinal(&cipher_ctx, (unsigned char *)outbuf->val + i, &i)) {
outlen += i;
- outbuf[outlen] = '\0';
- // TODO: avoid reallocation ???
- RETVAL_STRINGL((char *)outbuf, outlen);
- efree(outbuf);
+ outbuf->val[outlen] = '\0';
+ outbuf->len = outlen;
+ RETVAL_STR(outbuf);
} else {
- efree(outbuf);
+ STR_RELEASE(outbuf);
RETVAL_FALSE;
}
if (key != (unsigned char*)password) {
@@ -5241,7 +5222,7 @@ PHP_FUNCTION(openssl_dh_compute_key)
int pub_len;
EVP_PKEY *pkey;
BIGNUM *pub;
- char *data;
+ zend_string *data;
int len;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sr", &pub_str, &pub_len, &key) == FAILURE) {
@@ -5254,16 +5235,15 @@ PHP_FUNCTION(openssl_dh_compute_key)
pub = BN_bin2bn((unsigned char*)pub_str, pub_len, NULL);
- data = emalloc(DH_size(pkey->pkey.dh) + 1);
- len = DH_compute_key((unsigned char*)data, pub, pkey->pkey.dh);
+ data = STR_ALLOC(DH_size(pkey->pkey.dh), 0);
+ len = DH_compute_key((unsigned char*)data->val, pub, pkey->pkey.dh);
if (len >= 0) {
- data[len] = 0;
- // TODO: avoid reallocation ???
- RETVAL_STRINGL(data, len);
- efree(data);
+ data->len = len;
+ data->val[len] = 0;
+ RETVAL_STR(data);
} else {
- efree(data);
+ STR_RELEASE(data);
RETVAL_FALSE;
}
@@ -5276,7 +5256,7 @@ PHP_FUNCTION(openssl_dh_compute_key)
PHP_FUNCTION(openssl_random_pseudo_bytes)
{
long buffer_length;
- unsigned char *buffer = NULL;
+ zend_string *buffer = NULL;
zval *zstrong_result_returned = NULL;
int strong_result = 0;
@@ -5293,21 +5273,21 @@ PHP_FUNCTION(openssl_random_pseudo_bytes)
ZVAL_BOOL(zstrong_result_returned, 0);
}
- buffer = emalloc(buffer_length + 1);
+ buffer = STR_ALLOC(buffer_length, 0);
#ifdef PHP_WIN32
strong_result = 1;
/* random/urandom equivalent on Windows */
- if (php_win32_get_random_bytes(buffer, (size_t) buffer_length) == FAILURE){
- efree(buffer);
+ if (php_win32_get_random_bytes((unsigned char*)buffer->val, (size_t) buffer_length) == FAILURE){
+ STR_RELEASE(buffer);
if (zstrong_result_returned) {
ZVAL_BOOL(zstrong_result_returned, 0);
}
RETURN_FALSE;
}
#else
- if ((strong_result = RAND_pseudo_bytes(buffer, buffer_length)) < 0) {
- efree(buffer);
+ if ((strong_result = RAND_pseudo_bytes((unsigned char*)buffer->val, buffer_length)) < 0) {
+ STR_RELEASE(buffer);
if (zstrong_result_returned) {
ZVAL_BOOL(zstrong_result_returned, 0);
}
@@ -5315,10 +5295,8 @@ PHP_FUNCTION(openssl_random_pseudo_bytes)
}
#endif
- buffer[buffer_length] = 0;
- // TODO: avoid reallocation ???
- RETVAL_STRINGL((char *)buffer, buffer_length);
- efree(buffer);
+ buffer->val[buffer_length] = 0;
+ RETVAL_STR(buffer);
if (zstrong_result_returned) {
ZVAL_BOOL(zstrong_result_returned, strong_result);
diff --git a/ext/openssl/xp_ssl.c b/ext/openssl/xp_ssl.c
index 8fdbf2845f..f706e0d5a2 100644
--- a/ext/openssl/xp_ssl.c
+++ b/ext/openssl/xp_ssl.c
@@ -75,7 +75,7 @@
#define PHP_X509_NAME_ENTRY_TO_UTF8(ne, i, out) ASN1_STRING_to_UTF8(&out, X509_NAME_ENTRY_get_data(X509_NAME_get_entry(ne, i)))
extern php_stream* php_openssl_get_stream_from_ssl_handle(const SSL *ssl);
-extern int php_openssl_x509_fingerprint(X509 *peer, const char *method, zend_bool raw, char **out, int *out_len TSRMLS_DC);
+extern zend_string* php_openssl_x509_fingerprint(X509 *peer, const char *method, zend_bool raw TSRMLS_DC);
extern int php_openssl_get_ssl_stream_data_index();
extern int php_openssl_get_x509_list_id(void);
@@ -265,13 +265,13 @@ static int verify_callback(int preverify_ok, X509_STORE_CTX *ctx) /* {{{ */
static int php_x509_fingerprint_cmp(X509 *peer, const char *method, const char *expected TSRMLS_DC)
{
- char *fingerprint;
- int fingerprint_len;
+ zend_string *fingerprint;
int result = -1;
- if (php_openssl_x509_fingerprint(peer, method, 0, &fingerprint, &fingerprint_len TSRMLS_CC) == SUCCESS) {
- result = strcmp(expected, fingerprint);
- efree(fingerprint);
+ fingerprint = php_openssl_x509_fingerprint(peer, method, 0 TSRMLS_CC);
+ if (fingerprint) {
+ result = strcmp(expected, fingerprint->val);
+ STR_RELEASE(fingerprint);
}
return result;
@@ -1947,7 +1947,6 @@ static inline int php_openssl_tcp_sockop_accept(php_stream *stream, php_openssl_
clisock = php_network_accept_incoming(sock->s.socket,
xparam->want_textaddr ? &xparam->outputs.textaddr : NULL,
- xparam->want_textaddr ? &xparam->outputs.textaddrlen : NULL,
xparam->want_addr ? &xparam->outputs.addr : NULL,
xparam->want_addr ? &xparam->outputs.addrlen : NULL,
xparam->inputs.timeout,
diff --git a/ext/pdo_odbc/odbc_driver.c b/ext/pdo_odbc/odbc_driver.c
index e620227a22..2828b96e81 100644
--- a/ext/pdo_odbc/odbc_driver.c
+++ b/ext/pdo_odbc/odbc_driver.c
@@ -36,22 +36,20 @@ static int pdo_odbc_fetch_error_func(pdo_dbh_t *dbh, pdo_stmt_t *stmt, zval *inf
pdo_odbc_db_handle *H = (pdo_odbc_db_handle *)dbh->driver_data;
pdo_odbc_errinfo *einfo = &H->einfo;
pdo_odbc_stmt *S = NULL;
- char *message = NULL;
+ zend_string *message = NULL;
if (stmt) {
S = (pdo_odbc_stmt*)stmt->driver_data;
einfo = &S->einfo;
}
- spprintf(&message, 0, "%s (%s[%ld] at %s:%d)",
+ message = strpprintf(0, "%s (%s[%ld] at %s:%d)",
einfo->last_err_msg,
einfo->what, einfo->last_error,
einfo->file, einfo->line);
add_next_index_long(info, einfo->last_error);
- // TODO: avoid reallocation ???
- add_next_index_string(info, message);
- efree(message);
+ add_next_index_str(info, message);
add_next_index_string(info, einfo->last_state);
return 1;
diff --git a/ext/phar/phar_object.c b/ext/phar/phar_object.c
index bfe17e6a13..632a94ae62 100644
--- a/ext/phar/phar_object.c
+++ b/ext/phar/phar_object.c
@@ -84,17 +84,12 @@ static void phar_mung_server_vars(char *fname, char *entry, int entry_len, char
}
if (NULL != (stuff = zend_hash_str_find(_SERVER, "PATH_TRANSLATED", sizeof("PATH_TRANSLATED")-1))) {
- char *str = NULL;
- int len;
-
- // TODO: avoid reallocation ???
- len = spprintf(&str, 4096, "phar://%s%s", fname, entry);
+ zend_string *str = strpprintf(4096, "phar://%s%s", fname, entry);
ZVAL_STR(&temp, Z_STR_P(stuff));
- ZVAL_STRINGL(stuff, str, len);
- efree(str);
+ ZVAL_STR(stuff, str);
- zend_hash_str_update(_SERVER, "PHAR_PATH_TRANSLATED", sizeof("PHAR_PATH_TRANSLATED")-1, (void *) &temp);
+ zend_hash_str_update(_SERVER, "PHAR_PATH_TRANSLATED", sizeof("PHAR_PATH_TRANSLATED")-1, &temp);
}
if (!PHAR_GLOBALS->phar_SERVER_mung_list) {
@@ -136,15 +131,10 @@ static void phar_mung_server_vars(char *fname, char *entry, int entry_len, char
if (PHAR_GLOBALS->phar_SERVER_mung_list & PHAR_MUNG_SCRIPT_FILENAME) {
if (NULL != (stuff = zend_hash_str_find(_SERVER, "SCRIPT_FILENAME", sizeof("SCRIPT_FILENAME")-1))) {
- char *str = NULL;
- int len;
-
- // TODO: avoid reallocation ???
- len = spprintf(&str, 4096, "phar://%s%s", fname, entry);
+ zend_string *str = strpprintf(4096, "phar://%s%s", fname, entry);
ZVAL_STR(&temp, Z_STR_P(stuff));
- ZVAL_STRINGL(stuff, str, len);
- efree(str);
+ ZVAL_STR(stuff, str);
zend_hash_str_update(_SERVER, "PHAR_SCRIPT_FILENAME", sizeof("PHAR_SCRIPT_FILENAME")-1, &temp);
}
@@ -3033,8 +3023,7 @@ PHP_METHOD(Phar, getSignature)
}
if (phar_obj->archive->signature) {
- char *unknown;
- int unknown_len;
+ zend_string *unknown;
array_init(return_value);
add_assoc_stringl(return_value, "hash", phar_obj->archive->signature, phar_obj->archive->sig_len);
@@ -3055,10 +3044,8 @@ PHP_METHOD(Phar, getSignature)
add_assoc_stringl(return_value, "hash_type", "OpenSSL", 7);
break;
default:
- unknown_len = spprintf(&unknown, 0, "Unknown (%u)", phar_obj->archive->sig_flags);
- // TODO: avoid reallocation ???
- add_assoc_stringl(return_value, "hash_type", unknown, unknown_len);
- efree(unknown);
+ unknown = strpprintf(0, "Unknown (%u)", phar_obj->archive->sig_flags);
+ add_assoc_str(return_value, "hash_type", unknown);
break;
}
} else {
@@ -3520,6 +3507,7 @@ PHP_METHOD(Phar, offsetGet)
zval zfname;
phar_entry_info *entry;
PHAR_ARCHIVE_OBJECT();
+ zend_string *sfname;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &fname, &fname_len) == FAILURE) {
return;
@@ -3549,10 +3537,8 @@ PHP_METHOD(Phar, offsetGet)
efree(entry);
}
- fname_len = spprintf(&fname, 0, "phar://%s/%s", phar_obj->archive->fname, fname);
- /* TODO: avoid reallocation ??? */
- ZVAL_STRINGL(&zfname, fname, fname_len);
- efree(fname);
+ sfname = strpprintf(0, "phar://%s/%s", phar_obj->archive->fname, fname);
+ ZVAL_STR(&zfname, sfname);
spl_instantiate_arg_ex1(phar_obj->spl.info_class, return_value, &zfname TSRMLS_CC);
zval_ptr_dtor(&zfname);
}
@@ -3837,7 +3823,7 @@ PHP_METHOD(Phar, addFromString)
PHP_METHOD(Phar, getStub)
{
size_t len;
- char *buf;
+ zend_string *buf;
php_stream *fp;
php_stream_filter *filter = NULL;
phar_entry_info *stub;
@@ -3903,15 +3889,15 @@ PHP_METHOD(Phar, getStub)
php_stream_rewind(fp);
carry_on:
- buf = safe_emalloc(len, 1, 1);
+ buf = STR_ALLOC(len, 0);
- if (len != php_stream_read(fp, buf, len)) {
+ if (len != php_stream_read(fp, buf->val, len)) {
if (fp != phar_obj->archive->fp) {
php_stream_close(fp);
}
zend_throw_exception_ex(spl_ce_RuntimeException, 0 TSRMLS_CC,
"Unable to read stub");
- efree(buf);
+ STR_RELEASE(buf);
return;
}
@@ -3924,10 +3910,9 @@ carry_on:
php_stream_close(fp);
}
- buf[len] = '\0';
- // TODO: avoid reallocation ???
- RETVAL_STRINGL(buf, len);
- efree(buf);
+ buf->val[len] = '\0';
+ buf->len = len;
+ RETVAL_STR(buf);
}
/* }}}*/
diff --git a/ext/phar/util.c b/ext/phar/util.c
index 4d260a4c13..4bac776511 100644
--- a/ext/phar/util.c
+++ b/ext/phar/util.c
@@ -1510,11 +1510,6 @@ int phar_verify_signature(php_stream *fp, size_t end_of_phar, php_uint32 sig_typ
pfp = php_stream_open_wrapper(pfile, "rb", 0, NULL);
efree(pfile);
-//???#if PHP_MAJOR_VERSION > 5
-//??? if (!pfp || !(pubkey_len = php_stream_copy_to_mem(pfp, (void **) &pubkey, PHP_STREAM_COPY_ALL, 0)) || !pubkey) {
-//???#else
-//??? if (!pfp || !(pubkey_len = php_stream_copy_to_mem(pfp, &pubkey, PHP_STREAM_COPY_ALL, 0)) || !pubkey) {
-//???#endif
if (!pfp || !(pubkey = php_stream_copy_to_mem(pfp, PHP_STREAM_COPY_ALL, 0)) || !pubkey->len) {
if (pfp) {
php_stream_close(pfp);
diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c
index fd7569bcb8..4248de834d 100644
--- a/ext/reflection/php_reflection.c
+++ b/ext/reflection/php_reflection.c
@@ -1799,8 +1799,7 @@ ZEND_METHOD(reflection_function, getFileName)
}
GET_REFLECTION_OBJECT_PTR(fptr);
if (fptr->type == ZEND_USER_FUNCTION) {
-// TODO: we have to duplicate it, becaise it may be in opcache SHM ???
- RETURN_STR(STR_DUP(fptr->op_array.filename, 0));
+ RETURN_STR(STR_COPY(fptr->op_array.filename));
}
RETURN_FALSE;
}
@@ -1854,8 +1853,7 @@ ZEND_METHOD(reflection_function, getDocComment)
}
GET_REFLECTION_OBJECT_PTR(fptr);
if (fptr->type == ZEND_USER_FUNCTION && fptr->op_array.doc_comment) {
-// TODO: we have to duplicate it, becaise it may be stored in opcache SHM ???
- RETURN_STR(STR_DUP(fptr->op_array.doc_comment, 0));
+ RETURN_STR(STR_COPY(fptr->op_array.doc_comment));
}
RETURN_FALSE;
}
@@ -3451,8 +3449,6 @@ ZEND_METHOD(reflection_class, setStaticPropertyValue)
zend_class_entry *ce;
zend_string *name;
zval *variable_ptr, *value;
-//??? int refcount;
-//??? zend_uchar is_ref;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Sz", &name, &value) == FAILURE) {
return;
@@ -3467,13 +3463,8 @@ ZEND_METHOD(reflection_class, setStaticPropertyValue)
"Class %s does not have a property named %s", ce->name->val, name->val);
return;
}
-//??? refcount = Z_REFCOUNT_PP(variable_ptr);
-//??? is_ref = Z_ISREF_PP(variable_ptr);
- zval_dtor(variable_ptr);
- ZVAL_DUP(variable_ptr, value);
-//??? Z_SET_REFCOUNT_PP(variable_ptr, refcount);
-//??? Z_SET_ISREF_TO_PP(variable_ptr, is_ref);
-
+ zval_ptr_dtor(variable_ptr);
+ ZVAL_COPY(variable_ptr, value);
}
/* }}} */
@@ -3566,8 +3557,7 @@ ZEND_METHOD(reflection_class, getFileName)
}
GET_REFLECTION_OBJECT_PTR(ce);
if (ce->type == ZEND_USER_CLASS) {
-// TODO: we have to duplicate it, becaise it may be stored in opcache SHM ???
- RETURN_STR(STR_DUP(ce->info.user.filename, 0));
+ RETURN_STR(STR_COPY(ce->info.user.filename));
}
RETURN_FALSE;
}
diff --git a/ext/soap/php_http.c b/ext/soap/php_http.c
index 1fa386043d..bb2a6c7a53 100644
--- a/ext/soap/php_http.c
+++ b/ext/soap/php_http.c
@@ -995,8 +995,7 @@ try_again:
add_index_string(&zcookie, 2, phpurl->host);
}
- // TODO: avoid reallocation ???
- add_assoc_zval_ex(cookies, name.s->val, name.s->len, &zcookie);
+ zend_symtable_update(Z_ARRVAL_P(cookies), name.s, &zcookie);
smart_str_free(&name);
}
diff --git a/ext/soap/soap.c b/ext/soap/soap.c
index ec2c2f0c17..a1d2ca4f48 100644
--- a/ext/soap/soap.c
+++ b/ext/soap/soap.c
@@ -928,8 +928,7 @@ PHP_METHOD(SoapFault, SoapFault)
PHP_METHOD(SoapFault, __toString)
{
zval *faultcode, *faultstring, *file, *line, trace;
- char *str;
- int len;
+ zend_string *str;
zend_fcall_info fci;
zval *this_ptr;
@@ -957,15 +956,13 @@ PHP_METHOD(SoapFault, __toString)
zval_ptr_dtor(&fci.function_name);
- len = spprintf(&str, 0, "SoapFault exception: [%s] %s in %s:%ld\nStack trace:\n%s",
+ str = strpprintf(0, "SoapFault exception: [%s] %s in %s:%ld\nStack trace:\n%s",
Z_STRVAL_P(faultcode), Z_STRVAL_P(faultstring), Z_STRVAL_P(file), Z_LVAL_P(line),
Z_STRLEN(trace) ? Z_STRVAL(trace) : "#0 {main}\n");
zval_ptr_dtor(&trace);
- // TODO: avoid reallocation ???
- RETVAL_STRINGL(str, len);
- efree(str);
+ RETVAL_STR(str);
}
/* }}} */
diff --git a/ext/spl/spl_iterators.c b/ext/spl/spl_iterators.c
index 8796a9c7a7..e503f9b581 100644
--- a/ext/spl/spl_iterators.c
+++ b/ext/spl/spl_iterators.c
@@ -1958,7 +1958,6 @@ SPL_METHOD(RecursiveCallbackFilterIterator, getChildren)
return;
}
-//??? intern = Z_SPLDUAL_IT_P(getThis());
SPL_FETCH_AND_CHECK_DUAL_IT(intern, getThis());
zend_call_method_with_0_params(&intern->inner.zobject, intern->inner.ce, NULL, "getchildren", &retval);
@@ -2686,13 +2685,8 @@ static inline void spl_caching_it_next(spl_dual_it_object *intern TSRMLS_DC)
}
use_copy = zend_make_printable_zval(&intern->u.caching.zstr, &expr_copy TSRMLS_CC);
if (use_copy) {
- ZVAL_COPY(&intern->u.caching.zstr, &expr_copy);
-//??? INIT_PZVAL(intern->u.caching.zstr);
- //zval_copy_ctor(&intern->u.caching.zstr);
- zval_dtor(&expr_copy);
+ ZVAL_COPY_VALUE(&intern->u.caching.zstr, &expr_copy);
} else if (Z_REFCOUNTED(intern->u.caching.zstr)) {
-//??? INIT_PZVAL(intern->u.caching.zstr);
- //zval_copy_ctor(&intern->u.caching.zstr);
Z_ADDREF(intern->u.caching.zstr);
}
}
diff --git a/ext/standard/fsock.c b/ext/standard/fsock.c
index e11bb84056..300df8c1c0 100644
--- a/ext/standard/fsock.c
+++ b/ext/standard/fsock.c
@@ -43,7 +43,7 @@ static void php_fsockopen_stream(INTERNAL_FUNCTION_PARAMETERS, int persistent)
int err;
char *hostname = NULL;
long hostname_len;
- char *errstr = NULL;
+ zend_string *errstr = NULL;
RETVAL_FALSE;
@@ -83,7 +83,7 @@ static void php_fsockopen_stream(INTERNAL_FUNCTION_PARAMETERS, int persistent)
efree(hostname);
}
if (stream == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to connect to %s:%ld (%s)", host, port, errstr == NULL ? "Unknown error" : errstr);
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to connect to %s:%ld (%s)", host, port, errstr == NULL ? "Unknown error" : errstr->val);
}
if (hashkey) {
@@ -98,18 +98,16 @@ static void php_fsockopen_stream(INTERNAL_FUNCTION_PARAMETERS, int persistent)
if (zerrstr && errstr) {
/* no need to dup; we need to efree buf anyway */
zval_dtor(zerrstr);
- // TODO: avoid reallocation ???
- ZVAL_STRING(zerrstr, errstr);
- efree(errstr);
+ ZVAL_STR(zerrstr, errstr);
} else if (!zerrstr && errstr) {
- efree(errstr);
+ STR_RELEASE(errstr);
}
RETURN_FALSE;
}
if (errstr) {
- efree(errstr);
+ STR_RELEASE(errstr);
}
php_stream_to_zval(stream, return_value);
diff --git a/ext/standard/http_fopen_wrapper.c b/ext/standard/http_fopen_wrapper.c
index 1007b16123..73952dda31 100644
--- a/ext/standard/http_fopen_wrapper.c
+++ b/ext/standard/http_fopen_wrapper.c
@@ -130,7 +130,8 @@ php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper,
char tmp_line[128];
size_t chunk_size = 0, file_size = 0;
int eol_detect = 0;
- char *transport_string, *errstr = NULL;
+ char *transport_string;
+ zend_string *errstr = NULL;
int transport_len, have_header = 0, request_fulluri = 0, ignore_errors = 0;
char *protocol_version = NULL;
int protocol_version_len = 3; /* Default: "1.0" */
@@ -216,8 +217,8 @@ php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper,
}
if (errstr) {
- php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "%s", errstr);
- efree(errstr);
+ php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "%s", errstr->val);
+ STR_RELEASE(errstr);
errstr = NULL;
}
diff --git a/ext/standard/info.c b/ext/standard/info.c
index 67ca2adee0..47249466b0 100644
--- a/ext/standard/info.c
+++ b/ext/standard/info.c
@@ -855,7 +855,6 @@ PHPAPI void php_print_info(int flag TSRMLS_DC)
HashTable sorted_registry;
zend_hash_init(&sorted_registry, zend_hash_num_elements(&module_registry), NULL, NULL, 1);
-//??? zend_hash_copy(&sorted_registry, &module_registry, NULL, &tmp, sizeof(zend_module_entry));
zend_hash_copy(&sorted_registry, &module_registry, NULL);
zend_hash_sort(&sorted_registry, zend_qsort, module_name_cmp, 0 TSRMLS_CC);
diff --git a/ext/standard/streamsfuncs.c b/ext/standard/streamsfuncs.c
index 9ba10edb13..652512ce07 100644
--- a/ext/standard/streamsfuncs.c
+++ b/ext/standard/streamsfuncs.c
@@ -97,7 +97,7 @@ PHP_FUNCTION(stream_socket_client)
php_stream *stream = NULL;
int err;
long flags = PHP_STREAM_CLIENT_CONNECT;
- char *errstr = NULL;
+ zend_string *errstr = NULL;
php_stream_context *context = NULL;
RETVAL_FALSE;
@@ -140,7 +140,7 @@ PHP_FUNCTION(stream_socket_client)
/* host might contain binary characters */
zend_string *quoted_host = php_addslashes(host, host_len, 0 TSRMLS_CC);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to connect to %s (%s)", quoted_host->val, errstr == NULL ? "Unknown error" : errstr);
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to connect to %s (%s)", quoted_host->val, errstr == NULL ? "Unknown error" : errstr->val);
STR_RELEASE(quoted_host);
}
@@ -154,19 +154,16 @@ PHP_FUNCTION(stream_socket_client)
ZVAL_LONG(zerrno, err);
}
if (zerrstr && errstr) {
- /* no need to dup; we need to efree buf anyway */
zval_dtor(zerrstr);
- // TODO: avoid reallocation ???
- ZVAL_STRING(zerrstr, errstr);
- efree(errstr);
+ ZVAL_STR(zerrstr, errstr);
} else if (errstr) {
- efree(errstr);
+ STR_RELEASE(errstr);
}
RETURN_FALSE;
}
if (errstr) {
- efree(errstr);
+ STR_RELEASE(errstr);
}
php_stream_to_zval(stream, return_value);
@@ -184,7 +181,7 @@ PHP_FUNCTION(stream_socket_server)
php_stream *stream = NULL;
int err = 0;
long flags = STREAM_XPORT_BIND | STREAM_XPORT_LISTEN;
- char *errstr = NULL;
+ zend_string *errstr = NULL;
php_stream_context *context = NULL;
RETVAL_FALSE;
@@ -213,7 +210,7 @@ PHP_FUNCTION(stream_socket_server)
NULL, NULL, context, &errstr, &err);
if (stream == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to connect to %s (%s)", host, errstr == NULL ? "Unknown error" : errstr);
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to connect to %s (%s)", host, errstr == NULL ? "Unknown error" : errstr->val);
}
if (stream == NULL) {
@@ -222,19 +219,16 @@ PHP_FUNCTION(stream_socket_server)
ZVAL_LONG(zerrno, err);
}
if (zerrstr && errstr) {
- /* no need to dup; we need to efree buf anyway */
zval_dtor(zerrstr);
- // TODO: avoid reallocation ???
- ZVAL_STRING(zerrstr, errstr);
- efree(errstr);
+ ZVAL_STR(zerrstr, errstr);
} else if (errstr) {
- efree(errstr);
+ STR_RELEASE(errstr);
}
RETURN_FALSE;
}
if (errstr) {
- efree(errstr);
+ STR_RELEASE(errstr);
}
php_stream_to_zval(stream, return_value);
@@ -247,14 +241,12 @@ PHP_FUNCTION(stream_socket_accept)
{
double timeout = FG(default_socket_timeout);
zval *zpeername = NULL;
- char *peername = NULL;
- int peername_len;
+ zend_string *peername = NULL;
php_timeout_ull conv;
struct timeval tv;
php_stream *stream = NULL, *clistream = NULL;
zval *zstream;
-
- char *errstr = NULL;
+ zend_string *errstr = NULL;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|dz/", &zstream, &timeout, &zpeername) == FAILURE) {
RETURN_FALSE;
@@ -278,24 +270,21 @@ PHP_FUNCTION(stream_socket_accept)
if (0 == php_stream_xport_accept(stream, &clistream,
zpeername ? &peername : NULL,
- zpeername ? &peername_len : NULL,
NULL, NULL,
&tv, &errstr
TSRMLS_CC) && clistream) {
if (peername) {
- // TODO: avoid reallocation ???
- ZVAL_STRINGL(zpeername, peername, peername_len);
- efree(peername);
+ ZVAL_STR(zpeername, peername);
}
php_stream_to_zval(clistream, return_value);
} else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "accept failed: %s", errstr ? errstr : "Unknown error");
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "accept failed: %s", errstr ? errstr->val : "Unknown error");
RETVAL_FALSE;
}
if (errstr) {
- efree(errstr);
+ STR_RELEASE(errstr);
}
}
/* }}} */
@@ -307,8 +296,7 @@ PHP_FUNCTION(stream_socket_get_name)
php_stream *stream;
zval *zstream;
zend_bool want_peer;
- char *name = NULL;
- int name_len;
+ zend_string *name = NULL;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rb", &zstream, &want_peer) == FAILURE) {
RETURN_FALSE;
@@ -318,15 +306,12 @@ PHP_FUNCTION(stream_socket_get_name)
if (0 != php_stream_xport_get_name(stream, want_peer,
&name,
- &name_len,
NULL, NULL
TSRMLS_CC)) {
RETURN_FALSE;
}
- // TODO: avoid reallocation ???
- RETVAL_STRINGL(name, name_len);
- efree(name);
+ RETVAL_STR(name);
}
/* }}} */
@@ -365,8 +350,7 @@ PHP_FUNCTION(stream_socket_recvfrom)
{
php_stream *stream;
zval *zstream, *zremote = NULL;
- char *remote_addr = NULL;
- int remote_addr_len;
+ zend_string *remote_addr = NULL;
long to_read = 0;
zend_string *read_buf;
long flags = 0;
@@ -391,15 +375,12 @@ PHP_FUNCTION(stream_socket_recvfrom)
read_buf = STR_ALLOC(to_read, 0);
recvd = php_stream_xport_recvfrom(stream, read_buf->val, to_read, flags, NULL, NULL,
- zremote ? &remote_addr : NULL,
- zremote ? &remote_addr_len : NULL
+ zremote ? &remote_addr : NULL
TSRMLS_CC);
if (recvd >= 0) {
if (zremote) {
- // TODO: avoid reallocation ???
- ZVAL_STRINGL(zremote, remote_addr, remote_addr_len);
- efree(remote_addr);
+ ZVAL_STR(zremote, remote_addr);
}
read_buf->val[recvd] = '\0';
read_buf->len = recvd;
diff --git a/ext/standard/string.c b/ext/standard/string.c
index 5f4f360ca6..82b98eb094 100644
--- a/ext/standard/string.c
+++ b/ext/standard/string.c
@@ -146,41 +146,43 @@ static zend_string *php_bin2hex(const unsigned char *old, const size_t oldlen)
/* {{{ php_hex2bin
*/
-static char *php_hex2bin(const unsigned char *old, const size_t oldlen, size_t *newlen)
+static zend_string *php_hex2bin(const unsigned char *old, const size_t oldlen)
{
size_t target_length = oldlen >> 1;
- register unsigned char *str = (unsigned char *)safe_emalloc(target_length, sizeof(char), 1);
+ zend_string *str = STR_ALLOC(target_length, 0);
+ unsigned char *ret = (unsigned char *)str->val;
size_t i, j;
+
for (i = j = 0; i < target_length; i++) {
- char c = old[j++];
+ unsigned char c = old[j++];
+ unsigned char d;
+
if (c >= '0' && c <= '9') {
- str[i] = (c - '0') << 4;
+ d = (c - '0') << 4;
} else if (c >= 'a' && c <= 'f') {
- str[i] = (c - 'a' + 10) << 4;
+ d = (c - 'a' + 10) << 4;
} else if (c >= 'A' && c <= 'F') {
- str[i] = (c - 'A' + 10) << 4;
+ d = (c - 'A' + 10) << 4;
} else {
- efree(str);
+ STR_FREE(str);
return NULL;
}
c = old[j++];
if (c >= '0' && c <= '9') {
- str[i] |= c - '0';
+ d |= c - '0';
} else if (c >= 'a' && c <= 'f') {
- str[i] |= c - 'a' + 10;
+ d |= c - 'a' + 10;
} else if (c >= 'A' && c <= 'F') {
- str[i] |= c - 'A' + 10;
+ d |= c - 'A' + 10;
} else {
- efree(str);
+ STR_FREE(str);
return NULL;
}
+ ret[i] = d;
}
- str[target_length] = '\0';
-
- if (newlen)
- *newlen = target_length;
+ ret[i] = '\0';
- return (char *)str;
+ return str;
}
/* }}} */
@@ -256,29 +258,25 @@ PHP_FUNCTION(bin2hex)
Converts the hex representation of data to binary */
PHP_FUNCTION(hex2bin)
{
- char *result, *data;
- size_t newlen;
- int datalen;
+ zend_string *result, *data;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &data, &datalen) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "S", &data) == FAILURE) {
return;
}
- if (datalen % 2 != 0) {
+ if (data->len % 2 != 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Hexadecimal input string must have an even length");
RETURN_FALSE;
}
- result = php_hex2bin((unsigned char *)data, datalen, &newlen);
+ result = php_hex2bin((unsigned char *)data->val, data->len);
if (!result) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Input string must be hexadecimal string");
RETURN_FALSE;
}
- // TODO: avoid reallocation ???
- RETVAL_STRINGL(result, newlen);
- efree(result);
+ RETVAL_STR(result);
}
/* }}} */
@@ -2457,7 +2455,7 @@ PHP_FUNCTION(substr_replace)
orig_str = tmp_str;
}
- /*
+ /*???
refcount = Z_REFCOUNT_P(orig_str);
*/
@@ -2528,7 +2526,7 @@ PHP_FUNCTION(substr_replace)
} else {
repl_str = tmp_repl;
}
- /*
+ /*???
if (Z_REFCOUNT_P(orig_str) != refcount) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Argument was modified while replacing");
if (Z_TYPE_P(tmp_repl) != IS_STRING) {
@@ -3375,7 +3373,7 @@ PHPAPI zend_string *php_addcslashes(const char *str, int length, int should_free
new_str = STR_REALLOC(new_str, newlen, 0);
}
if (should_free) {
-//??? STR_FREE((char*)str);
+ efree((char*)str);
}
return new_str;
}
@@ -3420,7 +3418,7 @@ PHPAPI zend_string *php_addslashes(char *str, int length, int should_free TSRMLS
*target = 0;
if (should_free) {
-//??? STR_FREE(str);
+ efree(str);
}
new_str = STR_REALLOC(new_str, target - new_str->val, 0);
diff --git a/ext/standard/user_filters.c b/ext/standard/user_filters.c
index e0b728c882..7dce126ac3 100644
--- a/ext/standard/user_filters.c
+++ b/ext/standard/user_filters.c
@@ -340,7 +340,6 @@ static php_stream_filter *user_filter_factory_create(const char *filtername,
/* create the object */
object_init_ex(&obj, fdat->ce);
-//??? Z_SET_ISREF_P(obj);
/* filtername */
add_property_string(&obj, "filtername", (char*)filtername);
diff --git a/ext/standard/var_unserializer.c b/ext/standard/var_unserializer.c
index 0a5cbaa2cb..b6fcd79c2d 100644
--- a/ext/standard/var_unserializer.c
+++ b/ext/standard/var_unserializer.c
@@ -183,24 +183,24 @@ PHPAPI void var_destroy(php_unserialize_data_t *var_hashx)
/* }}} */
-static char *unserialize_str(const unsigned char **p, size_t *len, size_t maxlen)
+static zend_string *unserialize_str(const unsigned char **p, size_t len, size_t maxlen)
{
size_t i, j;
- char *str = safe_emalloc(*len, 1, 1);
+ zend_string *str = STR_ALLOC(len, 0);
unsigned char *end = *(unsigned char **)p+maxlen;
if (end < *p) {
- efree(str);
+ STR_FREE(str);
return NULL;
}
- for (i = 0; i < *len; i++) {
+ for (i = 0; i < len; i++) {
if (*p >= end) {
- efree(str);
+ STR_FREE(str);
return NULL;
}
if (**p != '\\') {
- str[i] = (char)**p;
+ str->val[i] = (char)**p;
} else {
unsigned char ch = 0;
@@ -213,16 +213,16 @@ static char *unserialize_str(const unsigned char **p, size_t *len, size_t maxlen
} else if (**p >= 'A' && **p <= 'F') {
ch = (ch << 4) + (**p -'A'+10);
} else {
- efree(str);
+ STR_FREE(str);
return NULL;
}
}
- str[i] = (char)ch;
+ str->val[i] = (char)ch;
}
(*p)++;
}
- str[i] = 0;
- *len = i;
+ str->val[i] = 0;
+ str->len = i;
return str;
}
@@ -541,7 +541,7 @@ yy2:
yych = *(YYMARKER = ++YYCURSOR);
if (yych == ':') goto yy95;
yy3:
-#line 829 "ext/standard/var_unserializer.re"
+#line 826 "ext/standard/var_unserializer.re"
{ return 0; }
#line 547 "ext/standard/var_unserializer.c"
yy4:
@@ -586,7 +586,7 @@ yy13:
goto yy3;
yy14:
++YYCURSOR;
-#line 823 "ext/standard/var_unserializer.re"
+#line 820 "ext/standard/var_unserializer.re"
{
/* this is the case where we have less data than planned */
php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Unexpected end of serialized data");
@@ -622,7 +622,7 @@ yy20:
yych = *++YYCURSOR;
if (yych != '"') goto yy18;
++YYCURSOR;
-#line 684 "ext/standard/var_unserializer.re"
+#line 681 "ext/standard/var_unserializer.re"
{
size_t len, len2, len3, maxlen;
long elements;
@@ -786,7 +786,7 @@ yy27:
yych = *++YYCURSOR;
if (yych != '"') goto yy18;
++YYCURSOR;
-#line 676 "ext/standard/var_unserializer.re"
+#line 673 "ext/standard/var_unserializer.re"
{
//??? INIT_PZVAL(rval);
@@ -815,7 +815,7 @@ yy34:
yych = *++YYCURSOR;
if (yych != '{') goto yy18;
++YYCURSOR;
-#line 655 "ext/standard/var_unserializer.re"
+#line 652 "ext/standard/var_unserializer.re"
{
long elements = parse_iv(start + 2);
/* use iv() not uiv() in order to check data range */
@@ -857,11 +857,10 @@ yy41:
yych = *++YYCURSOR;
if (yych != '"') goto yy18;
++YYCURSOR;
-#line 625 "ext/standard/var_unserializer.re"
+#line 624 "ext/standard/var_unserializer.re"
{
size_t len, maxlen;
-//??? TODO: use zend_string* instead of char*
- char *str;
+ zend_string *str;
len = parse_uiv(start + 2);
maxlen = max - YYCURSOR;
@@ -870,12 +869,12 @@ yy41:
return 0;
}
- if ((str = unserialize_str(&YYCURSOR, &len, maxlen)) == NULL) {
+ if ((str = unserialize_str(&YYCURSOR, len, maxlen)) == NULL) {
return 0;
}
if (*(YYCURSOR) != '"') {
- efree(str);
+ STR_FREE(str);
*p = YYCURSOR;
return 0;
}
@@ -883,11 +882,10 @@ yy41:
YYCURSOR += 2;
*p = YYCURSOR;
- ZVAL_STRINGL(rval, str, len);
- efree(str);
+ ZVAL_STR(rval, str);
return 1;
}
-#line 891 "ext/standard/var_unserializer.c"
+#line 889 "ext/standard/var_unserializer.c"
yy46:
yych = *++YYCURSOR;
if (yych == '+') goto yy47;
@@ -908,7 +906,7 @@ yy48:
yych = *++YYCURSOR;
if (yych != '"') goto yy18;
++YYCURSOR;
-#line 598 "ext/standard/var_unserializer.re"
+#line 597 "ext/standard/var_unserializer.re"
{
size_t len, maxlen;
char *str;
@@ -935,7 +933,7 @@ yy48:
ZVAL_STRINGL(rval, str, len);
return 1;
}
-#line 939 "ext/standard/var_unserializer.c"
+#line 937 "ext/standard/var_unserializer.c"
yy53:
yych = *++YYCURSOR;
if (yych <= '/') {
@@ -1023,7 +1021,7 @@ yy61:
}
yy63:
++YYCURSOR;
-#line 589 "ext/standard/var_unserializer.re"
+#line 588 "ext/standard/var_unserializer.re"
{
#if SIZEOF_LONG == 4
use_double:
@@ -1032,7 +1030,7 @@ use_double:
ZVAL_DOUBLE(rval, zend_strtod((const char *)start + 2, NULL));
return 1;
}
-#line 1036 "ext/standard/var_unserializer.c"
+#line 1034 "ext/standard/var_unserializer.c"
yy65:
yych = *++YYCURSOR;
if (yych <= ',') {
@@ -1091,7 +1089,7 @@ yy73:
yych = *++YYCURSOR;
if (yych != ';') goto yy18;
++YYCURSOR;
-#line 573 "ext/standard/var_unserializer.re"
+#line 572 "ext/standard/var_unserializer.re"
{
*p = YYCURSOR;
@@ -1107,7 +1105,7 @@ yy73:
return 1;
}
-#line 1111 "ext/standard/var_unserializer.c"
+#line 1109 "ext/standard/var_unserializer.c"
yy76:
yych = *++YYCURSOR;
if (yych == 'N') goto yy73;
@@ -1134,7 +1132,7 @@ yy79:
if (yych <= '9') goto yy79;
if (yych != ';') goto yy18;
++YYCURSOR;
-#line 547 "ext/standard/var_unserializer.re"
+#line 546 "ext/standard/var_unserializer.re"
{
#if SIZEOF_LONG == 4
int digits = YYCURSOR - start - 3;
@@ -1160,7 +1158,7 @@ yy79:
ZVAL_LONG(rval, parse_iv(start + 2));
return 1;
}
-#line 1164 "ext/standard/var_unserializer.c"
+#line 1162 "ext/standard/var_unserializer.c"
yy83:
yych = *++YYCURSOR;
if (yych <= '/') goto yy18;
@@ -1168,22 +1166,22 @@ yy83:
yych = *++YYCURSOR;
if (yych != ';') goto yy18;
++YYCURSOR;
-#line 541 "ext/standard/var_unserializer.re"
+#line 540 "ext/standard/var_unserializer.re"
{
*p = YYCURSOR;
ZVAL_BOOL(rval, parse_iv(start + 2));
return 1;
}
-#line 1178 "ext/standard/var_unserializer.c"
+#line 1176 "ext/standard/var_unserializer.c"
yy87:
++YYCURSOR;
-#line 535 "ext/standard/var_unserializer.re"
+#line 534 "ext/standard/var_unserializer.re"
{
*p = YYCURSOR;
ZVAL_NULL(rval);
return 1;
}
-#line 1187 "ext/standard/var_unserializer.c"
+#line 1185 "ext/standard/var_unserializer.c"
yy89:
yych = *++YYCURSOR;
if (yych <= ',') {
@@ -1206,7 +1204,7 @@ yy91:
if (yych <= '9') goto yy91;
if (yych != ';') goto yy18;
++YYCURSOR;
-#line 512 "ext/standard/var_unserializer.re"
+#line 511 "ext/standard/var_unserializer.re"
{
long id;
@@ -1229,7 +1227,7 @@ yy91:
return 1;
}
-#line 1233 "ext/standard/var_unserializer.c"
+#line 1231 "ext/standard/var_unserializer.c"
yy95:
yych = *++YYCURSOR;
if (yych <= ',') {
@@ -1271,13 +1269,12 @@ yy97:
ZVAL_NEW_REF(rval_ref, rval_ref);
ZVAL_COPY(rval, rval_ref);
}
-//??? Z_SET_ISREF_PP(rval);
return 1;
}
-#line 1279 "ext/standard/var_unserializer.c"
+#line 1276 "ext/standard/var_unserializer.c"
}
-#line 831 "ext/standard/var_unserializer.re"
+#line 828 "ext/standard/var_unserializer.re"
return 0;
diff --git a/ext/standard/var_unserializer.re b/ext/standard/var_unserializer.re
index af9da9c6a8..5636429c8b 100644
--- a/ext/standard/var_unserializer.re
+++ b/ext/standard/var_unserializer.re
@@ -181,24 +181,24 @@ PHPAPI void var_destroy(php_unserialize_data_t *var_hashx)
/* }}} */
-static char *unserialize_str(const unsigned char **p, size_t *len, size_t maxlen)
+static zend_string *unserialize_str(const unsigned char **p, size_t len, size_t maxlen)
{
size_t i, j;
- char *str = safe_emalloc(*len, 1, 1);
+ zend_string *str = STR_ALLOC(len, 0);
unsigned char *end = *(unsigned char **)p+maxlen;
if (end < *p) {
- efree(str);
+ STR_FREE(str);
return NULL;
}
- for (i = 0; i < *len; i++) {
+ for (i = 0; i < len; i++) {
if (*p >= end) {
- efree(str);
+ STR_FREE(str);
return NULL;
}
if (**p != '\\') {
- str[i] = (char)**p;
+ str->val[i] = (char)**p;
} else {
unsigned char ch = 0;
@@ -211,16 +211,16 @@ static char *unserialize_str(const unsigned char **p, size_t *len, size_t maxlen
} else if (**p >= 'A' && **p <= 'F') {
ch = (ch << 4) + (**p -'A'+10);
} else {
- efree(str);
+ STR_FREE(str);
return NULL;
}
}
- str[i] = (char)ch;
+ str->val[i] = (char)ch;
}
(*p)++;
}
- str[i] = 0;
- *len = i;
+ str->val[i] = 0;
+ str->len = i;
return str;
}
@@ -504,7 +504,6 @@ PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER)
ZVAL_NEW_REF(rval_ref, rval_ref);
ZVAL_COPY(rval, rval_ref);
}
-//??? Z_SET_ISREF_PP(rval);
return 1;
}
@@ -624,8 +623,7 @@ use_double:
"S:" uiv ":" ["] {
size_t len, maxlen;
-//??? TODO: use zend_string* instead of char*
- char *str;
+ zend_string *str;
len = parse_uiv(start + 2);
maxlen = max - YYCURSOR;
@@ -634,12 +632,12 @@ use_double:
return 0;
}
- if ((str = unserialize_str(&YYCURSOR, &len, maxlen)) == NULL) {
+ if ((str = unserialize_str(&YYCURSOR, len, maxlen)) == NULL) {
return 0;
}
if (*(YYCURSOR) != '"') {
- efree(str);
+ STR_FREE(str);
*p = YYCURSOR;
return 0;
}
@@ -647,8 +645,7 @@ use_double:
YYCURSOR += 2;
*p = YYCURSOR;
- ZVAL_STRINGL(rval, str, len);
- efree(str);
+ ZVAL_STR(rval, str);
return 1;
}
diff --git a/ext/xml/xml.c b/ext/xml/xml.c
index bbceb6dcf2..2886d6c686 100644
--- a/ext/xml/xml.c
+++ b/ext/xml/xml.c
@@ -290,7 +290,7 @@ static int le_xml_parser;
/* {{{ startup, shutdown and info functions */
static PHP_GINIT_FUNCTION(xml)
{
- xml_globals->default_encoding = "UTF-8";
+ xml_globals->default_encoding = (XML_Char*)"UTF-8";
}
static void *php_xml_malloc_wrapper(size_t sz)
@@ -727,11 +727,13 @@ void _xml_startElementHandler(void *userData, const XML_Char *name, const XML_Ch
array_init(&args[2]);
while (attributes && *attributes) {
+ zval tmp;
+
att = _xml_decode_tag(parser, (const char *)attributes[0]);
val = xml_utf8_decode(attributes[1], strlen((char *)attributes[1]), parser->target_encoding);
- // TODO: avoid reallocation ???
- add_assoc_str(&args[2], att->val, val);
+ ZVAL_STR(&tmp, val);
+ zend_symtable_update(Z_ARRVAL(args[2]), att, &tmp);
attributes += 2;
@@ -762,11 +764,13 @@ void _xml_startElementHandler(void *userData, const XML_Char *name, const XML_Ch
attributes = (const XML_Char **) attrs;
while (attributes && *attributes) {
+ zval tmp;
+
att = _xml_decode_tag(parser, (const char *)attributes[0]);
val = xml_utf8_decode(attributes[1], strlen((char *)attributes[1]), parser->target_encoding);
- // TODO: avoid reallocation ???
- add_assoc_str(&atr, att->val, val);
+ ZVAL_STR(&tmp, val);
+ zend_symtable_update(Z_ARRVAL(atr), att, &tmp);
atcnt++;
attributes += 2;
@@ -889,7 +893,6 @@ void _xml_characterDataHandler(void *userData, const XML_Char *s, int len)
decoded_value->val, decoded_value->len + 1);
STR_RELEASE(decoded_value);
} else {
- // TODO: avoid reallocation ???
add_assoc_str(parser->ctag, "value", decoded_value);
}
@@ -919,7 +922,6 @@ void _xml_characterDataHandler(void *userData, const XML_Char *s, int len)
_xml_add_to_info(parser,parser->ltags[parser->level-1] + parser->toffset);
add_assoc_string(&tag, "tag", parser->ltags[parser->level-1] + parser->toffset);
- // TODO: avoid reallocation ???
add_assoc_str(&tag, "value", decoded_value);
add_assoc_string(&tag, "type", "cdata");
add_assoc_long(&tag, "level", parser->level);
@@ -1109,11 +1111,11 @@ static void php_xml_parser_create_impl(INTERNAL_FUNCTION_PARAMETERS, int ns_supp
encoding = XML(default_encoding);
auto_detect = 1;
} else if (strcasecmp(encoding_param, "ISO-8859-1") == 0) {
- encoding = "ISO-8859-1";
+ encoding = (XML_Char*)"ISO-8859-1";
} else if (strcasecmp(encoding_param, "UTF-8") == 0) {
- encoding = "UTF-8";
+ encoding = (XML_Char*)"UTF-8";
} else if (strcasecmp(encoding_param, "US-ASCII") == 0) {
- encoding = "US-ASCII";
+ encoding = (XML_Char*)"US-ASCII";
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "unsupported source encoding \"%s\"", encoding_param);
RETURN_FALSE;
@@ -1128,7 +1130,7 @@ static void php_xml_parser_create_impl(INTERNAL_FUNCTION_PARAMETERS, int ns_supp
parser = ecalloc(1, sizeof(xml_parser));
parser->parser = XML_ParserCreate_MM((auto_detect ? NULL : encoding),
- &php_xml_mem_hdlrs, ns_param);
+ &php_xml_mem_hdlrs, (XML_Char*)ns_param);
parser->target_encoding = encoding;
parser->case_folding = 1;
@@ -1372,7 +1374,7 @@ PHP_FUNCTION(xml_parse)
ZEND_FETCH_RESOURCE(parser, xml_parser *, pind, -1, "XML Parser", le_xml_parser);
parser->isparsing = 1;
- ret = XML_Parse(parser->parser, data, data_len, isFinal);
+ ret = XML_Parse(parser->parser, (XML_Char*)data, data_len, isFinal);
parser->isparsing = 0;
RETVAL_LONG(ret);
}
@@ -1417,7 +1419,7 @@ PHP_FUNCTION(xml_parse_into_struct)
XML_SetCharacterDataHandler(parser->parser, _xml_characterDataHandler);
parser->isparsing = 1;
- ret = XML_Parse(parser->parser, data, data_len, 1);
+ ret = XML_Parse(parser->parser, (XML_Char*)data, data_len, 1);
parser->isparsing = 0;
RETVAL_LONG(ret);
@@ -1566,7 +1568,7 @@ PHP_FUNCTION(xml_parser_set_option)
case PHP_XML_OPTION_TARGET_ENCODING: {
xml_encoding *enc;
convert_to_string_ex(val);
- enc = xml_get_encoding(Z_STRVAL_P(val));
+ enc = xml_get_encoding((XML_Char*)Z_STRVAL_P(val));
if (enc == NULL) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unsupported target encoding \"%s\"", Z_STRVAL_P(val));
RETURN_FALSE;
@@ -1625,7 +1627,7 @@ PHP_FUNCTION(utf8_encode)
return;
}
- encoded = xml_utf8_encode(arg, arg_len, "ISO-8859-1");
+ encoded = xml_utf8_encode(arg, arg_len, (XML_Char*)"ISO-8859-1");
if (encoded == NULL) {
RETURN_FALSE;
}
@@ -1645,7 +1647,7 @@ PHP_FUNCTION(utf8_decode)
return;
}
- decoded = xml_utf8_decode(arg, arg_len, "ISO-8859-1");
+ decoded = xml_utf8_decode((XML_Char*)arg, arg_len, (XML_Char*)"ISO-8859-1");
if (decoded == NULL) {
RETURN_FALSE;
}
diff --git a/main/fopen_wrappers.c b/main/fopen_wrappers.c
index ad2e8a8d14..981c5c5a15 100644
--- a/main/fopen_wrappers.c
+++ b/main/fopen_wrappers.c
@@ -433,16 +433,18 @@ PHPAPI int php_fopen_primary_script(zend_file_handle *file_handle TSRMLS_DC)
if (!resolved_path) {
if (SG(request_info).path_translated != filename) {
-//??? STR_FREE(filename);
- if (filename) efree(filename);
+ if (filename) {
+ efree(filename);
+ }
}
/* we have to free SG(request_info).path_translated here because
* php_destroy_request_info assumes that it will get
* freed when the include_names hash is emptied, but
* we're not adding it in this case */
-//??? STR_FREE(SG(request_info).path_translated);
- if (SG(request_info).path_translated) efree(SG(request_info).path_translated);
- SG(request_info).path_translated = NULL;
+ if (SG(request_info).path_translated) {
+ efree(SG(request_info).path_translated);
+ SG(request_info).path_translated = NULL;
+ }
return FAILURE;
}
efree(resolved_path);
@@ -452,19 +454,22 @@ PHPAPI int php_fopen_primary_script(zend_file_handle *file_handle TSRMLS_DC)
if (zend_stream_open(filename, file_handle TSRMLS_CC) == FAILURE) {
PG(display_errors) = orig_display_errors;
if (SG(request_info).path_translated != filename) {
-//??? STR_FREE(filename);
- if (filename) efree(filename);
+ if (filename) {
+ efree(filename);
+ }
+ }
+ if (SG(request_info).path_translated) {
+ efree(SG(request_info).path_translated);
+ SG(request_info).path_translated = NULL;
}
-//??? STR_FREE(SG(request_info).path_translated); /* for same reason as above */
- if (SG(request_info).path_translated) efree(SG(request_info).path_translated);
- SG(request_info).path_translated = NULL;
return FAILURE;
}
PG(display_errors) = orig_display_errors;
if (SG(request_info).path_translated != filename) {
-//??? STR_FREE(SG(request_info).path_translated); /* for same reason as above */
- if (SG(request_info).path_translated) efree(SG(request_info).path_translated);
+ if (SG(request_info).path_translated) {
+ efree(SG(request_info).path_translated);
+ }
SG(request_info).path_translated = filename;
}
diff --git a/main/network.c b/main/network.c
index ce88bf41ea..74855064d7 100644
--- a/main/network.c
+++ b/main/network.c
@@ -166,7 +166,7 @@ PHPAPI void php_network_freeaddresses(struct sockaddr **sal)
/* {{{ php_network_getaddresses
* Returns number of addresses, 0 for none/error
*/
-PHPAPI int php_network_getaddresses(const char *host, int socktype, struct sockaddr ***sal, char **error_string TSRMLS_DC)
+PHPAPI int php_network_getaddresses(const char *host, int socktype, struct sockaddr ***sal, zend_string **error_string TSRMLS_DC)
{
struct sockaddr **sap;
int n;
@@ -212,16 +212,16 @@ PHPAPI int php_network_getaddresses(const char *host, int socktype, struct socka
if ((n = getaddrinfo(host, NULL, &hints, &res))) {
if (error_string) {
- spprintf(error_string, 0, "php_network_getaddresses: getaddrinfo failed: %s", PHP_GAI_STRERROR(n));
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", *error_string);
+ *error_string = strpprintf(0, "php_network_getaddresses: getaddrinfo failed: %s", PHP_GAI_STRERROR(n));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", (*error_string)->val);
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "php_network_getaddresses: getaddrinfo failed: %s", PHP_GAI_STRERROR(n));
}
return 0;
} else if (res == NULL) {
if (error_string) {
- spprintf(error_string, 0, "php_network_getaddresses: getaddrinfo failed (null result pointer) errno=%d", errno);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", *error_string);
+ *error_string = strpprintf(0, "php_network_getaddresses: getaddrinfo failed (null result pointer) errno=%d", errno);
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", (*error_string)->val);
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "php_network_getaddresses: getaddrinfo failed (null result pointer)");
}
@@ -249,8 +249,8 @@ PHPAPI int php_network_getaddresses(const char *host, int socktype, struct socka
host_info = gethostbyname(host);
if (host_info == NULL) {
if (error_string) {
- spprintf(error_string, 0, "php_network_getaddresses: gethostbyname failed. errno=%d", errno);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", *error_string);
+ error_string = strpprintf(0, "php_network_getaddresses: gethostbyname failed. errno=%d", errno);
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", (*error_string)->val);
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "php_network_getaddresses: gethostbyname failed");
}
@@ -305,7 +305,7 @@ PHPAPI int php_network_connect_socket(php_socket_t sockfd,
socklen_t addrlen,
int asynchronous,
struct timeval *timeout,
- char **error_string,
+ zend_string **error_string,
int *error_code)
{
#if HAVE_NON_BLOCKING_CONNECT
@@ -326,7 +326,7 @@ PHPAPI int php_network_connect_socket(php_socket_t sockfd,
if (error != EINPROGRESS) {
if (error_string) {
- *error_string = php_socket_strerror(error, NULL, 0);
+ *error_string = php_socket_error_str(error);
}
return -1;
@@ -382,7 +382,7 @@ ok:
if (error) {
ret = -1;
if (error_string) {
- *error_string = php_socket_strerror(error, NULL, 0);
+ *error_string = php_socket_error_str(error);
}
}
return ret;
@@ -416,7 +416,7 @@ static inline void sub_times(struct timeval a, struct timeval b, struct timeval
* */
/* {{{ php_network_bind_socket_to_local_addr */
php_socket_t php_network_bind_socket_to_local_addr(const char *host, unsigned port,
- int socktype, long sockopts, char **error_string, int *error_code
+ int socktype, long sockopts, zend_string **error_string, int *error_code
TSRMLS_DC)
{
int num_addrs, n, err = 0;
@@ -495,7 +495,7 @@ php_socket_t php_network_bind_socket_to_local_addr(const char *host, unsigned po
*error_code = err;
}
if (error_string) {
- *error_string = php_socket_strerror(err, NULL, 0);
+ *error_string = php_socket_error_str(err);
}
bound:
@@ -516,7 +516,7 @@ PHPAPI int php_network_parse_network_address_with_port(const char *addr, long ad
struct sockaddr_in *in4 = (struct sockaddr_in*)sa;
struct sockaddr **psal;
int n;
- char *errstr = NULL;
+ zend_string *errstr = NULL;
#if HAVE_IPV6
struct sockaddr_in6 *in6 = (struct sockaddr_in6*)sa;
#endif
@@ -562,9 +562,8 @@ PHPAPI int php_network_parse_network_address_with_port(const char *addr, long ad
if (n == 0) {
if (errstr) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to resolve `%s': %s", tmp, errstr);
-//??? STR_FREE(errstr);
- efree(errstr);
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to resolve `%s': %s", tmp, errstr->val);
+ STR_RELEASE(errstr);
}
goto out;
}
@@ -590,7 +589,6 @@ PHPAPI int php_network_parse_network_address_with_port(const char *addr, long ad
php_network_freeaddresses(psal);
out:
-//??? STR_FREE(tmp);
efree(tmp);
return ret;
}
@@ -600,7 +598,7 @@ PHPAPI void php_network_populate_name_from_sockaddr(
/* input address */
struct sockaddr *sa, socklen_t sl,
/* output readable address */
- char **textaddr, long *textaddrlen,
+ zend_string **textaddr,
/* output address */
struct sockaddr **addr,
socklen_t *addrlen
@@ -623,7 +621,7 @@ PHPAPI void php_network_populate_name_from_sockaddr(
/* generally not thread safe, but it *is* thread safe under win32 */
buf = inet_ntoa(((struct sockaddr_in*)sa)->sin_addr);
if (buf) {
- *textaddrlen = spprintf(textaddr, 0, "%s:%d",
+ *textaddr = strpprintf(0, "%s:%d",
buf, ntohs(((struct sockaddr_in*)sa)->sin_port));
}
@@ -633,7 +631,7 @@ PHPAPI void php_network_populate_name_from_sockaddr(
case AF_INET6:
buf = (char*)inet_ntop(sa->sa_family, &((struct sockaddr_in6*)sa)->sin6_addr, (char *)&abuf, sizeof(abuf));
if (buf) {
- *textaddrlen = spprintf(textaddr, 0, "%s:%d",
+ *textaddr = strpprintf(0, "%s:%d",
buf, ntohs(((struct sockaddr_in6*)sa)->sin6_port));
}
@@ -647,13 +645,10 @@ PHPAPI void php_network_populate_name_from_sockaddr(
if (ua->sun_path[0] == '\0') {
/* abstract name */
int len = strlen(ua->sun_path + 1) + 1;
- *textaddrlen = len;
- *textaddr = emalloc(len + 1);
- memcpy(*textaddr, ua->sun_path, len);
- (*textaddr)[len] = '\0';
+ *textaddr = STR_INIT((char*)ua->sun_path, len, 0);
} else {
- *textaddrlen = strlen(ua->sun_path);
- *textaddr = estrndup(ua->sun_path, *textaddrlen);
+ int len = strlen(ua->sun_path);
+ *textaddr = STR_INIT((char*)ua->sun_path, len, 0);
}
}
break;
@@ -665,7 +660,7 @@ PHPAPI void php_network_populate_name_from_sockaddr(
}
PHPAPI int php_network_get_peer_name(php_socket_t sock,
- char **textaddr, long *textaddrlen,
+ zend_string **textaddr,
struct sockaddr **addr,
socklen_t *addrlen
TSRMLS_DC)
@@ -676,7 +671,7 @@ PHPAPI int php_network_get_peer_name(php_socket_t sock,
if (getpeername(sock, (struct sockaddr*)&sa, &sl) == 0) {
php_network_populate_name_from_sockaddr((struct sockaddr*)&sa, sl,
- textaddr, textaddrlen,
+ textaddr,
addr, addrlen
TSRMLS_CC);
return 0;
@@ -685,7 +680,7 @@ PHPAPI int php_network_get_peer_name(php_socket_t sock,
}
PHPAPI int php_network_get_sock_name(php_socket_t sock,
- char **textaddr, long *textaddrlen,
+ zend_string **textaddr,
struct sockaddr **addr,
socklen_t *addrlen
TSRMLS_DC)
@@ -696,7 +691,7 @@ PHPAPI int php_network_get_sock_name(php_socket_t sock,
if (getsockname(sock, (struct sockaddr*)&sa, &sl) == 0) {
php_network_populate_name_from_sockaddr((struct sockaddr*)&sa, sl,
- textaddr, textaddrlen,
+ textaddr,
addr, addrlen
TSRMLS_CC);
return 0;
@@ -710,17 +705,17 @@ PHPAPI int php_network_get_sock_name(php_socket_t sock,
* using an optional timeout.
* Returns the peer address in addr/addrlen (it will emalloc
* these, so be sure to efree the result).
- * If you specify textaddr/textaddrlen, a text-printable
+ * If you specify textaddr, a text-printable
* version of the address will be emalloc'd and returned.
* */
/* {{{ php_network_accept_incoming */
PHPAPI php_socket_t php_network_accept_incoming(php_socket_t srvsock,
- char **textaddr, long *textaddrlen,
+ zend_string **textaddr,
struct sockaddr **addr,
socklen_t *addrlen,
struct timeval *timeout,
- char **error_string,
+ zend_string **error_string,
int *error_code
TSRMLS_DC)
{
@@ -742,7 +737,7 @@ PHPAPI php_socket_t php_network_accept_incoming(php_socket_t srvsock,
if (clisock != SOCK_ERR) {
php_network_populate_name_from_sockaddr((struct sockaddr*)&sa, sl,
- textaddr, textaddrlen,
+ textaddr,
addr, addrlen
TSRMLS_CC);
} else {
@@ -754,7 +749,7 @@ PHPAPI php_socket_t php_network_accept_incoming(php_socket_t srvsock,
*error_code = error;
}
if (error_string) {
- *error_string = php_socket_strerror(error, NULL, 0);
+ *error_string = php_socket_error_str(error);
}
return clisock;
@@ -771,7 +766,7 @@ PHPAPI php_socket_t php_network_accept_incoming(php_socket_t srvsock,
/* {{{ php_network_connect_socket_to_host */
php_socket_t php_network_connect_socket_to_host(const char *host, unsigned short port,
- int socktype, int asynchronous, struct timeval *timeout, char **error_string,
+ int socktype, int asynchronous, struct timeval *timeout, zend_string **error_string,
int *error_code, char *bindto, unsigned short bindport, long sockopts
TSRMLS_DC)
{
@@ -885,7 +880,7 @@ skip_bind:
}
/* free error string received during previous iteration (if any) */
if (error_string && *error_string) {
- efree(*error_string);
+ STR_RELEASE(*error_string);
*error_string = NULL;
}
@@ -1046,6 +1041,44 @@ PHPAPI char *php_socket_strerror(long err, char *buf, size_t bufsize)
}
/* }}} */
+/* {{{ php_socket_error_str */
+PHPAPI zend_string *php_socket_error_str(long err)
+{
+#ifndef PHP_WIN32
+ char *errstr;
+
+ errstr = strerror(err);
+ return STR_INIT(errstr, strlen(errstr), 0);
+#else
+ zend_string *ret;
+ char *sysbuf;
+ int free_it = 1;
+
+ if (!FormatMessage(
+ FORMAT_MESSAGE_ALLOCATE_BUFFER |
+ FORMAT_MESSAGE_FROM_SYSTEM |
+ FORMAT_MESSAGE_IGNORE_INSERTS,
+ NULL,
+ err,
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+ (LPTSTR)&sysbuf,
+ 0,
+ NULL)) {
+ free_it = 0;
+ sysbuf = "Unknown Error";
+ }
+
+ ret = STR_INIT(sysbuf, strlen(sysbuf), 0);
+
+ if (free_it) {
+ LocalFree(sysbuf);
+ }
+
+ return ret;
+#endif
+}
+/* }}} */
+
/* deprecated */
PHPAPI php_stream *_php_stream_sock_open_from_socket(php_socket_t socket, const char *persistent_id STREAMS_DC TSRMLS_DC)
{
diff --git a/main/output.c b/main/output.c
index 68f3fa11b9..41b2c65cdf 100644
--- a/main/output.c
+++ b/main/output.c
@@ -55,7 +55,7 @@ static HashTable php_output_handler_reverse_conflicts;
static inline int php_output_lock_error(int op TSRMLS_DC);
static inline void php_output_op(int op, const char *str, size_t len TSRMLS_DC);
-static inline php_output_handler *php_output_handler_init(const char *name, size_t name_len, size_t chunk_size, int flags TSRMLS_DC);
+static inline php_output_handler *php_output_handler_init(zend_string *name, size_t chunk_size, int flags TSRMLS_DC);
static inline php_output_handler_status_t php_output_handler_op(php_output_handler *handler, php_output_context *context);
static inline int php_output_handler_append(php_output_handler *handler, const php_output_buffer *buf TSRMLS_DC);
static inline zval *php_output_handler_status(php_output_handler *handler, zval *entry);
@@ -508,7 +508,7 @@ PHPAPI php_output_handler *php_output_handler_create_user(zval *output_handler,
default:
user = ecalloc(1, sizeof(php_output_handler_user_func_t));
if (SUCCESS == zend_fcall_info_init(output_handler, 0, &user->fci, &user->fcc, &handler_name, &error TSRMLS_CC)) {
- handler = php_output_handler_init(handler_name->val, handler_name->len, chunk_size, (flags & ~0xf) | PHP_OUTPUT_HANDLER_USER TSRMLS_CC);
+ handler = php_output_handler_init(handler_name, chunk_size, (flags & ~0xf) | PHP_OUTPUT_HANDLER_USER TSRMLS_CC);
ZVAL_COPY(&user->zoh, output_handler);
handler->func.user = user;
} else {
@@ -532,9 +532,11 @@ PHPAPI php_output_handler *php_output_handler_create_user(zval *output_handler,
PHPAPI php_output_handler *php_output_handler_create_internal(const char *name, size_t name_len, php_output_handler_context_func_t output_handler, size_t chunk_size, int flags TSRMLS_DC)
{
php_output_handler *handler;
+ zend_string *str = STR_INIT(name, name_len, 1);
- handler = php_output_handler_init(name, name_len, chunk_size, (flags & ~0xf) | PHP_OUTPUT_HANDLER_INTERNAL TSRMLS_CC);
+ handler = php_output_handler_init(str, chunk_size, (flags & ~0xf) | PHP_OUTPUT_HANDLER_INTERNAL TSRMLS_CC);
handler->func.internal = output_handler;
+ STR_RELEASE(str);
return handler;
}
@@ -563,17 +565,17 @@ PHPAPI int php_output_handler_start(php_output_handler *handler TSRMLS_DC)
if (php_output_lock_error(PHP_OUTPUT_HANDLER_START TSRMLS_CC) || !handler) {
return FAILURE;
}
- if (NULL != (conflict = zend_hash_str_find_ptr(&php_output_handler_conflicts, handler->name, handler->name_len))) {
- if (SUCCESS != conflict(handler->name, handler->name_len TSRMLS_CC)) {
+ if (NULL != (conflict = zend_hash_find_ptr(&php_output_handler_conflicts, handler->name))) {
+ if (SUCCESS != conflict(handler->name->val, handler->name->len TSRMLS_CC)) {
return FAILURE;
}
}
- if (NULL != (rconflicts = zend_hash_str_find_ptr(&php_output_handler_reverse_conflicts, handler->name, handler->name_len))) {
+ if (NULL != (rconflicts = zend_hash_find_ptr(&php_output_handler_reverse_conflicts, handler->name))) {
for (zend_hash_internal_pointer_reset_ex(rconflicts, &pos);
(conflict = zend_hash_get_current_data_ptr_ex(rconflicts, &pos)) != NULL;
zend_hash_move_forward_ex(rconflicts, &pos)
) {
- if (SUCCESS != conflict(handler->name, handler->name_len TSRMLS_CC)) {
+ if (SUCCESS != conflict(handler->name->val, handler->name->len TSRMLS_CC)) {
return FAILURE;
}
}
@@ -596,7 +598,7 @@ PHPAPI int php_output_handler_started(const char *name, size_t name_len TSRMLS_D
handlers = (php_output_handler **) zend_stack_base(&OG(handlers));
for (i = 0; i < count; ++i) {
- if (name_len == handlers[i]->name_len && !memcmp(handlers[i]->name, name, name_len)) {
+ if (name_len == handlers[i]->name->len && !memcmp(handlers[i]->name->val, name, name_len)) {
return 1;
}
}
@@ -715,10 +717,12 @@ PHPAPI int php_output_handler_hook(php_output_handler_hook_t type, void *arg TSR
* Destroy an output handler */
PHPAPI void php_output_handler_dtor(php_output_handler *handler TSRMLS_DC)
{
-//??? STR_FREE(handler->name);
- if (handler->name) efree(handler->name);
-//??? STR_FREE(handler->buffer.data);
- if (handler->buffer.data) efree(handler->buffer.data);
+ if (handler->name) {
+ STR_RELEASE(handler->name);
+ }
+ if (handler->buffer.data) {
+ efree(handler->buffer.data);
+ }
if (handler->flags & PHP_OUTPUT_HANDLER_USER) {
zval_ptr_dtor(&handler->func.user->zoh);
efree(handler->func.user);
@@ -876,13 +880,12 @@ static inline void php_output_context_dtor(php_output_context *context)
/* {{{ static php_output_handler *php_output_handler_init(zval *name, size_t chunk_size, int flags TSRMLS_DC)
* Allocates and initializes a php_output_handler structure */
-static inline php_output_handler *php_output_handler_init(const char *name, size_t name_len, size_t chunk_size, int flags TSRMLS_DC)
+static inline php_output_handler *php_output_handler_init(zend_string *name, size_t chunk_size, int flags TSRMLS_DC)
{
php_output_handler *handler;
handler = ecalloc(1, sizeof(php_output_handler));
- handler->name = estrndup(name, name_len);
- handler->name_len = name_len;
+ handler->name = STR_COPY(name);
handler->size = chunk_size;
handler->flags = flags;
handler->buffer.size = PHP_OUTPUT_HANDLER_INITBUF_SIZE(chunk_size);
@@ -1169,7 +1172,7 @@ static int php_output_stack_apply_list(void *h, void *z)
php_output_handler *handler = *(php_output_handler **) h;
zval *array = (zval *) z;
- add_next_index_stringl(array, handler->name, handler->name_len);
+ add_next_index_str(array, STR_COPY(handler->name));
return 0;
}
/* }}} */
@@ -1193,7 +1196,7 @@ static inline zval *php_output_handler_status(php_output_handler *handler, zval
ZEND_ASSERT(entry != NULL);
array_init(entry);
- add_assoc_stringl(entry, "name", handler->name, handler->name_len);
+ add_assoc_str(entry, "name", STR_COPY(handler->name));
add_assoc_long(entry, "type", (long) (handler->flags & 0xf));
add_assoc_long(entry, "flags", (long) handler->flags);
add_assoc_long(entry, "level", (long) handler->level);
@@ -1219,7 +1222,7 @@ static inline int php_output_stack_pop(int flags TSRMLS_DC)
return 0;
} else if (!(flags & PHP_OUTPUT_POP_FORCE) && !(orphan->flags & PHP_OUTPUT_HANDLER_REMOVABLE)) {
if (!(flags & PHP_OUTPUT_POP_SILENT)) {
- php_error_docref("ref.outcontrol" TSRMLS_CC, E_NOTICE, "failed to %s buffer of %s (%d)", (flags&PHP_OUTPUT_POP_DISCARD)?"discard":"send", orphan->name, orphan->level);
+ php_error_docref("ref.outcontrol" TSRMLS_CC, E_NOTICE, "failed to %s buffer of %s (%d)", (flags&PHP_OUTPUT_POP_DISCARD)?"discard":"send", orphan->name->val, orphan->level);
}
return 0;
} else {
@@ -1346,7 +1349,7 @@ PHP_FUNCTION(ob_flush)
}
if (SUCCESS != php_output_flush(TSRMLS_C)) {
- php_error_docref("ref.outcontrol" TSRMLS_CC, E_NOTICE, "failed to flush buffer of %s (%d)", OG(active)->name, OG(active)->level);
+ php_error_docref("ref.outcontrol" TSRMLS_CC, E_NOTICE, "failed to flush buffer of %s (%d)", OG(active)->name->val, OG(active)->level);
RETURN_FALSE;
}
RETURN_TRUE;
@@ -1367,7 +1370,7 @@ PHP_FUNCTION(ob_clean)
}
if (SUCCESS != php_output_clean(TSRMLS_C)) {
- php_error_docref("ref.outcontrol" TSRMLS_CC, E_NOTICE, "failed to delete buffer of %s (%d)", OG(active)->name, OG(active)->level);
+ php_error_docref("ref.outcontrol" TSRMLS_CC, E_NOTICE, "failed to delete buffer of %s (%d)", OG(active)->name->val, OG(active)->level);
RETURN_FALSE;
}
RETURN_TRUE;
@@ -1422,7 +1425,7 @@ PHP_FUNCTION(ob_get_flush)
}
if (SUCCESS != php_output_end(TSRMLS_C)) {
- php_error_docref("ref.outcontrol" TSRMLS_CC, E_NOTICE, "failed to delete buffer of %s (%d)", OG(active)->name, OG(active)->level);
+ php_error_docref("ref.outcontrol" TSRMLS_CC, E_NOTICE, "failed to delete buffer of %s (%d)", OG(active)->name->val, OG(active)->level);
}
}
/* }}} */
@@ -1445,7 +1448,7 @@ PHP_FUNCTION(ob_get_clean)
}
if (SUCCESS != php_output_discard(TSRMLS_C)) {
- php_error_docref("ref.outcontrol" TSRMLS_CC, E_NOTICE, "failed to delete buffer of %s (%d)", OG(active)->name, OG(active)->level);
+ php_error_docref("ref.outcontrol" TSRMLS_CC, E_NOTICE, "failed to delete buffer of %s (%d)", OG(active)->name->val, OG(active)->level);
}
}
/* }}} */
diff --git a/main/php_network.h b/main/php_network.h
index 95299e63da..3a0062c437 100644
--- a/main/php_network.h
+++ b/main/php_network.h
@@ -63,6 +63,7 @@
* Also works sensibly for win32 */
BEGIN_EXTERN_C()
PHPAPI char *php_socket_strerror(long err, char *buf, size_t bufsize);
+PHPAPI zend_string *php_socket_error_str(long err);
END_EXTERN_C()
#ifdef HAVE_NETINET_IN_H
@@ -229,11 +230,11 @@ typedef struct {
#endif
BEGIN_EXTERN_C()
-PHPAPI int php_network_getaddresses(const char *host, int socktype, struct sockaddr ***sal, char **error_string TSRMLS_DC);
+PHPAPI int php_network_getaddresses(const char *host, int socktype, struct sockaddr ***sal, zend_string **error_string TSRMLS_DC);
PHPAPI void php_network_freeaddresses(struct sockaddr **sal);
PHPAPI php_socket_t php_network_connect_socket_to_host(const char *host, unsigned short port,
- int socktype, int asynchronous, struct timeval *timeout, char **error_string,
+ int socktype, int asynchronous, struct timeval *timeout, zend_string **error_string,
int *error_code, char *bindto, unsigned short bindport, long sockopts
TSRMLS_DC);
@@ -242,33 +243,33 @@ PHPAPI int php_network_connect_socket(php_socket_t sockfd,
socklen_t addrlen,
int asynchronous,
struct timeval *timeout,
- char **error_string,
+ zend_string **error_string,
int *error_code);
#define php_connect_nonb(sock, addr, addrlen, timeout) \
php_network_connect_socket((sock), (addr), (addrlen), 0, (timeout), NULL, NULL)
PHPAPI php_socket_t php_network_bind_socket_to_local_addr(const char *host, unsigned port,
- int socktype, long sockopts, char **error_string, int *error_code
+ int socktype, long sockopts, zend_string **error_string, int *error_code
TSRMLS_DC);
PHPAPI php_socket_t php_network_accept_incoming(php_socket_t srvsock,
- char **textaddr, long *textaddrlen,
+ zend_string **textaddr,
struct sockaddr **addr,
socklen_t *addrlen,
struct timeval *timeout,
- char **error_string,
+ zend_string **error_string,
int *error_code
TSRMLS_DC);
PHPAPI int php_network_get_sock_name(php_socket_t sock,
- char **textaddr, long *textaddrlen,
+ zend_string **textaddr,
struct sockaddr **addr,
socklen_t *addrlen
TSRMLS_DC);
PHPAPI int php_network_get_peer_name(php_socket_t sock,
- char **textaddr, long *textaddrlen,
+ zend_string **textaddr,
struct sockaddr **addr,
socklen_t *addrlen
TSRMLS_DC);
@@ -298,7 +299,7 @@ PHPAPI void php_network_populate_name_from_sockaddr(
/* input address */
struct sockaddr *sa, socklen_t sl,
/* output readable address */
- char **textaddr, long *textaddrlen,
+ zend_string **textaddr,
/* output address */
struct sockaddr **addr,
socklen_t *addrlen
diff --git a/main/php_output.h b/main/php_output.h
index 45af14f6a5..f8b961c7c3 100644
--- a/main/php_output.h
+++ b/main/php_output.h
@@ -127,8 +127,7 @@ typedef struct _php_output_handler_user_func_t {
} php_output_handler_user_func_t;
typedef struct _php_output_handler {
- char *name;
- size_t name_len;
+ zend_string *name;
int flags;
int level;
size_t size;
diff --git a/main/streams/filter.c b/main/streams/filter.c
index d2411c928a..a74802eb14 100644
--- a/main/streams/filter.c
+++ b/main/streams/filter.c
@@ -60,7 +60,6 @@ PHPAPI int php_stream_filter_register_factory_volatile(const char *filterpattern
if (!FG(stream_filters)) {
ALLOC_HASHTABLE(FG(stream_filters));
zend_hash_init(FG(stream_filters), zend_hash_num_elements(&stream_filters_hash), NULL, NULL, 1);
-//??? zend_hash_copy(FG(stream_filters), &stream_filters_hash, NULL, &tmpfactory, sizeof(php_stream_filter_factory));
zend_hash_copy(FG(stream_filters), &stream_filters_hash, NULL);
}
diff --git a/main/streams/php_stream_transport.h b/main/streams/php_stream_transport.h
index dc10eb4e92..a6797ed898 100644
--- a/main/streams/php_stream_transport.h
+++ b/main/streams/php_stream_transport.h
@@ -50,7 +50,7 @@ PHPAPI php_stream *_php_stream_xport_create(const char *name, size_t namelen, in
int flags, const char *persistent_id,
struct timeval *timeout,
php_stream_context *context,
- char **error_string,
+ zend_string **error_string,
int *error_code
STREAMS_DC TSRMLS_DC);
@@ -60,7 +60,7 @@ PHPAPI php_stream *_php_stream_xport_create(const char *name, size_t namelen, in
/* Bind the stream to a local address */
PHPAPI int php_stream_xport_bind(php_stream *stream,
const char *name, size_t namelen,
- char **error_text
+ zend_string **error_text
TSRMLS_DC);
/* Connect to a remote address */
@@ -68,28 +68,28 @@ PHPAPI int php_stream_xport_connect(php_stream *stream,
const char *name, size_t namelen,
int asynchronous,
struct timeval *timeout,
- char **error_text,
+ zend_string **error_text,
int *error_code
TSRMLS_DC);
/* Prepare to listen */
PHPAPI int php_stream_xport_listen(php_stream *stream,
int backlog,
- char **error_text
+ zend_string **error_text
TSRMLS_DC);
/* Get the next client and their address as a string, or the underlying address
* structure. You must efree either of these if you request them */
PHPAPI int php_stream_xport_accept(php_stream *stream, php_stream **client,
- char **textaddr, int *textaddrlen,
+ zend_string **textaddr,
void **addr, socklen_t *addrlen,
struct timeval *timeout,
- char **error_text
+ zend_string **error_text
TSRMLS_DC);
/* Get the name of either the socket or it's peer */
PHPAPI int php_stream_xport_get_name(php_stream *stream, int want_peer,
- char **textaddr, int *textaddrlen,
+ zend_string **textaddr,
void **addr, socklen_t *addrlen
TSRMLS_DC);
@@ -102,7 +102,7 @@ enum php_stream_xport_send_recv_flags {
* peeking, optionally retrieving OOB data */
PHPAPI int php_stream_xport_recvfrom(php_stream *stream, char *buf, size_t buflen,
long flags, void **addr, socklen_t *addrlen,
- char **textaddr, int *textaddrlen TSRMLS_DC);
+ zend_string **textaddr TSRMLS_DC);
/* Similar to send() system call; send data to the stream, optionally
* sending it as OOB data */
@@ -155,10 +155,8 @@ typedef struct _php_stream_xport_param {
int returncode;
struct sockaddr *addr;
socklen_t addrlen;
- char *textaddr;
- long textaddrlen;
-
- char *error_text;
+ zend_string *textaddr;
+ zend_string *error_text;
int error_code;
} outputs;
} php_stream_xport_param;
diff --git a/main/streams/transports.c b/main/streams/transports.c
index 0db04cd495..7792e24fef 100644
--- a/main/streams/transports.c
+++ b/main/streams/transports.c
@@ -40,20 +40,20 @@ PHPAPI int php_stream_xport_unregister(const char *protocol TSRMLS_DC)
}
#define ERR_REPORT(out_err, fmt, arg) \
- if (out_err) { spprintf(out_err, 0, fmt, arg); } \
+ if (out_err) { *out_err = strpprintf(0, fmt, arg); } \
else { php_error_docref(NULL TSRMLS_CC, E_WARNING, fmt, arg); }
#define ERR_RETURN(out_err, local_err, fmt) \
if (out_err) { *out_err = local_err; } \
- else { php_error_docref(NULL TSRMLS_CC, E_WARNING, fmt, local_err ? local_err : "Unspecified error"); \
- if (local_err) { efree(local_err); local_err = NULL; } \
+ else { php_error_docref(NULL TSRMLS_CC, E_WARNING, fmt, local_err ? local_err->val : "Unspecified error"); \
+ if (local_err) { STR_RELEASE(local_err); local_err = NULL; } \
}
PHPAPI php_stream *_php_stream_xport_create(const char *name, size_t namelen, int options,
int flags, const char *persistent_id,
struct timeval *timeout,
php_stream_context *context,
- char **error_string,
+ zend_string **error_string,
int *error_code
STREAMS_DC TSRMLS_DC)
{
@@ -61,7 +61,7 @@ PHPAPI php_stream *_php_stream_xport_create(const char *name, size_t namelen, in
php_stream_transport_factory factory = NULL;
const char *p, *protocol = NULL;
int n = 0, failed = 0;
- char *error_text = NULL;
+ zend_string *error_text = NULL;
struct timeval default_timeout = { 0, 0 };
default_timeout.tv_sec = FG(default_socket_timeout);
@@ -195,7 +195,7 @@ PHPAPI php_stream *_php_stream_xport_create(const char *name, size_t namelen, in
/* Bind the stream to a local address */
PHPAPI int php_stream_xport_bind(php_stream *stream,
const char *name, size_t namelen,
- char **error_text
+ zend_string **error_text
TSRMLS_DC)
{
php_stream_xport_param param;
@@ -225,7 +225,7 @@ PHPAPI int php_stream_xport_connect(php_stream *stream,
const char *name, size_t namelen,
int asynchronous,
struct timeval *timeout,
- char **error_text,
+ zend_string **error_text,
int *error_code
TSRMLS_DC)
{
@@ -257,7 +257,7 @@ PHPAPI int php_stream_xport_connect(php_stream *stream,
}
/* Prepare to listen */
-PHPAPI int php_stream_xport_listen(php_stream *stream, int backlog, char **error_text TSRMLS_DC)
+PHPAPI int php_stream_xport_listen(php_stream *stream, int backlog, zend_string **error_text TSRMLS_DC)
{
php_stream_xport_param param;
int ret;
@@ -282,10 +282,10 @@ PHPAPI int php_stream_xport_listen(php_stream *stream, int backlog, char **error
/* Get the next client and their address (as a string) */
PHPAPI int php_stream_xport_accept(php_stream *stream, php_stream **client,
- char **textaddr, int *textaddrlen,
+ zend_string **textaddr,
void **addr, socklen_t *addrlen,
struct timeval *timeout,
- char **error_text
+ zend_string **error_text
TSRMLS_DC)
{
php_stream_xport_param param;
@@ -309,7 +309,6 @@ PHPAPI int php_stream_xport_accept(php_stream *stream, php_stream **client,
}
if (textaddr) {
*textaddr = param.outputs.textaddr;
- *textaddrlen = param.outputs.textaddrlen;
}
if (error_text) {
*error_text = param.outputs.error_text;
@@ -321,7 +320,7 @@ PHPAPI int php_stream_xport_accept(php_stream *stream, php_stream **client,
}
PHPAPI int php_stream_xport_get_name(php_stream *stream, int want_peer,
- char **textaddr, int *textaddrlen,
+ zend_string **textaddr,
void **addr, socklen_t *addrlen
TSRMLS_DC)
{
@@ -343,7 +342,6 @@ PHPAPI int php_stream_xport_get_name(php_stream *stream, int want_peer,
}
if (textaddr) {
*textaddr = param.outputs.textaddr;
- *textaddrlen = param.outputs.textaddrlen;
}
return param.outputs.returncode;
@@ -395,7 +393,7 @@ PHPAPI int php_stream_xport_crypto_enable(php_stream *stream, int activate TSRML
/* Similar to recv() system call; read data from the stream, optionally
* peeking, optionally retrieving OOB data */
PHPAPI int php_stream_xport_recvfrom(php_stream *stream, char *buf, size_t buflen,
- long flags, void **addr, socklen_t *addrlen, char **textaddr, int *textaddrlen
+ long flags, void **addr, socklen_t *addrlen, zend_string **textaddr
TSRMLS_DC)
{
php_stream_xport_param param;
@@ -455,7 +453,6 @@ PHPAPI int php_stream_xport_recvfrom(php_stream *stream, char *buf, size_t bufle
}
if (textaddr) {
*textaddr = param.outputs.textaddr;
- *textaddrlen = param.outputs.textaddrlen;
}
return recvd_len + param.outputs.returncode;
}
diff --git a/main/streams/xp_socket.c b/main/streams/xp_socket.c
index eb0e1cd298..dad78beb13 100644
--- a/main/streams/xp_socket.c
+++ b/main/streams/xp_socket.c
@@ -247,7 +247,7 @@ static inline int sock_sendto(php_netstream_data_t *sock, const char *buf, size_
}
static inline int sock_recvfrom(php_netstream_data_t *sock, char *buf, size_t buflen, int flags,
- char **textaddr, long *textaddrlen,
+ zend_string **textaddr,
struct sockaddr **addr, socklen_t *addrlen
TSRMLS_DC)
{
@@ -260,7 +260,7 @@ static inline int sock_recvfrom(php_netstream_data_t *sock, char *buf, size_t bu
ret = recvfrom(sock->socket, buf, buflen, flags, (struct sockaddr*)&sa, &sl);
ret = (ret == SOCK_CONN_ERR) ? -1 : ret;
php_network_populate_name_from_sockaddr((struct sockaddr*)&sa, sl,
- textaddr, textaddrlen, addr, addrlen TSRMLS_CC);
+ textaddr, addr, addrlen TSRMLS_CC);
} else {
ret = recv(sock->socket, buf, buflen, flags);
ret = (ret == SOCK_CONN_ERR) ? -1 : ret;
@@ -338,7 +338,6 @@ static int php_sockop_set_option(php_stream *stream, int option, int value, void
case STREAM_XPORT_OP_GET_NAME:
xparam->outputs.returncode = php_network_get_sock_name(sock->socket,
xparam->want_textaddr ? &xparam->outputs.textaddr : NULL,
- xparam->want_textaddr ? &xparam->outputs.textaddrlen : NULL,
xparam->want_addr ? &xparam->outputs.addr : NULL,
xparam->want_addr ? &xparam->outputs.addrlen : NULL
TSRMLS_CC);
@@ -347,7 +346,6 @@ static int php_sockop_set_option(php_stream *stream, int option, int value, void
case STREAM_XPORT_OP_GET_PEER_NAME:
xparam->outputs.returncode = php_network_get_peer_name(sock->socket,
xparam->want_textaddr ? &xparam->outputs.textaddr : NULL,
- xparam->want_textaddr ? &xparam->outputs.textaddrlen : NULL,
xparam->want_addr ? &xparam->outputs.addr : NULL,
xparam->want_addr ? &xparam->outputs.addrlen : NULL
TSRMLS_CC);
@@ -383,7 +381,6 @@ static int php_sockop_set_option(php_stream *stream, int option, int value, void
xparam->inputs.buf, xparam->inputs.buflen,
flags,
xparam->want_textaddr ? &xparam->outputs.textaddr : NULL,
- xparam->want_textaddr ? &xparam->outputs.textaddrlen : NULL,
xparam->want_addr ? &xparam->outputs.addr : NULL,
xparam->want_addr ? &xparam->outputs.addrlen : NULL
TSRMLS_CC);
@@ -533,7 +530,7 @@ static inline int parse_unix_address(php_stream_xport_param *xparam, struct sock
}
#endif
-static inline char *parse_ip_address_ex(const char *str, size_t str_len, int *portno, int get_err, char **err TSRMLS_DC)
+static inline char *parse_ip_address_ex(const char *str, size_t str_len, int *portno, int get_err, zend_string **err TSRMLS_DC)
{
char *colon;
char *host = NULL;
@@ -546,7 +543,7 @@ static inline char *parse_ip_address_ex(const char *str, size_t str_len, int *po
p = memchr(str + 1, ']', str_len - 2);
if (!p || *(p + 1) != ':') {
if (get_err) {
- spprintf(err, 0, "Failed to parse IPv6 address \"%s\"", str);
+ *err = strpprintf(0, "Failed to parse IPv6 address \"%s\"", str);
}
return NULL;
}
@@ -564,7 +561,7 @@ static inline char *parse_ip_address_ex(const char *str, size_t str_len, int *po
host = estrndup(str, colon - str);
} else {
if (get_err) {
- spprintf(err, 0, "Failed to parse address \"%s\"", str);
+ *err = strpprintf(0, "Failed to parse address \"%s\"", str);
}
return NULL;
}
@@ -593,7 +590,7 @@ static inline int php_tcp_sockop_bind(php_stream *stream, php_netstream_data_t *
if (sock->socket == SOCK_ERR) {
if (xparam->want_errortext) {
- spprintf(&xparam->outputs.error_text, 0, "Failed to create unix%s socket %s",
+ xparam->outputs.error_text = strpprintf(0, "Failed to create unix%s socket %s",
stream->ops == &php_stream_unix_socket_ops ? "" : "datagram",
strerror(errno));
}
@@ -664,7 +661,7 @@ static inline int php_tcp_sockop_connect(php_stream *stream, php_netstream_data_
if (sock->socket == SOCK_ERR) {
if (xparam->want_errortext) {
- spprintf(&xparam->outputs.error_text, 0, "Failed to create unix socket");
+ xparam->outputs.error_text = strpprintf(0, "Failed to create unix socket");
}
return -1;
}
@@ -692,7 +689,7 @@ static inline int php_tcp_sockop_connect(php_stream *stream, php_netstream_data_
if (PHP_STREAM_CONTEXT(stream) && (tmpzval = php_stream_context_get_option(PHP_STREAM_CONTEXT(stream), "socket", "bindto")) != NULL) {
if (Z_TYPE_P(tmpzval) != IS_STRING) {
if (xparam->want_errortext) {
- spprintf(&xparam->outputs.error_text, 0, "local_addr context option is not a string.");
+ xparam->outputs.error_text = strpprintf(0, "local_addr context option is not a string.");
}
efree(host);
return -1;
@@ -756,7 +753,6 @@ static inline int php_tcp_sockop_accept(php_stream *stream, php_netstream_data_t
clisock = php_network_accept_incoming(sock->socket,
xparam->want_textaddr ? &xparam->outputs.textaddr : NULL,
- xparam->want_textaddr ? &xparam->outputs.textaddrlen : NULL,
xparam->want_addr ? &xparam->outputs.addr : NULL,
xparam->want_addr ? &xparam->outputs.addrlen : NULL,
xparam->inputs.timeout,
diff --git a/sapi/cgi/cgi_main.c b/sapi/cgi/cgi_main.c
index 16f11fd40c..ff3889dd6c 100644
--- a/sapi/cgi/cgi_main.c
+++ b/sapi/cgi/cgi_main.c
@@ -238,7 +238,6 @@ static void print_modules(TSRMLS_D)
HashTable sorted_registry;
zend_hash_init(&sorted_registry, 64, NULL, NULL, 1);
-//??? zend_hash_copy(&sorted_registry, &module_registry, NULL, &tmp, sizeof(zend_module_entry));
zend_hash_copy(&sorted_registry, &module_registry, NULL);
zend_hash_sort(&sorted_registry, zend_qsort, module_name_cmp, 0 TSRMLS_CC);
zend_hash_apply(&sorted_registry, print_module_info TSRMLS_CC);
diff --git a/sapi/cli/php_cli_server.c b/sapi/cli/php_cli_server.c
index 8fe195f6d7..09cfd02ec9 100644
--- a/sapi/cli/php_cli_server.c
+++ b/sapi/cli/php_cli_server.c
@@ -415,7 +415,7 @@ PHP_FUNCTION(apache_request_headers) /* {{{ */
HashTable *headers;
zend_string *key;
char *value;
- HashPosition pos;
+ zval tmp;
if (zend_parse_parameters_none() == FAILURE) {
return;
@@ -426,13 +426,10 @@ PHP_FUNCTION(apache_request_headers) /* {{{ */
array_init_size(return_value, zend_hash_num_elements(headers));
- zend_hash_internal_pointer_reset_ex(headers, &pos);
- while ((value = zend_hash_get_current_data_ptr_ex(headers, &pos)) != NULL) {
- zend_hash_get_current_key_ex(headers, &key, NULL, 0, &pos);
-//???
- add_assoc_string_ex(return_value, key->val, key->len, value);
- zend_hash_move_forward_ex(headers, &pos);
- }
+ ZEND_HASH_FOREACH_STR_KEY_PTR(headers, key, value) {
+ ZVAL_STRING(&tmp, value);
+ zend_symtable_update(Z_ARRVAL_P(return_value), key, &tmp);
+ } ZEND_HASH_FOREACH_END();
}
/* }}} */
@@ -1210,7 +1207,7 @@ static void php_cli_server_logf(const char *format TSRMLS_DC, ...) /* {{{ */
efree(buf);
} /* }}} */
-static int php_network_listen_socket(const char *host, int *port, int socktype, int *af, socklen_t *socklen, char **errstr TSRMLS_DC) /* {{{ */
+static int php_network_listen_socket(const char *host, int *port, int socktype, int *af, socklen_t *socklen, zend_string **errstr TSRMLS_DC) /* {{{ */
{
int retval = SOCK_ERR;
int err = 0;
@@ -1325,7 +1322,7 @@ out:
closesocket(retval);
}
if (errstr) {
- *errstr = php_socket_strerror(err, NULL, 0);
+ *errstr = php_socket_error_str(err);
}
return SOCK_ERR;
}
@@ -1795,12 +1792,12 @@ static int php_cli_server_client_ctor(php_cli_server_client *client, php_cli_ser
client->addr = addr;
client->addr_len = addr_len;
{
- char *addr_str = 0;
- long addr_str_len = 0;
- php_network_populate_name_from_sockaddr(addr, addr_len, &addr_str, &addr_str_len, NULL, 0 TSRMLS_CC);
- client->addr_str = pestrndup(addr_str, addr_str_len, 1);
- client->addr_str_len = addr_str_len;
- efree(addr_str);
+ zend_string *addr_str = 0;
+
+ php_network_populate_name_from_sockaddr(addr, addr_len, &addr_str, NULL, 0 TSRMLS_CC);
+ client->addr_str = pestrndup(addr_str->val, addr_str->len, 1);
+ client->addr_str_len = addr_str->len;
+ STR_RELEASE(addr_str);
}
php_http_parser_init(&client->parser, PHP_HTTP_REQUEST);
client->request_read = 0;
@@ -2187,7 +2184,7 @@ static int php_cli_server_ctor(php_cli_server *server, const char *addr, const c
{
int retval = SUCCESS;
char *host = NULL;
- char *errstr = NULL;
+ zend_string *errstr = NULL;
char *_document_root = NULL;
char *_router = NULL;
int err = 0;
@@ -2234,8 +2231,10 @@ static int php_cli_server_ctor(php_cli_server *server, const char *addr, const c
server_sock = php_network_listen_socket(host, &port, SOCK_STREAM, &server->address_family, &server->socklen, &errstr TSRMLS_CC);
if (server_sock == SOCK_ERR) {
- php_cli_server_logf("Failed to listen on %s:%d (reason: %s)" TSRMLS_CC, host, port, errstr ? errstr: "?");
- efree(errstr);
+ php_cli_server_logf("Failed to listen on %s:%d (reason: %s)" TSRMLS_CC, host, port, errstr ? errstr->val : "?");
+ if (errstr) {
+ STR_RELEASE(errstr);
+ }
retval = FAILURE;
goto out;
}
diff --git a/win32/sendmail.c b/win32/sendmail.c
index ed9736c1dd..c191e0f3aa 100644
--- a/win32/sendmail.c
+++ b/win32/sendmail.c
@@ -616,9 +616,6 @@ static int SendText(char *RPath, char *Subject, char *mailTo, char *mailCc, char
return (res);
}
-//???PHPAPI zend_string *php_str_to_str(char *haystack, int length, char *needle,
-//??? int needle_len, char *str, int str_len);
-
/* Escape \n. sequences
* We use php_str_to_str() and not php_str_replace_in_subject(), since the latter
* uses ZVAL as it's parameters */