[PATCH v1 2/2] rtems-exeinfo.cpp: Fix division by zero errors

Ryan Long ryan.long at oarcorp.com
Tue Jun 29 17:06:12 UTC 2021


CID 1503008: Division or modulo by zero
CID 1503015: Division or modulo by zero

Closes #4416
---
 linkers/rtems-exeinfo.cpp    | 20 ++++++++++++++++----
 tester/covoar/ReportsBase.cc |  2 +-
 2 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/linkers/rtems-exeinfo.cpp b/linkers/rtems-exeinfo.cpp
index 1e6d4b4..ec51597 100644
--- a/linkers/rtems-exeinfo.cpp
+++ b/linkers/rtems-exeinfo.cpp
@@ -755,6 +755,8 @@ namespace rld
       size_t           total = 0;
       size_t           total_size = 0;
       size_t           inlined_size = 0;
+      double           percentage;
+      double           percentage_size;
       dwarf::functions funcs_inlined;
       dwarf::functions funcs_not_inlined;
       func_counts      counts;
@@ -798,14 +800,24 @@ namespace rld
         }
       }
 
+      if ( total == 0 ) {
+        percentage = 0;
+      } else {
+        percentage = ( funcs_inlined.size() * 100 ) / total;
+      }
+
+      if ( total_size == 0 ) {
+        percentage_size = 0;
+      } else {
+        percentage_size = ( inlined_size * 100 ) / total_size;
+      }
+
       std::cout << "inlined funcs   : " << funcs_inlined.size () << std::endl
                 << "    total funcs : " << total << std::endl
-                << " % inline funcs : " << (funcs_inlined.size () * 100) / total << '%'
-                << std::endl
+                << " % inline funcs : " << percentage << '%' << std::endl
                 << "     total size : " << total_size << std::endl
                 << "    inline size : " << inlined_size << std::endl
-                << "  % inline size : " << (inlined_size * 100) / total_size << '%'
-                << std::endl;
+                << "  % inline size : " << percentage_size << '%' << std::endl;
 
       auto count_compare = [](func_count const & a, func_count const & b) {
         return a.size != b.size?  a.size < b.size : a.count > b.count;
diff --git a/tester/covoar/ReportsBase.cc b/tester/covoar/ReportsBase.cc
index 31dc429..b54f550 100644
--- a/tester/covoar/ReportsBase.cc
+++ b/tester/covoar/ReportsBase.cc
@@ -482,7 +482,7 @@ void  ReportsBase::WriteSummaryReport(
     }
   }
 
-  if (totalBytes == 0) {
+  if ( totalBytes == 0 ) {
     percentage = 0;
   } else {
     percentage = (double) notExecuted;
-- 
1.8.3.1



More information about the devel mailing list