Re: com php-src: Add default_charset handling: ext/standard/html.c ext/standard/tests/strings/default_charset.phpt

From: 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

« previous php.cvs (#76555) next »