oprofile - fix compiler warnings seen with newer gcc

will schmidt <[email protected]> Mon, 29 Apr 2019 17:18:19 -0500
Newsgroups gmane.linux.oprofile
Message-ID <[email protected]>
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


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: