Re: com php-src: Add default_charset handling: ext/standard/html.c ext/standard/tests/strings/default_charset.phpt
| From: | Nikita Popov | Date: | Thu, 20 Mar 2014 11:57:50 +0000 |
| Subject: | Re: com php-src: Add default_charset handling: ext/standard/html.c ext/standard/tests/strings/default_charset.phpt | ||
| References: | 1 | Groups: | php.cvs |
| Request: | Send a blank email to php-cvs+get-76555@lists.php.net to get a copy of this message | ||
On Thu, Mar 20, 2014 at 3:03 AM, Yasuo Ohgaki <yohgaki@php.net> wrote:
> Commit: 8f5a31ff37d499e1b04238b4b26c201d491af7c5
> Author: Yasuo Ohgaki <yohgaki@php.net> Thu, 20 Mar 2014
> 10:49:23 +0900
> Parents: 122c69a0bef07851c20e29775be73faf294c2ea3
> Branches: master
>
> Link:
>
> http://git.php.net/?p=php-src.git;a=commitdiff;h=8f5a31ff37d499e1b04238b4b26c201d491af7c5
>
> Log:
> Add default_charset handling
>
> Changed paths:
> M ext/standard/html.c
> A ext/standard/tests/strings/default_charset.phpt
>
>
> Diff:
> diff --git a/ext/standard/html.c b/ext/standard/html.c
> index 075a4d2..ad2f38f 100644
> --- a/ext/standard/html.c
> +++ b/ext/standard/html.c
> @@ -84,6 +84,19 @@
> #define sjis_lead(c) ((c) != 0x80 && (c) != 0xA0 && (c) < 0xFD)
> #define sjis_trail(c) ((c) >= 0x40 && (c) != 0x7F && (c) < 0xFD)
>
> +/* {{{ get_charset
> + */
> +static void get_charset(char **charset, int *charset_len TSRMLS_DC) {
> + if (PG(internal_encoding) && PG(internal_encoding)[0]) {
> + *charset_len = strlen(PG(internal_encoding));
> + *charset = estrndup(PG(internal_encoding), *charset_len);
> + } else if (SG(default_charset) && SG(default_charset)[0] ) {
> + *charset_len = strlen(SG(default_charset));
> + *charset = estrndup(SG(default_charset), *charset_len);
> + }
> +}
> +/* }}} */
> +
> /* {{{ get_next_char
> */
> static inline unsigned int get_next_char(
> @@ -1432,8 +1445,8 @@ encode_amp:
> */
> static void php_html_entities(INTERNAL_FUNCTION_PARAMETERS, int all)
> {
> - char *str, *hint_charset = PHP_DEFAULT_CHARSET;
> - int str_len, hint_charset_len = sizeof(PHP_DEFAULT_CHARSET)-1;
> + char *str, *hint_charset = "";
> + int str_len, hint_charset_len = 0;
> size_t new_len;
> long flags = ENT_COMPAT;
> char *replaced;
> @@ -1443,7 +1456,14 @@ static void
> php_html_entities(INTERNAL_FUNCTION_PARAMETERS, int all)
> return;
> }
>
> - replaced = php_escape_html_entities_ex(str, str_len, &new_len,
> all, (int) flags, hint_charset, double_encode TSRMLS_CC);
> + if (hint_charset_len) {
> + replaced = php_escape_html_entities_ex(str, str_len,
> &new_len, all, (int) flags, hint_charset, double_encode TSRMLS_CC);
> + } else {
> + get_charset(&hint_charset, &hint_charset_len TSRMLS_CC);
> + replaced = php_escape_html_entities_ex(str, str_len,
> &new_len, all, (int) flags, hint_charset, double_encode TSRMLS_CC);
> + efree(hint_charset);
> + }
>
Why do you use estrndup in get_charset, just to efree it here? Can't you
just directly return it and avoid an alloc/free cycle on the charset string?
Nikita