[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