https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81117

--- Comment #8 from Martin Sebor <msebor at gcc dot gnu.org> ---
Author: msebor
Date: Fri Nov 10 16:35:26 2017
New Revision: 254630

URL: https://gcc.gnu.org/viewcvs?rev=254630&root=gcc&view=rev
Log:
PR c/81117 - Improve buffer overflow checking in 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/ada/ChangeLog:

        PR c/81117
        * ada/adadecode.c (__gnat_decode): Use memcpy instead of strncpy.
        * ada/argv.c (__gnat_fill_arg, __gnat_fill_env): Same.

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/fortran/ChangeLog:

        PR c/81117
        * gcc/fortran/decl.c (build_sym): Use strcpy instead of strncpy.

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.


Added:
    trunk/gcc/testsuite/c-c++-common/Wsizeof-pointer-memaccess3.c
    trunk/gcc/testsuite/c-c++-common/Wstringop-overflow.c
    trunk/gcc/testsuite/c-c++-common/Wstringop-truncation.c
    trunk/gcc/testsuite/c-c++-common/attr-nonstring-1.c
    trunk/gcc/testsuite/c-c++-common/attr-nonstring-2.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/ada/ChangeLog
    trunk/gcc/ada/adadecode.c
    trunk/gcc/ada/argv.c
    trunk/gcc/builtins.c
    trunk/gcc/builtins.h
    trunk/gcc/c-family/ChangeLog
    trunk/gcc/c-family/c-common.c
    trunk/gcc/c-family/c-warn.c
    trunk/gcc/c-family/c.opt
    trunk/gcc/doc/invoke.texi
    trunk/gcc/fortran/ChangeLog
    trunk/gcc/fortran/decl.c
    trunk/gcc/gimple-fold.c
    trunk/gcc/gimple.c
    trunk/gcc/objc/ChangeLog
    trunk/gcc/objc/objc-encoding.c
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/testsuite/c-c++-common/Wsizeof-pointer-memaccess2.c
    trunk/gcc/testsuite/g++.dg/torture/Wsizeof-pointer-memaccess1.C
    trunk/gcc/testsuite/g++.dg/torture/Wsizeof-pointer-memaccess2.C
    trunk/gcc/testsuite/gcc.dg/Walloca-1.c
    trunk/gcc/testsuite/gcc.dg/builtin-stpncpy.c
    trunk/gcc/testsuite/gcc.dg/torture/Wsizeof-pointer-memaccess1.c
    trunk/gcc/testsuite/gcc.dg/torture/pr63554.c
    trunk/gcc/tree-ssa-strlen.c

Reply via email to