@@ -2708,16 +2708,16 @@ PHPAPI char *php_strtr(char *str, size_t len, const char *str_from, const char *
2708
2708
}
2709
2709
}
2710
2710
} else {
2711
- unsigned char xlat [256 ], j = 0 ;
2711
+ unsigned char xlat [256 ];
2712
2712
2713
- do { xlat [ j ] = j ; } while ( ++ j != 0 );
2713
+ memset ( xlat , 0 , sizeof ( xlat ) );
2714
2714
2715
2715
for (i = 0 ; i < trlen ; i ++ ) {
2716
- xlat [(size_t )(unsigned char ) str_from [i ]] = str_to [i ];
2716
+ xlat [(size_t )(unsigned char ) str_from [i ]] = str_to [i ] - str_from [ i ] ;
2717
2717
}
2718
2718
2719
2719
for (i = 0 ; i < len ; i ++ ) {
2720
- str [i ] = xlat [(size_t )(unsigned char ) str [i ]];
2720
+ str [i ] + = xlat [(size_t )(unsigned char ) str [i ]];
2721
2721
}
2722
2722
}
2723
2723
@@ -2742,41 +2742,38 @@ static zend_string *php_strtr_ex(zend_string *str, const char *str_from, const c
2742
2742
new_str = zend_string_alloc (ZSTR_LEN (str ), 0 );
2743
2743
memcpy (ZSTR_VAL (new_str ), ZSTR_VAL (str ), i );
2744
2744
ZSTR_VAL (new_str )[i ] = ch_to ;
2745
- break ;
2745
+ i ++ ;
2746
+ for (; i < ZSTR_LEN (str ); i ++ ) {
2747
+ ZSTR_VAL (new_str )[i ] = (ZSTR_VAL (str )[i ] != ch_from ) ? ZSTR_VAL (str )[i ] : ch_to ;
2748
+ }
2749
+ ZSTR_VAL (new_str )[i ] = 0 ;
2750
+ return new_str ;
2746
2751
}
2747
2752
}
2748
- for (; i < ZSTR_LEN (str ); i ++ ) {
2749
- ZSTR_VAL (new_str )[i ] = (ZSTR_VAL (str )[i ] != ch_from ) ? ZSTR_VAL (str )[i ] : ch_to ;
2750
- }
2751
2753
} else {
2752
- unsigned char xlat [256 ], j = 0 ;
2754
+ unsigned char xlat [256 ];
2753
2755
2754
- do { xlat [ j ] = j ; } while ( ++ j != 0 ) ;
2756
+ memset ( xlat , 0 , sizeof ( xlat )); ;
2755
2757
2756
2758
for (i = 0 ; i < trlen ; i ++ ) {
2757
- xlat [(size_t )(unsigned char ) str_from [i ]] = str_to [i ];
2759
+ xlat [(size_t )(unsigned char ) str_from [i ]] = str_to [i ] - str_from [ i ] ;
2758
2760
}
2759
2761
2760
2762
for (i = 0 ; i < ZSTR_LEN (str ); i ++ ) {
2761
- if (ZSTR_VAL ( str )[ i ] != xlat [(size_t )(unsigned char ) ZSTR_VAL (str )[i ]]) {
2763
+ if (xlat [(size_t )(unsigned char ) ZSTR_VAL (str )[i ]]) {
2762
2764
new_str = zend_string_alloc (ZSTR_LEN (str ), 0 );
2763
2765
memcpy (ZSTR_VAL (new_str ), ZSTR_VAL (str ), i );
2764
- ZSTR_VAL (new_str )[i ] = xlat [(size_t )(unsigned char ) ZSTR_VAL (str )[i ]];
2765
- break ;
2766
+ do {
2767
+ ZSTR_VAL (new_str )[i ] = ZSTR_VAL (str )[i ] + xlat [(size_t )(unsigned char ) ZSTR_VAL (str )[i ]];
2768
+ i ++ ;
2769
+ } while (i < ZSTR_LEN (str ));
2770
+ ZSTR_VAL (new_str )[i ] = 0 ;
2771
+ return new_str ;
2766
2772
}
2767
2773
}
2768
-
2769
- for (;i < ZSTR_LEN (str ); i ++ ) {
2770
- ZSTR_VAL (new_str )[i ] = xlat [(size_t )(unsigned char ) ZSTR_VAL (str )[i ]];
2771
- }
2772
2774
}
2773
2775
2774
- if (!new_str ) {
2775
- return zend_string_copy (str );
2776
- }
2777
-
2778
- ZSTR_VAL (new_str )[ZSTR_LEN (new_str )] = 0 ;
2779
- return new_str ;
2776
+ return zend_string_copy (str );
2780
2777
}
2781
2778
/* }}} */
2782
2779
0 commit comments