bug-libunistring
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[bug-libunistring] Unistring 0.9.10 and Undefined Behavior sanitizer fin


From: Jeffrey Walton
Subject: [bug-libunistring] Unistring 0.9.10 and Undefined Behavior sanitizer findings
Date: Thu, 7 Mar 2019 02:10:15 -0500

I used CFLAGS="-DNDEBUG -g2 -O1 -fsanitize=undefined". I built the
library, then ran a 'make test V=1'. The output presented to the user
looks OK. However, it looks like UBsan found some undefined behavior:

libunistring-0.9.10$ grep -IR 'runtime error'
tests/test-u8-width-linebreaks.log:unilbrk/u8-possible-linebreaks.c:49:3:
runtime error: null pointer passed as argument 1, which is declared to
never be null
tests/test-u32-to-u8.log:unistr/u8-cmp.c:38:10: runtime error: null
pointer passed as argument 2, which is declared to never be null
tests/test-numeric.log:unictype/numeric.c:52:54: runtime error: left
shift of 34927 by 16 places cannot be represented in type 'int'
tests/test-nfkc.log:unistr/u8-cmp.c:38:10: runtime error: null pointer
passed as argument 2, which is declared to never be null
tests/test-u8-tolower.log:unistr/u8-cmp.c:38:10: runtime error: null
pointer passed as argument 2, which is declared to never be null
tests/test-u16-to-u8.log:unistr/u8-cmp.c:38:10: runtime error: null
pointer passed as argument 2, which is declared to never be null
tests/test-nfkd.log:unistr/u8-cmp.c:38:10: runtime error: null pointer
passed as argument 2, which is declared to never be null
tests/test-u8-casefold.log:unistr/u8-cmp.c:38:10: runtime error: null
pointer passed as argument 2, which is declared to never be null
tests/unicase/test-ulc-casecmp2.sh.log:uniconv/u8-conv-from-enc.c:89:7:
runtime error: null pointer passed as argument 2, which is declared to
never be null
tests/unicase/test-ulc-casecoll2.sh.log:uniconv/u8-conv-from-enc.c:89:7:
runtime error: null pointer passed as argument 2, which is declared to
never be null
tests/test-nfc.log:unistr/u8-cmp.c:38:10: runtime error: null pointer
passed as argument 2, which is declared to never be null
tests/test-u8-totitle.log:unistr/u8-cmp.c:38:10: runtime error: null
pointer passed as argument 2, which is declared to never be null
tests/test-nfd.log:unistr/u8-cmp.c:38:10: runtime error: null pointer
passed as argument 2, which is declared to never be null
tests/test-u16-possible-linebreaks.log:unilbrk/u16-possible-linebreaks.c:49:3:
runtime error: null pointer passed as argument 1, which is declared to
never be null
tests/test-u16-width-linebreaks.log:unilbrk/u16-possible-linebreaks.c:49:3:
runtime error: null pointer passed as argument 1, which is declared to
never be null
tests/test-u8-toupper.log:unistr/u8-cmp.c:38:10: runtime error: null
pointer passed as argument 2, which is declared to never be null
tests/test-u8-possible-linebreaks.log:unilbrk/u8-possible-linebreaks.c:49:3:
runtime error: null pointer passed as argument 1, which is declared to
never be null

"runtime error: null pointer passed as argument <N>" is generally
benign under glibc, but musl is a different story. Musl believes in
early failures, and probably will deference the NULL pointer and
crash.

Be careful of these in the long run. The compiler is free to drop the
code because it is undefined behavior. My personal experience is,
little findings like these are the cause of obscure failures, like
self test failures on 32-bit ARM with GCC 5.0-5.2, while other
platforms will be OK.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]