You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@stdcxx.apache.org by Martin Sebor <se...@roguewave.com> on 2007/08/14 20:01:01 UTC

Re: svn commit: r565221 - /incubator/stdcxx/trunk/tests/src/char.cpp

faridz@apache.org 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 <Fa...@epam.com>
> 
> 	* 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;
>  }
> 
> 



RE: svn commit: r565221 - /incubator/stdcxx/trunk/tests/src/char.cpp

Posted by Farid Zaripov <Fa...@epam.com>.
> -----Original Message-----
> From: Martin Sebor [mailto:sebor@roguewave.com] 
> Sent: Tuesday, August 14, 2007 9:01 PM
> To: stdcxx-dev@incubator.apache.org
> Subject: Re: svn commit: r565221 - 
> /incubator/stdcxx/trunk/tests/src/char.cpp
> 
> faridz@apache.org 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 <Fa...@epam.com>
> > 
> > 	* 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.)

  Partially :) The 0.char.cpp test issues Access Violation in
12d build on MSVC.

Farid.