[EMAIL PROTECTED] wrote:
Author: faridz
Date: Sun Aug 12 18:47:17 2007
New Revision: 565221
URL: http://svn.apache.org/viewvc?view=rev&rev=565221
Log:
2007-08-13 Farid Zaripov <[EMAIL PROTECTED]>
* char.cpp (rw_widen): Don't write after end of dst.
Why not? I.e., what was wrong with the code before the change?
If there is a bug, does the 0.char.cpp test catch it? (If not,
it should be enhanced.)
Martin
Modified:
incubator/stdcxx/trunk/tests/src/char.cpp
Modified: incubator/stdcxx/trunk/tests/src/char.cpp
URL:
http://svn.apache.org/viewvc/incubator/stdcxx/trunk/tests/src/char.cpp?view=diff&rev=565221&r1=565220&r2=565221
==============================================================================
--- incubator/stdcxx/trunk/tests/src/char.cpp (original)
+++ incubator/stdcxx/trunk/tests/src/char.cpp Sun Aug 12 18:47:17 2007
@@ -501,7 +501,7 @@
{
// compute the length of src if not specified
if (_RWSTD_SIZE_MAX == len)
- len = src ? strlen (src) + 1 : 0;
+ len = src ? strlen (src) : 0;
if (len) {
RW_ASSERT (0 != dst);
@@ -509,6 +509,7 @@
if (src) {
// copy src into dst
memcpy (dst, src, len);
+ dst [len] = '\0';
}
else {
// set dst to all NUL
@@ -850,18 +851,16 @@
{
// compute the length of src if not specified
if (_RWSTD_SIZE_MAX == len)
- len = src ? strlen (src) + 1 : 0;
+ len = src ? strlen (src) : 0;
// if len is non-zero dst must be non-0 as well
RW_ASSERT (0 == len || 0 != dst);
- if (len) {
- RW_ASSERT (0 != dst);
-
+ if (dst) {
if (src) {
// widen src into dst one element at a time
for (size_t i = 0; ; ++i) {
- if (i == len - 1) {
+ if (i == len) {
dst [i] = L'\0';
break;
}
@@ -874,8 +873,6 @@
memset (dst, 0, len * sizeof *dst);
}
}
- else if (dst)
- *dst = L'\0';
return dst;
}
@@ -1002,18 +999,16 @@
{
// compute the length of src if not specified
if (_RWSTD_SIZE_MAX == len)
- len = src ? strlen (src) + 1 : 0;
+ len = src ? strlen (src) : 0;
// if len is non-zero dst must be non-0 as well
RW_ASSERT (0 == len || 0 != dst);
- if (len) {
- RW_ASSERT (0 != dst);
-
+ if (dst) {
if (src) {
// widen src into dst one element at a time
for (size_t i = 0; ; ++i) {
- if (i == len - 1) {
+ if (i == len) {
dst [i] = UserChar::eos ();
break;
}
@@ -1027,8 +1022,6 @@
memset (dst, 0, len * sizeof *dst);
}
}
- else if (dst)
- *dst = UserChar::eos ();
return dst;
}