Module: wine Branch: master Commit: f906be9ef46635e55d96944de0e45b5618c7e979 URL: http://source.winehq.org/git/wine.git/?a=commit;h=f906be9ef46635e55d96944de0...
Author: Piotr Caban piotr@codeweavers.com Date: Tue Oct 15 16:29:00 2013 +0200
msvcrt: Don't validate parameters in _itoa function.
---
dlls/msvcrt/string.c | 31 ++++++++++++++++++------------- dlls/msvcrt/tests/string.c | 5 +++++ 2 files changed, 23 insertions(+), 13 deletions(-)
diff --git a/dlls/msvcrt/string.c b/dlls/msvcrt/string.c index a6b328b..10fb35f 100644 --- a/dlls/msvcrt/string.c +++ b/dlls/msvcrt/string.c @@ -980,10 +980,7 @@ unsigned __int64 CDECL MSVCRT_strtoui64(const char *nptr, char **endptr, int bas return MSVCRT_strtoui64_l(nptr, endptr, base, NULL); }
-/********************************************************************* - * _ltoa_s (MSVCRT.@) - */ -int CDECL _ltoa_s(MSVCRT_long value, char *str, MSVCRT_size_t size, int radix) +static int ltoa_helper(MSVCRT_long value, char *str, MSVCRT_size_t size, int radix) { MSVCRT_ulong val; unsigned int digit; @@ -991,14 +988,6 @@ int CDECL _ltoa_s(MSVCRT_long value, char *str, MSVCRT_size_t size, int radix) char buffer[33], *pos; size_t len;
- if (!MSVCRT_CHECK_PMT(str != NULL)) return MSVCRT_EINVAL; - if (!MSVCRT_CHECK_PMT(size > 0)) return MSVCRT_EINVAL; - if (!MSVCRT_CHECK_PMT(radix >= 2 && radix <= 36)) - { - str[0] = '\0'; - return MSVCRT_EINVAL; - } - if (value < 0 && radix == 10) { is_negative = TRUE; @@ -1056,6 +1045,22 @@ int CDECL _ltoa_s(MSVCRT_long value, char *str, MSVCRT_size_t size, int radix) }
/********************************************************************* + * _ltoa_s (MSVCRT.@) + */ +int CDECL _ltoa_s(MSVCRT_long value, char *str, MSVCRT_size_t size, int radix) +{ + if (!MSVCRT_CHECK_PMT(str != NULL)) return MSVCRT_EINVAL; + if (!MSVCRT_CHECK_PMT(size > 0)) return MSVCRT_EINVAL; + if (!MSVCRT_CHECK_PMT(radix >= 2 && radix <= 36)) + { + str[0] = '\0'; + return MSVCRT_EINVAL; + } + + return ltoa_helper(value, str, size, radix); +} + +/********************************************************************* * _ltow_s (MSVCRT.@) */ int CDECL _ltow_s(MSVCRT_long value, MSVCRT_wchar_t *str, MSVCRT_size_t size, int radix) @@ -1143,7 +1148,7 @@ int CDECL _itoa_s(int value, char *str, MSVCRT_size_t size, int radix) */ char* CDECL _itoa(int value, char *str, int radix) { - return _itoa_s(value, str, MSVCRT_SIZE_MAX, radix) ? NULL : str; + return ltoa_helper(value, str, MSVCRT_SIZE_MAX, radix) ? NULL : str; }
/********************************************************************* diff --git a/dlls/msvcrt/tests/string.c b/dlls/msvcrt/tests/string.c index 3877d18..d778586 100644 --- a/dlls/msvcrt/tests/string.c +++ b/dlls/msvcrt/tests/string.c @@ -1882,6 +1882,11 @@ static void test__itoa_s(void) ok(!strcmp(buffer, "-12345678"), "Expected output buffer string to be "-12345678", got "%s"\n", buffer); + + itoa(100, buffer, 100); + ok(!strcmp(buffer, "10"), + "Expected output buffer string to be "10", got "%s"\n", buffer); + if (p_set_invalid_parameter_handler) ok(p_set_invalid_parameter_handler(NULL) == test_invalid_parameter_handler, "Cannot reset invalid parameter handler\n");