during conversion of Unicode strings.
/* break omitted intentionally */
case IS_UNICODE:
- if (c == 'S') {
+ /* handle conversion of Unicode to binary with a specific converter */
+ if (c == 's' && *spec_walk == '&') {
+ UConverter *conv = va_arg(*va, UConverter *);
+ SEPARATE_ZVAL_IF_NOT_REF(arg);
+ convert_to_string_with_converter(*arg, conv);
+ *p = Z_STRVAL_PP(arg);
+ *pl = Z_STRLEN_PP(arg);
+ spec_walk++;
+ break;
+ } else if (c == 'S') {
return "definitely a binary string";
}
/* fall through */
min_num_args = max_num_args;
break;
- case '/':
- case '!':
+ case '/': case '!':
+ case '&':
/* Pass */
break;
break;
case '|': case '!':
- case '/':
+ case '/': case '&':
/* pass */
break;