[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;
 }




Reply via email to