Skip to content

Commit aca4a9a

Browse files
committed
Drop support for printf p modifier
To be conservative, cause a fatal error if the p modifier is encountered, in case this is still used by some extension.
1 parent 3acdab8 commit aca4a9a

File tree

3 files changed

+16
-35
lines changed

3 files changed

+16
-35
lines changed

main/snprintf.c

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -738,9 +738,15 @@ static int format_converter(register buffy * odp, const char *fmt, va_list ap) /
738738
#endif
739739
break;
740740
case 'p':
741-
fmt++;
742-
modifier = LM_PHP_INT_T;
741+
{
742+
char __next = *(fmt+1);
743+
if ('d' == __next || 'u' == __next || 'x' == __next || 'o' == __next) {
744+
zend_error_noreturn(E_CORE_ERROR,
745+
"printf \"p\" modifier is no longer supported, use ZEND_LONG_FMT");
746+
}
747+
modifier = LM_STD;
743748
break;
749+
}
744750
case 'h':
745751
fmt++;
746752
if (*fmt == 'h') {
@@ -803,9 +809,6 @@ static int format_converter(register buffy * odp, const char *fmt, va_list ap) /
803809
i_num = (wide_int) va_arg(ap, ptrdiff_t);
804810
break;
805811
#endif
806-
case LM_PHP_INT_T:
807-
i_num = (wide_int) va_arg(ap, zend_ulong);
808-
break;
809812
}
810813
/*
811814
* The rest also applies to other integer formats, so fall
@@ -849,9 +852,6 @@ static int format_converter(register buffy * odp, const char *fmt, va_list ap) /
849852
i_num = (wide_int) va_arg(ap, ptrdiff_t);
850853
break;
851854
#endif
852-
case LM_PHP_INT_T:
853-
i_num = (wide_int) va_arg(ap, zend_long);
854-
break;
855855
}
856856
}
857857
s = ap_php_conv_10(i_num, (*fmt) == 'u', &is_negative,
@@ -898,9 +898,6 @@ static int format_converter(register buffy * odp, const char *fmt, va_list ap) /
898898
ui_num = (u_wide_int) va_arg(ap, ptrdiff_t);
899899
break;
900900
#endif
901-
case LM_PHP_INT_T:
902-
ui_num = (u_wide_int) va_arg(ap, zend_ulong);
903-
break;
904901
}
905902
s = ap_php_conv_p2(ui_num, 3, *fmt, &num_buf[NUM_BUF_SIZE], &s_len);
906903
FIX_PRECISION(adjust_precision, precision, s, s_len);
@@ -940,9 +937,6 @@ static int format_converter(register buffy * odp, const char *fmt, va_list ap) /
940937
ui_num = (u_wide_int) va_arg(ap, ptrdiff_t);
941938
break;
942939
#endif
943-
case LM_PHP_INT_T:
944-
ui_num = (u_wide_int) va_arg(ap, zend_ulong);
945-
break;
946940
}
947941
s = ap_php_conv_p2(ui_num, 4, *fmt, &num_buf[NUM_BUF_SIZE], &s_len);
948942
FIX_PRECISION(adjust_precision, precision, s, s_len);

main/snprintf.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,6 @@ typedef enum {
129129
LM_SIZE_T,
130130
LM_LONG,
131131
LM_LONG_DOUBLE,
132-
LM_PHP_INT_T
133132
} length_modifier_e;
134133

135134
#ifdef PHP_WIN32

main/spprintf.c

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -338,16 +338,16 @@ static void xbuf_format_converter(void *xbuf, bool is_char, const char *fmt, va_
338338
modifier = LM_SIZE_T;
339339
#endif
340340
break;
341-
case 'p': {
342-
char __next = *(fmt+1);
343-
if ('d' == __next || 'u' == __next || 'x' == __next || 'o' == __next) {
344-
fmt++;
345-
modifier = LM_PHP_INT_T;
346-
} else {
347-
modifier = LM_STD;
348-
}
341+
case 'p':
342+
{
343+
char __next = *(fmt+1);
344+
if ('d' == __next || 'u' == __next || 'x' == __next || 'o' == __next) {
345+
zend_error_noreturn(E_CORE_ERROR,
346+
"printf \"p\" modifier is no longer supported, use ZEND_LONG_FMT");
349347
}
348+
modifier = LM_STD;
350349
break;
350+
}
351351
case 'h':
352352
fmt++;
353353
if (*fmt == 'h') {
@@ -410,9 +410,6 @@ static void xbuf_format_converter(void *xbuf, bool is_char, const char *fmt, va_
410410
i_num = (wide_int) va_arg(ap, ptrdiff_t);
411411
break;
412412
#endif
413-
case LM_PHP_INT_T:
414-
i_num = (wide_int) va_arg(ap, zend_ulong);
415-
break;
416413
}
417414
/*
418415
* The rest also applies to other integer formats, so fall
@@ -456,9 +453,6 @@ static void xbuf_format_converter(void *xbuf, bool is_char, const char *fmt, va_
456453
i_num = (wide_int) va_arg(ap, ptrdiff_t);
457454
break;
458455
#endif
459-
case LM_PHP_INT_T:
460-
i_num = (wide_int) va_arg(ap, zend_long);
461-
break;
462456
}
463457
}
464458
s = ap_php_conv_10(i_num, (*fmt) == 'u', &is_negative,
@@ -504,9 +498,6 @@ static void xbuf_format_converter(void *xbuf, bool is_char, const char *fmt, va_
504498
ui_num = (u_wide_int) va_arg(ap, ptrdiff_t);
505499
break;
506500
#endif
507-
case LM_PHP_INT_T:
508-
ui_num = (u_wide_int) va_arg(ap, zend_ulong);
509-
break;
510501
}
511502
s = ap_php_conv_p2(ui_num, 3, *fmt,
512503
&num_buf[NUM_BUF_SIZE], &s_len);
@@ -547,9 +538,6 @@ static void xbuf_format_converter(void *xbuf, bool is_char, const char *fmt, va_
547538
ui_num = (u_wide_int) va_arg(ap, ptrdiff_t);
548539
break;
549540
#endif
550-
case LM_PHP_INT_T:
551-
ui_num = (u_wide_int) va_arg(ap, zend_ulong);
552-
break;
553541
}
554542
s = ap_php_conv_p2(ui_num, 4, *fmt,
555543
&num_buf[NUM_BUF_SIZE], &s_len);

0 commit comments

Comments
 (0)