From 1e58920b4ddf120e815ad1f4316d70171c39bcf2 Mon Sep 17 00:00:00 2001 From: Jeff Squyres Date: Thu, 12 Feb 2015 08:48:09 -0800 Subject: [PATCH] *info param.c: use stack string buffers Coverity identified that we treated the possibility that one of the message buffers could be NULL in some places (because strdup() could fail), but not in others. So just use stack buffers that will never be NULL. This was CID 1269914. --- ompi/tools/ompi_info/param.c | 31 ++++++++++++++++--------------- oshmem/tools/oshmem_info/param.c | 31 ++++++++++++++++--------------- 2 files changed, 32 insertions(+), 30 deletions(-) diff --git a/ompi/tools/ompi_info/param.c b/ompi/tools/ompi_info/param.c index a9ba26324d..885e105137 100644 --- a/ompi/tools/ompi_info/param.c +++ b/ompi/tools/ompi_info/param.c @@ -197,6 +197,7 @@ void ompi_info_do_config(bool want_all) /* Build a string describing what level of compliance the mpi_f08 module has */ + char f08_msg[1024]; if (OMPI_BUILD_FORTRAN_USEMPIF08_BINDINGS) { /* Do we have everything? (not including PROTECTED, which @@ -209,38 +210,41 @@ void ompi_info_do_config(bool want_all) OMPI_FORTRAN_HAVE_PROCEDURE && OMPI_FORTRAN_HAVE_C_FUNLOC && OMPI_FORTRAN_NEED_WRAPPER_ROUTINES) { - fortran_usempif08_compliance = strdup("The mpi_f08 module is available, and is fully compliant. w00t!"); + fortran_usempif08_compliance = "The mpi_f08 module is available, and is fully compliant. w00t!"; } else { - char f08[1024]; int first = 1; - snprintf(f08, sizeof(f08), + snprintf(f08_msg, sizeof(f08_msg), "The mpi_f08 module is available, but due to limitations in the %s compiler, does not support the following: ", OMPI_FC); if (!OMPI_BUILD_FORTRAN_F08_SUBARRAYS) { - append(f08, sizeof(f08), &first, "array subsections"); + append(f08_msg, sizeof(f08_msg), &first, "array subsections"); } if (!OMPI_FORTRAN_HAVE_PRIVATE) { - append(f08, sizeof(f08), &first, "private MPI_Status members"); + append(f08_msg, sizeof(f08_msg), &first, + "private MPI_Status members"); } if (!OMPI_FORTRAN_HAVE_ABSTRACT) { - append(f08, sizeof(f08), &first, "ABSTRACT INTERFACE function pointers"); + append(f08_msg, sizeof(f08_msg), &first, + "ABSTRACT INTERFACE function pointers"); } if (!OMPI_FORTRAN_HAVE_ASYNCHRONOUS) { - append(f08, sizeof(f08), &first, "Fortran '08-specified ASYNCHRONOUS behavior"); + append(f08_msg, sizeof(f08_msg), &first, + "Fortran '08-specified ASYNCHRONOUS behavior"); } if (!OMPI_FORTRAN_HAVE_PROCEDURE) { - append(f08, sizeof(f08), &first, "PROCEDUREs"); + append(f08_msg, sizeof(f08_msg), &first, "PROCEDUREs"); } if (!OMPI_FORTRAN_HAVE_C_FUNLOC) { - append(f08, sizeof(f08), &first, "C_FUNLOCs"); + append(f08_msg, sizeof(f08_msg), &first, "C_FUNLOCs"); } if (OMPI_FORTRAN_NEED_WRAPPER_ROUTINES) { - append(f08, sizeof(f08), &first, "direct passthru (where possible) to underlying Open MPI's C functionality"); + append(f08_msg, sizeof(f08_msg), &first, + "direct passthru (where possible) to underlying Open MPI's C functionality"); } - fortran_usempif08_compliance = strdup(f08); + fortran_usempif08_compliance = f08_msg; } } else { - fortran_usempif08_compliance = strdup("The mpi_f08 module was not built"); + fortran_usempif08_compliance = "The mpi_f08 module was not built"; } java = OMPI_WANT_JAVA_BINDINGS ? "yes" : "no"; @@ -329,9 +333,6 @@ void ompi_info_do_config(bool want_all) fortran_usempif08); opal_info_out("Fort mpi_f08 compliance", "bindings:use_mpi_f08:compliance", fortran_usempif08_compliance); - if (NULL != fortran_usempif08_compliance) { - free(fortran_usempif08_compliance); - } opal_info_out("Fort mpi_f08 subarrays", "bindings:use_mpi_f08:subarrays-supported", fortran_build_f08_subarrays); opal_info_out("Java bindings", "bindings:java", java); diff --git a/oshmem/tools/oshmem_info/param.c b/oshmem/tools/oshmem_info/param.c index d3809d8569..7780ccfb70 100644 --- a/oshmem/tools/oshmem_info/param.c +++ b/oshmem/tools/oshmem_info/param.c @@ -174,6 +174,7 @@ void oshmem_info_do_config(bool want_all) /* Build a string describing what level of compliance the mpi_f08 module has */ + char f08_msg[1024]; if (OMPI_BUILD_FORTRAN_USEMPIF08_BINDINGS) { /* Do we have everything? */ @@ -184,38 +185,41 @@ void oshmem_info_do_config(bool want_all) OMPI_FORTRAN_HAVE_PROCEDURE && OMPI_FORTRAN_HAVE_C_FUNLOC && OMPI_FORTRAN_NEED_WRAPPER_ROUTINES) { - fortran_usempif08_compliance = strdup("The mpi_f08 module is available, and is fully compliant. w00t!"); + fortran_usempif08_compliance = "The mpi_f08 module is available, and is fully compliant. w00t!"; } else { - char f08[1024]; int first = 1; - snprintf(f08, sizeof(f08), + snprintf(f08_msg, sizeof(f08_msg), "The mpi_f08 module is available, but due to limitations in the %s compiler, does not support the following: ", OMPI_FC); if (!OMPI_BUILD_FORTRAN_F08_SUBARRAYS) { - append(f08, sizeof(f08), &first, "array subsections"); + append(f08_msg, sizeof(f08_msg), &first, "array subsections"); } if (!OMPI_FORTRAN_HAVE_PRIVATE) { - append(f08, sizeof(f08), &first, "private MPI_Status members"); + append(f08_msg, sizeof(f08_msg), &first, + "private MPI_Status members"); } if (!OMPI_FORTRAN_HAVE_ABSTRACT) { - append(f08, sizeof(f08), &first, "ABSTRACT INTERFACE function pointers"); + append(f08_msg, sizeof(f08_msg), &first, + "ABSTRACT INTERFACE function pointers"); } if (!OMPI_FORTRAN_HAVE_ASYNCHRONOUS) { - append(f08, sizeof(f08), &first, "Fortran '08-specified ASYNCHRONOUS behavior"); + append(f08_msg, sizeof(f08_msg), &first, + "Fortran '08-specified ASYNCHRONOUS behavior"); } if (!OMPI_FORTRAN_HAVE_PROCEDURE) { - append(f08, sizeof(f08), &first, "PROCEDUREs"); + append(f08_msg, sizeof(f08_msg), &first, "PROCEDUREs"); } if (!OMPI_FORTRAN_HAVE_C_FUNLOC) { - append(f08, sizeof(f08), &first, "C_FUNLOCs"); + append(f08_msg, sizeof(f08_msg), &first, "C_FUNLOCs"); } if (OMPI_FORTRAN_NEED_WRAPPER_ROUTINES) { - append(f08, sizeof(f08), &first, "direct passthru (where possible) to underlying Open MPI's C functionality"); + append(f08_msg, sizeof(f08_msg), &first, + "direct passthru (where possible) to underlying Open MPI's C functionality"); } - fortran_usempif08_compliance = strdup(f08); + fortran_usempif08_compliance = f08_msg; } } else { - fortran_usempif08_compliance = strdup("The mpi_f08 module was not built"); + fortran_usempif08_compliance = "The mpi_f08 module was not built"; } java = OMPI_WANT_JAVA_BINDINGS ? "yes" : "no"; @@ -304,9 +308,6 @@ void oshmem_info_do_config(bool want_all) fortran_usempif08); opal_info_out("Fort mpi_f08 compliance", "bindings:use_mpi_f08:compliance", fortran_usempif08_compliance); - if (NULL != fortran_usempif08_compliance) { - free(fortran_usempif08_compliance); - } opal_info_out("Fort mpi_f08 subarrays", "bindings:use_mpi_f08:subarrays-supported", fortran_build_f08_subarrays); opal_info_out("Java bindings", "bindings:java", java);