|
55 | 55 | continue; \
|
56 | 56 | } \
|
57 | 57 |
|
58 |
| -#define MAIL_ASCIIZ_CHECK(str, len) \ |
59 |
| - p = str; \ |
60 |
| - e = p + len; \ |
61 |
| - while ((p = memchr(p, '\0', (e - p)))) { \ |
62 |
| - *p = ' '; \ |
63 |
| - } \ |
64 |
| - |
65 | 58 | extern zend_long php_getuid(void);
|
66 | 59 |
|
67 | 60 | static zend_bool php_mail_build_headers_check_field_value(zval *val)
|
@@ -260,32 +253,26 @@ PHP_FUNCTION(mail)
|
260 | 253 | size_t subject_len, i;
|
261 | 254 | char *force_extra_parameters = INI_STR("mail.force_extra_parameters");
|
262 | 255 | char *to_r, *subject_r;
|
263 |
| - char *p, *e; |
264 | 256 |
|
265 | 257 | ZEND_PARSE_PARAMETERS_START(3, 5)
|
266 |
| - Z_PARAM_STRING(to, to_len) |
267 |
| - Z_PARAM_STRING(subject, subject_len) |
268 |
| - Z_PARAM_STRING(message, message_len) |
| 258 | + Z_PARAM_PATH(to, to_len) |
| 259 | + Z_PARAM_PATH(subject, subject_len) |
| 260 | + Z_PARAM_PATH(message, message_len) |
269 | 261 | Z_PARAM_OPTIONAL
|
270 | 262 | Z_PARAM_ARRAY_HT_OR_STR(headers_ht, headers_str)
|
271 |
| - Z_PARAM_STR(extra_cmd) |
| 263 | + Z_PARAM_PATH_STR(extra_cmd) |
272 | 264 | ZEND_PARSE_PARAMETERS_END();
|
273 | 265 |
|
274 |
| - /* ASCIIZ check */ |
275 |
| - MAIL_ASCIIZ_CHECK(to, to_len); |
276 |
| - MAIL_ASCIIZ_CHECK(subject, subject_len); |
277 |
| - MAIL_ASCIIZ_CHECK(message, message_len); |
278 | 266 | if (headers_str) {
|
279 |
| - MAIL_ASCIIZ_CHECK(ZSTR_VAL(headers_str), ZSTR_LEN(headers_str)); |
| 267 | + if (strlen(ZSTR_VAL(headers_str)) != ZSTR_LEN(headers_str)) { |
| 268 | + zend_argument_value_error(4, "must not contain any null bytes"); |
| 269 | + RETURN_THROWS(); |
| 270 | + } |
280 | 271 | headers_str = php_trim(headers_str, NULL, 0, 2);
|
281 | 272 | } else if (headers_ht) {
|
282 | 273 | headers_str = php_mail_build_headers(headers_ht);
|
283 | 274 | }
|
284 | 275 |
|
285 |
| - if (extra_cmd) { |
286 |
| - MAIL_ASCIIZ_CHECK(ZSTR_VAL(extra_cmd), ZSTR_LEN(extra_cmd)); |
287 |
| - } |
288 |
| - |
289 | 276 | if (to_len > 0) {
|
290 | 277 | to_r = estrndup(to, to_len);
|
291 | 278 | for (; to_len; to_len--) {
|
|
0 commit comments