Paul Eggert wrote:
> * tests/test-mcel.c (main): Don’t overrun test input buffer.

Could this bug have been detected with the "usual tools"?

* Valgrind: no.
* gcc -fsanitize=undefined: no
* clang 
-fsanitize=undefined,signed-integer-overflow,shift,integer-divide-by-zero 
-fno-sanitize=pointer-overflow: no
* gcc -fsanitize=address: yes, see below
* clang -fsanitize=address: yes, see below


Output from gcc -fsanitize=address -O1 -fno-omit-frame-pointer -ggdb:

ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7fffa4e73f83 at pc 
0x5584972d903a bp 0x7fffa4e73e40 sp 0x7fffa4e73e30
READ of size 1 at 0x7fffa4e73f83 thread T0
    #0 0x5584972d9039 in mcel_scant ../../gltests/../gllib/mcel.h:280
    #1 0x5584972d9039 in main ../../gltests/test-mcel.c:128
    #2 0x7f5bbdce4d8f in __libc_start_call_main 
../sysdeps/nptl/libc_start_call_main.h:58
    #3 0x7f5bbdce4e3f in __libc_start_main_impl ../csu/libc-start.c:392
    #4 0x5584972d8264 in _start 
(/GNULIB/testdir5/build-64/gltests/test-mcel+0x1264)

Address 0x7fffa4e73f83 is located in stack of thread T0 at offset 227 in frame
    #0 0x5584972d8342 in main ../../gltests/test-mcel.c:48

  This frame has 9 object(s):
    [32, 36) 'ch' (line 117)
    [48, 52) 'ch'
    [64, 68) 'ch'
    [80, 84) 'ch'
    [96, 104) 'mbs' (line 116)
    [128, 136) 'mbs'
    [160, 168) 'mbs'
    [192, 200) 'mbs'
    [224, 227) 'ijk' (line 115) <== Memory access at offset 227 overflows this 
variable
HINT: this may be a false positive if your program uses some custom stack 
unwind mechanism, swapcontext or vfork
      (longjmp and C++ exceptions *are* supported)
SUMMARY: AddressSanitizer: stack-buffer-overflow 
../../gltests/../gllib/mcel.h:280 in mcel_scant


Output from clang -fsanitize=address -O1 -fno-omit-frame-pointer -ggdb:

ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7fc857f000b3 at pc 
0x5627c5eae105 bp 0x7ffc1be765b0 sp 0x7ffc1be765a8
READ of size 1 at 0x7fc857f000b3 thread T0
    #0 0x5627c5eae104 in mcel_scant 
/GNULIB/testdir5/build-64-clang/gltests/../../gltests/../gllib/mcel.h:280:12
    #1 0x5627c5eae104 in main 
/GNULIB/testdir5/build-64-clang/gltests/../../gltests/test-mcel.c:128:26
    #2 0x7fc859aebd8f in __libc_start_call_main 
csu/../sysdeps/nptl/libc_start_call_main.h:58:16
    #3 0x7fc859aebe3f in __libc_start_main csu/../csu/libc-start.c:392:3
    #4 0x5627c5dda2f4 in _start 
(/GNULIB/testdir5/build-64-clang/gltests/test-mcel+0x1e2f4)

Address 0x7fc857f000b3 is located in stack of thread T0 at offset 179 in frame
    #0 0x5627c5ead20f in main 
/GNULIB/testdir5/build-64-clang/gltests/../../gltests/test-mcel.c:48

  This frame has 9 object(s):
    [32, 40) 'mbs.i.i.i'
    [64, 68) 'ch.i.i.i'
    [80, 88) 'mbs.i.i'
    [112, 116) 'ch.i.i'
    [128, 136) 'mbs.i'
    [160, 164) 'ch.i'
    [176, 179) 'ijk' (line 115) <== Memory access at offset 179 overflows this 
variable
    [192, 200) 'mbs' (line 116)
    [224, 228) 'ch365' (line 117)
HINT: this may be a false positive if your program uses some custom stack 
unwind mechanism, swapcontext or vfork
      (longjmp and C++ exceptions *are* supported)
SUMMARY: AddressSanitizer: stack-buffer-overflow 
/GNULIB/testdir5/build-64-clang/gltests/../../gltests/../gllib/mcel.h:280:12 in 
mcel_scant




Reply via email to