Merge branch 'phpng' of https://git.php.net/repository/php-src into phpng

This commit is contained in:
Xinchen Hui 2014-08-14 11:52:46 +08:00
commit bfc1ae07be
34 changed files with 506 additions and 602 deletions

View File

@ -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);

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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);
}
/* }}} */

View File

@ -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);

View File

@ -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,

View File

@ -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;

View File

@ -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);
}
/* }}}*/

View File

@ -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);

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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);
}
/* }}} */

View File

@ -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);
}
}

View File

@ -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);

View File

@ -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;
}

View File

@ -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);

View File

@ -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;

View File

@ -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';
ret[i] = '\0';
if (newlen)
*newlen = target_length;
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);

View File

@ -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);

View File

@ -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;

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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)
{

View File

@ -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);
}
}
/* }}} */

View File

@ -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

View File

@ -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;

View File

@ -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);
}

View File

@ -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;

View File

@ -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;
}

View File

@ -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,

View File

@ -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);

View File

@ -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;
}

View File

@ -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 */