diff options
| -rw-r--r-- | ifilter.c | 9 |
1 files changed, 8 insertions, 1 deletions
| @@ -34,6 +34,13 @@ | |||
| 34 | 34 | ||
| 35 | static void (*orig_register_server_variables)(zval *track_vars_array TSRMLS_DC) = NULL; | 35 | static void (*orig_register_server_variables)(zval *track_vars_array TSRMLS_DC) = NULL; |
| 36 | 36 | ||
| 37 | #if !HAVE_STRNLEN | ||
| 38 | static size_t strnlen(const char *s, size_t maxlen) { | ||
| 39 | char *r = memchr(s, '\0', maxlen); | ||
| 40 | return r ? r-s : maxlen; | ||
| 41 | } | ||
| 42 | #endif | ||
| 43 | |||
| 37 | 44 | ||
| 38 | /* {{{ normalize_varname | 45 | /* {{{ normalize_varname |
| 39 | */ | 46 | */ |
| @@ -590,7 +597,7 @@ unsigned int suhosin_input_filter(int arg, char *var, char **val, unsigned int v | |||
| 590 | 597 | ||
| 591 | /* Check if variable value is truncated by a \0 */ | 598 | /* Check if variable value is truncated by a \0 */ |
| 592 | 599 | ||
| 593 | if (val && *val && val_len != strlen(*val)) { | 600 | if (val && *val && val_len != strnlen(*val, val_len)) { |
| 594 | 601 | ||
| 595 | if (SUHOSIN_G(disallow_nul)) { | 602 | if (SUHOSIN_G(disallow_nul)) { |
| 596 | suhosin_log(S_VARS, "ASCII-NUL chars not allowed within request variables - dropped variable '%s'", var); | 603 | suhosin_log(S_VARS, "ASCII-NUL chars not allowed within request variables - dropped variable '%s'", var); |
