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);