Piotr Caban : msvcp90: Don' t crash if NULL is passed to _Strcoll and _Wcscoll.
Alexandre Julliard
julliard at winehq.org
Wed Dec 21 12:38:09 CST 2011
Module: wine
Branch: master
Commit: cd6e9bd14137cdf85a6e867126d87d8523ba3cdc
URL: http://source.winehq.org/git/wine.git/?a=commit;h=cd6e9bd14137cdf85a6e867126d87d8523ba3cdc
Author: Piotr Caban <piotr at codeweavers.com>
Date: Wed Dec 21 15:59:50 2011 +0100
msvcp90: Don't crash if NULL is passed to _Strcoll and _Wcscoll.
---
dlls/msvcp90/locale.c | 19 +++++++++++++++++--
1 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/dlls/msvcp90/locale.c b/dlls/msvcp90/locale.c
index 582d96f..ad72732 100644
--- a/dlls/msvcp90/locale.c
+++ b/dlls/msvcp90/locale.c
@@ -34,6 +34,7 @@ char* __cdecl _Getdays(void);
char* __cdecl _Getmonths(void);
void* __cdecl _Gettnames(void);
unsigned int __cdecl ___lc_codepage_func(void);
+LCID* __cdecl ___lc_handle_func(void);
typedef int category;
@@ -746,8 +747,15 @@ MSVCP_size_t __cdecl collate_char__Getcat(const locale_facet **facet, const loca
int __cdecl _Strcoll(const char *first1, const char *last1, const char *first2,
const char *last2, const _Collvec *coll)
{
+ LCID lcid;
+
TRACE("(%s %s)\n", debugstr_an(first1, last1-first1), debugstr_an(first2, last2-first2));
- return CompareStringA(coll->handle, 0, first1, last1-first1, first2, last2-first2)-2;
+
+ if(coll)
+ lcid = coll->handle;
+ else
+ lcid = ___lc_handle_func()[LC_COLLATE];
+ return CompareStringA(lcid, 0, first1, last1-first1, first2, last2-first2)-2;
}
/* ?do_compare@?$collate at D@std@@MBEHPBD000 at Z */
@@ -992,8 +1000,15 @@ MSVCP_size_t __cdecl collate_wchar__Getcat(const locale_facet **facet, const loc
int __cdecl _Wcscoll(const wchar_t *first1, const wchar_t *last1, const wchar_t *first2,
const wchar_t *last2, const _Collvec *coll)
{
+ LCID lcid;
+
TRACE("(%s %s)\n", debugstr_wn(first1, last1-first1), debugstr_wn(first2, last2-first2));
- return CompareStringW(coll->handle, 0, first1, last1-first1, first2, last2-first2)-2;
+
+ if(coll)
+ lcid = coll->handle;
+ else
+ lcid = ___lc_handle_func()[LC_COLLATE];
+ return CompareStringW(lcid, 0, first1, last1-first1, first2, last2-first2)-2;
}
/* ?do_compare@?$collate at _W@std@@MBEHPB_W000 at Z */
More information about the wine-cvs
mailing list