Piotr Caban : msvcp90: Don' t crash if NULL is passed to _Strcoll and _Wcscoll.
Module: wine Branch: master Commit: cd6e9bd14137cdf85a6e867126d87d8523ba3cdc URL: http://source.winehq.org/git/wine.git/?a=commit;h=cd6e9bd14137cdf85a6e867126... Author: Piotr Caban <piotr(a)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(a)D@std@@MBEHPBD000(a)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(a)_W@std@@MBEHPB_W000(a)Z */
participants (1)
-
Alexandre Julliard