]> granicus.if.org Git - php/commitdiff
fix signed/unsigned mismatch
authorAnatol Belski <ab@php.net>
Tue, 16 Sep 2014 20:15:27 +0000 (22:15 +0200)
committerAnatol Belski <ab@php.net>
Tue, 16 Sep 2014 20:15:27 +0000 (22:15 +0200)
ext/standard/string.c

index 0c41249473e514798b05c3e4bde44b2f13dfaba2..7b18acf83cf916743e4d8aff04b3156618d3954d 100644 (file)
@@ -780,7 +780,7 @@ static inline int php_charmask(unsigned char *input, size_t len, char *mask TSRM
  */
 PHPAPI char *php_trim(char *c, size_t len, char *what, size_t what_len, zval *return_value, int mode TSRMLS_DC)
 {
-       register zend_long i;
+       register size_t i;
        size_t trimmed = 0;
        char mask[256];
 
@@ -802,12 +802,15 @@ PHPAPI char *php_trim(char *c, size_t len, char *what, size_t what_len, zval *re
                c += trimmed;
        }
        if (mode & 2) {
-               for (i = len - 1; i >= 0; i--) {
-                       if (mask[(unsigned char)c[i]]) {
-                               len--;
-                       } else {
-                               break;
-                       }
+               if (len > 0) {
+                       i = len - 1;
+                       do {
+                               if (mask[(unsigned char)c[i]]) {
+                                       len--;
+                               } else {
+                                       break;
+                               }
+                       } while (i-- != 0);
                }
        }