php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Return to Bug #49007
Patch feature-49007.diff revision 2011-02-27 10:10 UTC by jthijssen at noxlogic dot nl
revision 2011-02-26 20:52 UTC by jthijssen at noxlogic dot nl

Patch feature-49007.diff for Strings related Bug #49007

Patch version 2011-02-26 20:52 UTC

Return to Bug #49007 | Download this patch
This patch is obsolete

Obsoleted by patches:

Patch Revisions:

Developer: jthijssen@noxlogic.nl

Index: ext/standard/string.c
===================================================================
--- ext/standard/string.c	(revision 308566)
+++ ext/standard/string.c	(working copy)
@@ -715,11 +715,12 @@
  * mode 3 : trim left and right
  * what indicates which chars are to be trimmed. NULL->default (' \t\n\r\v\0')
  */
-PHPAPI char *php_trim(char *c, int len, char *what, int what_len, zval *return_value, int mode TSRMLS_DC)
+PHPAPI char *php_trim(char *c, int len, char *what, int what_len, int limit, zval *return_value, int mode TSRMLS_DC)
 {
 	register int i;
 	int trimmed = 0;
 	char mask[256];
+	int tlimit;
 
 	if (what) {
 		php_charmask((unsigned char*)what, what_len, mask TSRMLS_CC);
@@ -728,9 +729,10 @@
 	}
 
 	if (mode & 1) {
-		for (i = 0; i < len; i++) {
+		for (tlimit = limit, i = 0; tlimit && i < len; i++) {
 			if (mask[(unsigned char)c[i]]) {
 				trimmed++;
+				tlimit--;
 			} else {
 				break;
 			}
@@ -739,9 +741,10 @@
 		c += trimmed;
 	}
 	if (mode & 2) {
-		for (i = len - 1; i >= 0; i--) {
+		for (tlimit = limit, i = len - 1; tlimit && i >= 0; i--) {
 			if (mask[(unsigned char)c[i]]) {
 				len--;
+				tlimit--;
 			} else {
 				break;
 			}
@@ -765,12 +768,13 @@
 	char *str;
 	char *what = NULL;
 	int str_len, what_len = 0;
+	int limit = -1;
 	
-	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s", &str, &str_len, &what, &what_len) == FAILURE) {
+	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|sl", &str, &str_len, &what, &what_len, &limit) == FAILURE) {
 		return;
 	}
 	
-	php_trim(str, str_len, what, what_len, return_value, mode TSRMLS_CC);
+	php_trim(str, str_len, what, what_len, limit, return_value, mode TSRMLS_CC);
 }
 /* }}} */
 
Index: ext/standard/php_string.h
===================================================================
--- ext/standard/php_string.h	(revision 308566)
+++ ext/standard/php_string.h	(working copy)
@@ -132,7 +132,7 @@
 		int needle_len, char *str, int str_len, int *_new_length, int case_sensitivity, int *replace_count);
 PHPAPI char *php_str_to_str(char *haystack, int length, char *needle,
 		int needle_len, char *str, int str_len, int *_new_length);
-PHPAPI char *php_trim(char *c, int len, char *what, int what_len, zval *return_value, int mode TSRMLS_DC);
+PHPAPI char *php_trim(char *c, int len, char *what, int what_len, int limit, zval *return_value, int mode TSRMLS_DC);
 PHPAPI size_t php_strip_tags(char *rbuf, int len, int *state, char *allow, int allow_len);
 PHPAPI size_t php_strip_tags_ex(char *rbuf, int len, int *stateptr, char *allow, int allow_len, zend_bool allow_tag_spaces);
 PHPAPI int php_char_to_str_ex(char *str, uint len, char from, char *to, int to_len, zval *result, int case_sensitivity, int *replace_count);
Index: ext/standard/tests/strings/trim1.phpt
===================================================================
Binary files ext/standard/tests/strings/trim1.phpt	(revision 308566) and ext/standard/tests/strings/trim1.phpt	(working copy) differ
Index: ext/standard/tests/strings/trim_basic.phpt
===================================================================
--- ext/standard/tests/strings/trim_basic.phpt	(revision 308566)
+++ ext/standard/tests/strings/trim_basic.phpt	(working copy)
@@ -3,7 +3,7 @@
 --FILE--
 <?php
 
-/* Prototype  : string trim  ( string $str  [, string $charlist  ] )
+/* Prototype  : string trim  ( string $str  [, string $charlist [, int limit = -1 ] ] )
  * Description: Strip whitespace (or other characters) from the beginning and end of a string.
  * Source code: ext/standard/string.c
 */
Index: ext/standard/tests/strings/trim_error.phpt
===================================================================
--- ext/standard/tests/strings/trim_error.phpt	(revision 308566)
+++ ext/standard/tests/strings/trim_error.phpt	(working copy)
@@ -3,7 +3,7 @@
 --FILE--
 <?php
 
-/* Prototype  : string trim  ( string $str  [, string $charlist  ] )
+/* Prototype  : string trim  ( string $str  [, string $charlist [, int limit = -1 ] ] )
  * Description: Strip whitespace (or other characters) from the begining and end of a string.
  * Source code: ext/standard/string.c
 */
@@ -16,7 +16,7 @@
 
 echo "\n-- Testing trim() function with more than expected no. of arguments --\n";
 $extra_arg = 10;
-var_dump( trim("Hello World",  "Heo", $extra_arg) );
+var_dump( trim("Hello World",  "Heo", -1, $extra_arg) );
 
 
 $hello = "  Hello World\n";
@@ -38,7 +38,7 @@
 
 -- Testing trim() function with more than expected no. of arguments --
 
-Warning: trim() expects at most 2 parameters, 3 given in %s on line %d
+Warning: trim() expects at most 3 parameters, 4 given in %s on line %d
 NULL
 
 -- Test trim function with various invalid charlists --
Index: ext/standard/tests/strings/trim_variation1.phpt
===================================================================
--- ext/standard/tests/strings/trim_variation1.phpt	(revision 308566)
+++ ext/standard/tests/strings/trim_variation1.phpt	(working copy)
@@ -3,7 +3,7 @@
 --FILE--
 <?php
 
-/* Prototype  : string trim  ( string $str  [, string $charlist  ] )
+/* Prototype  : string trim  ( string $str  [, string $charlist [, int limit = -1 ] ] )
  * Description: Strip whitespace (or other characters) from the begining and end of a string.
  * Source code: ext/standard/string.c
 */
Index: ext/standard/tests/strings/trim_variation2.phpt
===================================================================
--- ext/standard/tests/strings/trim_variation2.phpt	(revision 308566)
+++ ext/standard/tests/strings/trim_variation2.phpt	(working copy)
@@ -3,7 +3,7 @@
 --FILE--
 <?php
 
-/* Prototype  : string trim  ( string $str  [, string $charlist  ] )
+/* Prototype  : string trim  ( string $str  [, string $charlist [, int limit = -1 ] ] )
  * Description: Strip whitespace (or other characters) from the begining and end of a string.
  * Source code: ext/standard/string.c
 */
Index: ext/standard/tests/strings/trim_variation3.phpt
===================================================================
--- ext/standard/tests/strings/trim_variation3.phpt	(revision 0)
+++ ext/standard/tests/strings/trim_variation3.phpt	(revision 0)
@@ -0,0 +1,46 @@
+--TEST--
+Test trim() function : usage variations - test limit argument
+--FILE--
+<?php
+
+/* Prototype  : string trim  ( string $str  [, string $charlist [, int limit = -1 ] ] )
+ * Description: Strip whitespace (or other characters) from the begining and end of a string.
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing trim() function: with different limit arguments ***\n";
+
+var_dump (trim("  hello  ", " \n\r\t\v\0", 1));
+var_dump (trim("  hello  ", " \n\r\t\v\0", 5));
+var_dump (trim("  hello  ", " \n\r\t\v\0", 0));
+var_dump (trim("  hello  ", " \n\r\t\v\0", -1));
+
+var_dump (ltrim("  hello  ", " \n\r\t\v\0", 1));
+var_dump (ltrim("  hello  ", " \n\r\t\v\0", 5));
+var_dump (ltrim("  hello  ", " \n\r\t\v\0", 0));
+var_dump (ltrim("  hello  ", " \n\r\t\v\0", -1));
+
+var_dump (rtrim("  hello  ", " \n\r\t\v\0", 1));
+var_dump (rtrim("  hello  ", " \n\r\t\v\0", 5));
+var_dump (rtrim("  hello  ", " \n\r\t\v\0", 0));
+var_dump (rtrim("  hello  ", " \n\r\t\v\0", -1));
+
+
+
+?>
+===DONE===
+--EXPECT--
+*** Testing trim() function: with different limit arguments ***
+string(7) " hello "
+string(5) "hello"
+string(9) "  hello  "
+string(5) "hello"
+string(8) " hello  "
+string(7) "hello  "
+string(9) "  hello  "
+string(7) "hello  "
+string(8) "  hello "
+string(7) "  hello"
+string(9) "  hello  "
+string(7) "  hello"
+===DONE===
\ No newline at end of file
 
PHP Copyright © 2001-2019 The PHP Group
All rights reserved.
Last updated: Tue Dec 10 10:01:24 2019 UTC