On 21.04.2016 9:29, Baptiste Daroussin wrote:
>>>> Modified: head/lib/libc/locale/ascii.c
>>>> ==============================================================================
>>>> --- head/lib/libc/locale/ascii.c   Wed Apr 20 20:43:05 2016        
>>>> (r298366)
>>>> +++ head/lib/libc/locale/ascii.c   Wed Apr 20 20:44:30 2016        
>>>> (r298367)
>>>> @@ -133,11 +133,14 @@ _ascii_mbsnrtowcs(wchar_t * __restrict d
>>>>  
>>>>    if (dst == NULL) {
>>>>            s = memchr(*src, '\0', nms);
>>>> +          if (s == NULL)
>>>> +                  return (nms);
>>>> +
>>>>            if (*s & 0x80) {
>>>>                    errno = EILSEQ;
>>>>                    return ((size_t)-1);
>>>>            }
>>>> -          return (s != NULL ? s - *src : nms);
>>>> +          return (s - *src);
>>>>    }
>>>>  
>>>>    s = *src;
>>>>
>>>
>>> The whole code is incorrect, only the very first char is checked, there
>>> must be a loop like in -stable:
>>>
>>>     if (dst == NULL) {
>>>                 for (s = *src; nms > 0 && *s != '\0'; s++, nms--) {
>>>                         if (*s & 0x80) {
>>>                                 errno = EILSEQ;
>>>                                 return ((size_t)-1);
>>>                         }
>>>                 }
>>>                 return (s - *src);
>>>     }
>>>
>>> Since svn history is lost on deleting, I don't know why incorrect
>>> version was committed.
>>>
>>
>> Typo, the very first == the very last, i.e. only NUL char is checked
>> which always pass.
>>
> 
> I have restored the history (I hope correctly)
> 
> Bapt
> 

All the restored history is related to none.c, but ascii.c was made
afterwards a bit differently and transition history between none.c ->
ascii.c is lost in any case somehow.
We still have correct version in -stable.
The diff is attached.
BTW, recent none.c from which ascii.c is made don't have this two
copyrights too:
- * Copyright 2013 Garrett D'Amore <garr...@damore.org>
- * Copyright 2010 Nexenta Systems, Inc.  All rights reserved.
Index: ascii.c
===================================================================
--- ascii.c     (.../head/lib/libc/locale/ascii.c)      (revision 298395)
+++ ascii.c     (.../stable/10/lib/libc/locale/ascii.c) (working copy)
@@ -1,6 +1,4 @@
-/*
- * Copyright 2013 Garrett D'Amore <garr...@damore.org>
- * Copyright 2010 Nexenta Systems, Inc.  All rights reserved.
+/*-
  * Copyright (c) 2002-2004 Tim J. Robbins. All rights reserved.
  * Copyright (c) 1993
  *     The Regents of the University of California.  All rights reserved.
@@ -36,8 +34,6 @@
  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
- *
- * @(#)none.c  8.1 (Berkeley) 6/4/93
  */
 
 #include <sys/cdefs.h>
@@ -65,7 +61,7 @@
                    size_t, size_t, mbstate_t * __restrict);
 
 int
-_ascii_init(struct xlocale_ctype *l, _RuneLocale *rl)
+_ascii_init(struct xlocale_ctype *l,_RuneLocale *rl)
 {
 
        l->__mbrtowc = _ascii_mbrtowc;
@@ -82,6 +78,7 @@
 static int
 _ascii_mbsinit(const mbstate_t *ps __unused)
 {
+
        /*
         * Encoding is not state dependent - we are always in the
         * initial state.
@@ -93,6 +90,7 @@
 _ascii_mbrtowc(wchar_t * __restrict pwc, const char * __restrict s, size_t n,
     mbstate_t * __restrict ps __unused)
 {
+
        if (s == NULL)
                /* Reset to initial shift state (no-op) */
                return (0);
@@ -132,13 +130,11 @@
        size_t nchr;
 
        if (dst == NULL) {
-               s = memchr(*src, '\0', nms);
-               if (s == NULL)
-                       return (nms);
-
-               if (*s & 0x80) {
-                       errno = EILSEQ;
-                       return ((size_t)-1);
+               for (s = *src; nms > 0 && *s != '\0'; s++, nms--) {
+                       if (*s & 0x80) {
+                               errno = EILSEQ;
+                               return ((size_t)-1);
+                       }
                }
                return (s - *src);
        }
@@ -193,3 +189,4 @@
        *src = s;
        return (nchr);
 }
+

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to