cvs: /php3 ChangeLog /php3/functions string.c

From: Date: Tue, 07 Dec 1999 06:44:54 +0000
Subject: cvs: /php3 ChangeLog /php3/functions string.c
Groups: php.dev 
Request: Send a blank email to php-dev+get-13485@lists.php.net to get a copy of this message
thies Tue Dec 7 01:44:54 1999 EDT Modified files: /php3 ChangeLog /php3/functions string.c Log: explode() is now binary-safe. Index: php3/ChangeLog diff -u php3/ChangeLog:1.798 php3/ChangeLog:1.799 --- php3/ChangeLog:1.798 Mon Dec 6 12:49:13 1999 +++ php3/ChangeLog Tue Dec 7 01:44:52 1999 @@ -2,6 +2,7 @@ ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| xx xx xxxx, Version 3.0.13 +- explode() is now binary-safe. (Thies) - strpos() is now binary-safe. (Thies) - Add configure command to phpinfo() output (Stig) - added sketchy support for GNU recode 3.5 (Kristian) Index: php3/functions/string.c diff -u php3/functions/string.c:1.203 php3/functions/string.c:1.204 --- php3/functions/string.c:1.203 Mon Dec 6 12:49:14 1999 +++ php3/functions/string.c Tue Dec 7 01:44:53 1999 @@ -30,7 +30,7 @@ */ -/* $Id: string.c,v 1.203 1999/12/06 17:49:14 thies Exp $ */ +/* $Id: string.c,v 1.204 1999/12/07 06:44:53 thies Exp $ */ #ifdef THREAD_SAFE #include "tls.h" #endif @@ -291,22 +291,24 @@ void _php3_explode(pval *delim, pval *str, pval *return_value) { - char *work_str, *p1, *p2; + char *p1, *p2, *endp; int i = 0; - work_str = p1 = estrndup(str->value.str.val,str->value.str.len); - p2 = strstr(p1, delim->value.str.val); + endp = str->value.str.val + str->value.str.len; + + p1 = str->value.str.val; + p2 = _php3_memnstr(str->value.str.val, delim->value.str.val, delim->value.str.len, endp); + if (p2 == NULL) { - add_index_string(return_value, i++, p1, 1); + add_index_stringl(return_value, i++, p1, str->value.str.len, 1); } else do { - p2[0] = 0; - add_index_string(return_value, i++, p1, 1); + add_index_stringl(return_value, i++, p1, p2-p1, 1); p1 = p2 + delim->value.str.len; - } while ((p2 = strstr(p1, delim->value.str.val)) && p2 != work_str); - if (p1 != work_str) { - add_index_string(return_value, i++, p1, 1); + } while (p2 = _php3_memnstr(p1, delim->value.str.val, delim->value.str.len, endp)); + + if (p1 <= endp) { + add_index_stringl(return_value, i++, p1, endp-p1, 1); } - efree(work_str); } /* {{{ proto array explode(string separator, string str) @@ -321,7 +323,7 @@ convert_to_string(str); convert_to_string(delim); - if (strlen(delim->value.str.val)==0) { + if (! delim->value.str.len) { /* the delimiter must be a valid C string that's at least 1 character long */ php3_error(E_WARNING,"Empty delimiter"); RETURN_FALSE;

« previous php.dev (#13485) next »