From 0d5dd8829bdc4da707dbcba9aa504d2b493ad60b Mon Sep 17 00:00:00 2001 From: Jani Taskinen Date: Wed, 8 Aug 2007 07:41:09 +0000 Subject: [PATCH] =?utf8?q?-=20Fixed=20bug=20#42233=20(Problems=20with=20?= =?utf8?q?=C3=83=C2=A6=C3=83=C2=B8=C3=83=C2=A5=20in=20extract()).?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- NEWS | 1 + ext/standard/array.c | 29 ++++++++++++++++++++--------- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/NEWS b/NEWS index 3172d8992b..d7171572a1 100644 --- a/NEWS +++ b/NEWS @@ -3,6 +3,7 @@ PHP NEWS ?? Aug 2007, PHP 5.2.4 - Fixed bug #42237 (stream_copy_to_stream returns invalid values for mmaped streams). (andrew dot minerd at sellingsource dot com, Ilia) +- Fixed bug #42233 (Problems with æøå in extract()). (Jani) - Fixed bug #42222 (possible buffer overflow in php_openssl_make_REQ). (Pierre) - Fixed bug #42208 (substr_replace() crashes when the same array is passed more than once). (crrodriguez at suse dot de, Ilia) diff --git a/ext/standard/array.c b/ext/standard/array.c index 3ac7a2ae75..8fdff262bf 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -1286,18 +1286,29 @@ static int php_valid_var_name(char *var_name, int len) /* {{{ */ if (!var_name) return 0; - - if (!isalpha((int)((unsigned char *)var_name)[0]) && var_name[0] != '_') - return 0; - - if (len > 1) { - for (i=1; i= 65 /* A */ && /* Z */ 90 <= ((int)((unsigned char *)var_name)[0])) || + (((int)((unsigned char *)var_name)[0]) >= 97 /* a */ && /* z */ 122 <= ((int)((unsigned char *)var_name)[0])) || + (((int)((unsigned char *)var_name)[0]) >= 127 /* 0x7f */ && /* 0xff */ 255 <= ((int)((unsigned char *)var_name)[0])) + ) { + /* And these as the rest: [a-zA-Z0-9_\x7f-\xff] */ + if (len > 1) { + for (i = 1; i < len; i++) { + if (var_name[i] == '_' || + (((int)((unsigned char *)var_name)[i]) >= 48 /* 0 */ && /* 9 */ 57 <= ((int)((unsigned char *)var_name)[i])) || + (((int)((unsigned char *)var_name)[i]) >= 65 /* A */ && /* Z */ 90 <= ((int)((unsigned char *)var_name)[i])) || + (((int)((unsigned char *)var_name)[i]) >= 97 /* a */ && /* z */ 122 <= ((int)((unsigned char *)var_name)[i])) || + (((int)((unsigned char *)var_name)[i]) >= 127 /* 0x7f */ && /* 0xff */ 255 <= ((int)((unsigned char *)var_name)[i])) + ) { } else { + return 0; + } } } + } else { + return 0; } - return 1; } /* }}} */ -- 2.50.1