Re: oprofile - fix compiler warnings seen with newer gcc

William Cohen <[email protected]> Tue, 30 Apr 2019 11:51:17 -0400
Newsgroups gmane.linux.oprofile
Message-ID <[email protected]>
On 4/29/19 6:18 PM, will schmidt wrote:
> Hi, 
> 
> This is intended to fix some compiler warnings noted when building oprofile with gcc 9.0.1
>     
>      * libutil++/tests/utility_tests.cpp:  Remove deprecated dynamic exception
>        specifications. (gcc -Werror=deprecated).
>      * libpe_utils/op_pe_utils.cpp: strncpy already copies the size of the
>        string, limit it to the size of the destination.
>      * opjitconf/opjitconv.c:  convert sprintf to snprintf and check the return
>        length from the call to ensure we do not overrun our buffer.
>        (gcc -Werror=format-overflow)
> 
> ---
> Thanks
> -Will

Hi Will,

The changes look fine.  There are committed to the mainline oprofile git repository.  Thanks,  -Will Cohen

> 
> 
> diff --git a/libpe_utils/op_pe_utils.cpp b/libpe_utils/op_pe_utils.cpp
> index 2cae784..d545cee 100644
> --- a/libpe_utils/op_pe_utils.cpp
> +++ b/libpe_utils/op_pe_utils.cpp
> @@ -652,11 +652,11 @@ static bool _get_codes_for_match(unsigned int pfm_idx, const char name[],
>  			strcpy(evt_name ,"PM_CYC") ;
>  		} else if (strstr(event.name, "_GRP")) {
>  			string str = event.name;
>  			strncpy(evt_name, event.name, str.rfind("_GRP"));
>  		} else {
> -			strncpy(evt_name, event.name, strlen(event.name));
> +			strncpy(evt_name, event.name, strlen(evt_name));
>  		}
>  
>  		/* Events where the "_EDGE_COUNT" suffix has been appended to a
>  		 * real native event name are pseudo events (events that have
>  		 * not been formally defined in processor documentation), where
> @@ -732,11 +732,11 @@ static bool _op_get_event_codes(vector<operf_event_t> * evt_vec)
>  			strcpy(evt_name ,"PM_CYC") ;
>  		} else if (strstr(event.name, "_GRP")) {
>  			string str = event.name;
>  			strncpy(evt_name, event.name, str.rfind("_GRP"));
>  		} else {
> -			strncpy(evt_name, event.name, strlen(event.name));
> +			strncpy(evt_name, event.name, sizeof(evt_name));
>  		}
>  
>  		/* Events where the "_EDGE_COUNT" suffix has been appended to a
>  		 * real native event name are pseudo events (events that have
>  		 * not been formally defined in processor documentation), where
> diff --git a/libutil++/tests/utility_tests.cpp b/libutil++/tests/utility_tests.cpp
> index 3955fd0..2f8286f 100644
> --- a/libutil++/tests/utility_tests.cpp
> +++ b/libutil++/tests/utility_tests.cpp
> @@ -19,17 +19,17 @@
>  using namespace std;
>  
>  static int nb_new;
>  static int nb_new_array;
>  
> -void* operator new(size_t size) throw(bad_alloc)
> +void* operator new(size_t size)
>  {
>  	nb_new++;
>  	return malloc(size);
>  }
>  
> -void* operator new[](size_t size) throw(bad_alloc)
> +void* operator new[](size_t size)
>  {
>  	nb_new_array++;
>  	return malloc(size);
>  }
>  
> diff --git a/opjitconv/opjitconv.c b/opjitconv/opjitconv.c
> index 207054a..c55d8b1 100644
> --- a/opjitconv/opjitconv.c
> +++ b/opjitconv/opjitconv.c
> @@ -720,12 +720,12 @@ static int op_process_jit_dumpfiles(char const * session_dir,
>  	
>  rm_tmp:
>  	/* Delete temporary working directory with all its files
>  	 * (i.e. dump and ELF file).
>  	 */
> -	sprintf(sys_cmd_buffer, "/bin/rm -rf '%s'", tmp_conv_dir);
> -	if (system(sys_cmd_buffer) != 0) {
> +	retlen=snprintf(sys_cmd_buffer,sizeof(sys_cmd_buffer), "/bin/rm -rf '%s'", tmp_conv_dir);
> +	if ((retlen <=0 ) || (system(sys_cmd_buffer) != 0)) {
>  		printf("opjitconv: Removing temporary working directory failed.\n");
>  		rc = OP_JIT_CONV_TMPDIR_NOT_REMOVED;
>  	}
>  	
>  out:
> 
> 
> 
> _______________________________________________
> oprofile-list mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/oprofile-list
>