]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
more: blacklist unsigned integer overflow [AddressSanitizer]
authorSami Kerola <kerolasa@iki.fi>
Wed, 17 Dec 2014 22:57:02 +0000 (22:57 +0000)
committerKarel Zak <kzak@redhat.com>
Fri, 19 Dec 2014 10:32:38 +0000 (11:32 +0100)
The mbrtowc() return values are overflowing by design.

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
text-utils/more.c

index 8c0853c14253caf5d18fbefe5fe1cd6e8e1aa233..a75cd7a803fef53188b5ed65a8529f94b7a85425 100644 (file)
@@ -1091,6 +1091,16 @@ void clreos(void)
        my_putstring(EodClr);
 }
 
+
+static UL_ASAN_BLACKLIST xmbrtowc(wchar_t *wc, const char *s, size_t n,
+                                 mbstate_t *mbstate)
+{
+       const size_t mblength = mbrtowc(&wc, s, n, &mbstate);
+       if (mblength == (size_t)-2 || mblength == (size_t)-1)
+               return 1;
+       return mblength;
+}
+
 /* Print a buffer of n characters */
 void prbuf(register char *s, register int n)
 {
@@ -1130,10 +1140,7 @@ void prbuf(register char *s, register int n)
                                memset(&mbstate, '\0', sizeof(mbstate_t));
                                s--;
                                n++;
-                               mblength = mbrtowc(&wc, s, n, &mbstate);
-                               if (mblength == (size_t)-2
-                                   || mblength == (size_t)-1)
-                                       mblength = 1;
+                               mblength = xmbrtowc(&wc, s, n, &mbstate);
                                while (mblength--)
                                        putchar(*s++);
                                n += mblength;