Author: sebor Date: Fri Sep 5 09:00:22 2008 New Revision: 692472 URL: http://svn.apache.org/viewvc?rev=692472&view=rev Log: 2008-09-05 Martin Sebor <[EMAIL PROTECTED]>
STDCXX-1010 * src/collate.cpp [_RWSTD_OS_SUNOS] (__rw_strnxfrm): Passed NULL to strxfrm() on Solaris to avoid memory corruption due to a bug in some releases of the OS. [_RWSTD_OS_SUNOS] (__rw_wcsnxfrm): Same but for wcsxfrm(). Modified: stdcxx/branches/4.2.x/src/collate.cpp Modified: stdcxx/branches/4.2.x/src/collate.cpp URL: http://svn.apache.org/viewvc/stdcxx/branches/4.2.x/src/collate.cpp?rev=692472&r1=692471&r2=692472&view=diff ============================================================================== --- stdcxx/branches/4.2.x/src/collate.cpp (original) +++ stdcxx/branches/4.2.x/src/collate.cpp Fri Sep 5 09:00:22 2008 @@ -522,10 +522,17 @@ src += (last - src) + 1; } +#ifdef _RWSTD_OS_SUNOS + // Solaris 10u5 on AMD64 overwrites memory past the end of + // just_in_case_buf[8], to avoid this, pass a null pointer + char* const just_in_case_buf = 0; +#else // provide a destination buffer to strxfrm() in case // it's buggy (such as MSVC's) and tries to write to // the buffer even if it's 0 char just_in_case_buf [8]; +#endif + const _RWSTD_SIZE_T dst_size = strxfrm (just_in_case_buf, psrc, 0); // check for strxfrm() errors @@ -724,10 +731,16 @@ src += (last - src) + 1; } +#ifdef _RWSTD_OS_SUNOS + // just in case Solaris wcsxfrm() has the same bug + // as its strxfrm() (see above) + wchar_t* const just_in_case_buf = 0; +#else // provide a destination buffer to strxfrm() in case // it's buggy (such as MSVC's) and tries to write to // the buffer even if it's 0 wchar_t just_in_case_buf [8]; +#endif const _RWSTD_SIZE_T dst_size = _RWSTD_WCSXFRM (just_in_case_buf, psrc, 0);