Module: wine Branch: master Commit: 28184600e74972c0cc5268c79e2b22da3643ac6c URL: http://source.winehq.org/git/wine.git/?a=commit;h=28184600e74972c0cc5268c79e...
Author: Akihiro Sagawa sagawa.aki@gmail.com Date: Wed Nov 30 22:34:09 2011 +0900
msvcrt: Add validity checks for _mbstrlen_l.
---
dlls/msvcrt/mbcs.c | 15 +++++++-------- 1 files changed, 7 insertions(+), 8 deletions(-)
diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c index ac45881..a8cd237 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -1858,15 +1858,14 @@ MSVCRT_size_t CDECL _mbstrlen_l(const char* str, MSVCRT__locale_t locale) locinfo = locale->locinfo;
if(locinfo->mb_cur_max > 1) { - MSVCRT_size_t len = 0; - while(*str) { - /* FIXME: According to the documentation we are supposed to test for - * multi-byte character validity. Whatever that means - */ - str += MSVCRT_isleadbyte(*str) ? 2 : 1; - len++; + MSVCRT_size_t len; + len = MultiByteToWideChar(locinfo->lc_codepage, MB_ERR_INVALID_CHARS, + str, -1, NULL, 0); + if (!len) { + *MSVCRT__errno() = MSVCRT_EILSEQ; + return -1; } - return len; + return len - 1; }
return strlen(str);