]> git.ipfire.org Git - thirdparty/gcc.git/commit - gcc/tree-ssa-strlen.c
PR middle-end/91631 - buffer overflow into an array member of a declared object not...
authorMartin Sebor <msebor@redhat.com>
Thu, 19 Sep 2019 22:15:34 +0000 (22:15 +0000)
committerMartin Sebor <msebor@gcc.gnu.org>
Thu, 19 Sep 2019 22:15:34 +0000 (16:15 -0600)
commit6889a3acfeed47265886676c6d43b04ef799fb82
tree8101bfd6fc153a6707fc453e76507f09e0916c46
parent7d112d6670a0e0e662f8a7e64c33686e475832c8
PR middle-end/91631 - buffer overflow into an array member of a declared object not detected

gcc/ChangeLog:

PR middle-end/91631
* builtins.c (component_size): Correct trailing array computation,
rename to component_ref_size and move...
(compute_objsize): Adjust.
* gimple-ssa-warn-restrict.c (builtin_memref::refsize): New member.
(builtin_access::strict): Do not consider mememmove.
(builtin_access::write_off): New function.
(builtin_memref::builtin_memref): Initialize refsize.
(builtin_memref::set_base_and_offset): Adjust refoff and compute
refsize.
(builtin_memref::offset_out_of_bounds): Use ooboff input values.
Handle refsize.
(builtin_access::builtin_access): Intialize dstoff to destination
refeence offset here instead of in maybe_diag_overlap.  Adjust
referencess even to unrelated objects. Adjust sizrange of bounded
string functions to reflect bound.  For strcat, adjust destination
sizrange by that of source.
(builtin_access::strcat_overlap):  Adjust offsets and sizes
to reflect the increase in destination sizrange above.
(builtin_access::overlap): Do not set dstoff here but instead
in builtin_access::builtin_access.
(check_bounds_or_overlap): Use builtin_access::write_off.
(maybe_diag_access_bounds): Add argument.  Add informational notes.
(dump_builtin_memref, dump_builtin_access): New functions.
* tree.c (component_ref_size): ...to here.
* tree.h (component_ref_size): Declare.
* tree-ssa-strlen (handle_builtin_strcat): Include the terminating
nul in the size of the source string.

gcc/testsuite/ChangeLog:

PR middle-end/91631
* /c-c++-common/Warray-bounds-3.c: Correct expected offsets.
* /c-c++-common/Warray-bounds-4.c: Same.
* gcc.dg/Warray-bounds-39.c: Remove xfails.
* gcc.dg/Warray-bounds-45.c: New test.
* gcc.dg/Warray-bounds-46.c: New test.

From-SVN: r275981
12 files changed:
gcc/ChangeLog
gcc/builtins.c
gcc/gimple-ssa-warn-restrict.c
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/Warray-bounds-3.c
gcc/testsuite/c-c++-common/Warray-bounds-4.c
gcc/testsuite/gcc.dg/Warray-bounds-39.c
gcc/testsuite/gcc.dg/Warray-bounds-45.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/Warray-bounds-46.c [new file with mode: 0644]
gcc/tree-ssa-strlen.c
gcc/tree.c
gcc/tree.h