cvs: /php3 ChangeLog /php3/functions string.c
| From: | Thies C. Arntzen | 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;