Piotr Caban : msvcrt: Improve error handling in wcsrtombs function.
Alexandre Julliard
julliard at winehq.org
Tue Sep 24 15:16:48 CDT 2013
Module: wine
Branch: master
Commit: b50833389ee2038337947e0220175920c2e36415
URL: http://source.winehq.org/git/wine.git/?a=commit;h=b50833389ee2038337947e0220175920c2e36415
Author: Piotr Caban <piotr at codeweavers.com>
Date: Tue Sep 24 15:51:48 2013 +0200
msvcrt: Improve error handling in wcsrtombs function.
---
dlls/msvcrt/wcs.c | 16 +++++++++++++---
1 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/dlls/msvcrt/wcs.c b/dlls/msvcrt/wcs.c
index d1e738f..1cf2276 100644
--- a/dlls/msvcrt/wcs.c
+++ b/dlls/msvcrt/wcs.c
@@ -407,8 +407,10 @@ static MSVCRT_size_t MSVCRT_wcsrtombs_l(char *mbstr, const MSVCRT_wchar_t **wcst
if(!mbstr) {
tmp = WideCharToMultiByte(locinfo->lc_codepage, WC_NO_BEST_FIT_CHARS,
*wcstr, -1, NULL, 0, NULL, &used_default)-1;
- if(used_default)
+ if(!tmp || used_default) {
+ *MSVCRT__errno() = MSVCRT_EILSEQ;
return -1;
+ }
return tmp;
}
@@ -418,8 +420,10 @@ static MSVCRT_size_t MSVCRT_wcsrtombs_l(char *mbstr, const MSVCRT_wchar_t **wcst
size = WideCharToMultiByte(locinfo->lc_codepage, WC_NO_BEST_FIT_CHARS,
*wcstr, 1, buf, 3, NULL, &used_default);
- if(used_default)
+ if(!size || used_default) {
+ *MSVCRT__errno() = MSVCRT_EILSEQ;
return -1;
+ }
if(tmp+size > count)
return tmp;
@@ -476,6 +480,8 @@ static int MSVCRT_wcsrtombs_s_l(MSVCRT_size_t *ret, char *mbstr,
if(!mbstr && !size && wcstr) {
conv = MSVCRT_wcsrtombs_l(NULL, wcstr, 0, locale);
+ if(conv == -1)
+ return *MSVCRT__errno();
if(ret)
*ret = conv+1;
return 0;
@@ -492,7 +498,11 @@ static int MSVCRT_wcsrtombs_s_l(MSVCRT_size_t *ret, char *mbstr,
conv = count;
conv = MSVCRT_wcsrtombs_l(mbstr, wcstr, conv, locale);
- if(conv<size)
+ if(conv == -1) {
+ if(size)
+ mbstr[0] = '\0';
+ return *MSVCRT__errno();
+ }else if(conv < size)
mbstr[conv++] = '\0';
else if(conv==size && (count==MSVCRT__TRUNCATE || mbstr[conv-1]=='\0'))
mbstr[conv-1] = '\0';
More information about the wine-cvs
mailing list