[PATCH 3/4] enhance overflow and truncation detection in strncpy and strncat (PR 81117)
Jeff Law
law@redhat.com
Fri Nov 10 00:31:00 GMT 2017
On 11/09/2017 04:44 PM, Martin Sebor wrote:
> Attached is another update to the patch with the above.  While
> going through it again I noticed a couple of opportunities to
> handle ranges so I added those as well.  I have retested the
> patch with GDB and Glibc.  They both require minor changes and
> I will submit patches with those once this work is checked in.
>
> Is this good enough to commit now?
>
> Martin
>
> gcc-81117.diff
>
>
> PR c/81117 - Improve buffer overflow checking in strncpy
>
> ada/ChangeLog:
> PR c/81117
> * adadecode.c (__gnat_decode): Use memcpy instead of strncpy.
> * argv.c (__gnat_fill_env): Same.
>
> fortran/ChangeLog:
> PR c/81117
> * decl.c (build_sym): Use memcpy instead of strncpy.
>
> gcc/ChangeLog:
>
> PR c/81117
> * builtins.c (compute_objsize): Handle arrays that
> compute_builtin_object_size likes to fail for. Make extern.
> * builtins.h (compute_objsize): Declare.
> (check_strncpy_sizes): New function.
> (expand_builtin_strncpy): Call check_strncpy_sizes.
> * gimple-fold.c (gimple_fold_builtin_strncpy): Implement
> -Wstringop-truncation.
> (gimple_fold_builtin_strncat): Same.
> * gimple.c (gimple_build_call_from_tree): Set call location.
> * tree-ssa-strlen.c (strlen_to_stridx): New global variable.
> (maybe_diag_bound_equal_length, is_strlen_related_p): New functions.
> (handle_builtin_stxncpy, handle_builtin_strncat): Same.
> (handle_builtin_strlen): Use strlen_to_stridx.
> (strlen_optimize_stmt): Handle flavors of strncat, strncpy, and
> stpncpy.
> Use strlen_to_stridx.
> (pass_strlen::execute): Release strlen_to_stridx.
> * doc/invoke.texi (-Wsizeof-pointer-memaccess): Document enhancement.
> (-Wstringop-truncation): Document new option.
>
> gcc/c-family/ChangeLog:
>
> PR c/81117
> * c-common.c (catenate_strings): Use memcpy instead of strncpy.
> * c-warn.c (sizeof_pointer_memaccess_warning): Handle arrays.
> * c.opt (-Wstringop-truncation): New option.
>
> gcc/objc/ChangeLog:
>
> PR c/81117
> * objc-encoding.c (encode_type): Use memcpy instead of strncpy.
>
> gcc/testsuite/ChangeLog:
>
> PR c/81117
> * c-c++-common/Wsizeof-pointer-memaccess3.c: New test.
> * c-c++-common/Wstringop-overflow.c: Same.
> * c-c++-common/Wstringop-truncation.c: Same.
> * c-c++-common/Wsizeof-pointer-memaccess2.c: Adjust.
> * c-c++-common/attr-nonstring-2.c: New test.
> * g++.dg/torture/Wsizeof-pointer-memaccess1.C: Adjust.
> * g++.dg/torture/Wsizeof-pointer-memaccess2.C: Same.
> * gcc.dg/torture/pr63554.c: Same.
> * gcc.dg/Walloca-1.c: Disable macro tracking.
OK. Sorry for the long review cycles on this one.
jeff
More information about the Gcc-patches
mailing list