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.