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