lmi-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[lmi-commits] [lmi] master cc85be94 6/8: Resolve another issue identifie


From: Greg Chicares
Subject: [lmi-commits] [lmi] master cc85be94 6/8: Resolve another issue identified by UBSAN
Date: Mon, 6 Jun 2022 18:40:33 -0400 (EDT)

branch: master
commit cc85be945f46bbb4f0948cf322f9ccaa792b2565
Author: Gregory W. Chicares <gchicares@sbcglobal.net>
Commit: Gregory W. Chicares <gchicares@sbcglobal.net>

    Resolve another issue identified by UBSAN
    
    See:
      https://lists.nongnu.org/archive/html/lmi/2022-06/msg00007.html
    |  The field is initialized once mec_state ctor finishes executing. But the
    | "uninitialized" access happens while it's executing and, in fact, while
    | it's initializing the field. This explains why it's not really a problem:
    | the field will get initialized during the very next access, but reading it
    | initially in any_member.hpp uses the value that hasn't been initialized
    | just yet.
    
    Although UBSAN found a problem in only one of these files, that's just
    because the other isn't used in any unit test, and UBSAN has so far been
    used only with unit tests.
---
 gpt_state.hpp | 144 +++++++++++++++++++++++++++++-----------------------------
 mec_state.hpp | 126 +++++++++++++++++++++++++-------------------------
 2 files changed, 135 insertions(+), 135 deletions(-)

diff --git a/gpt_state.hpp b/gpt_state.hpp
index 749115ee..c889b022 100644
--- a/gpt_state.hpp
+++ b/gpt_state.hpp
@@ -69,78 +69,78 @@ class LMI_SO gpt_state final
     // xml_serializable overrides.
     bool is_detritus(std::string const&) const override;
 
-    int    B0_deduced_policy_year;
-    int    B1_deduced_contract_year;
-    double B2_deduced_px7_rate;
-    double B3_deduced_nsp_rate;
-    double B4_deduced_target_premium;
-    double B5_deduced_target_load;
-    double B6_deduced_excess_load;
-
-    double C0_init_bft;
-    double C1_init_ldb;
-    double C2_init_amt_pd;
-    bool   C3_init_is_mc;
-    double C4_init_dcv;
-    double C5_init_px7;
-    bool   C6_init_mec;
-
-    double D0_incr_bft;
-    double D1_incr_ldb;
-    double D2_incr_amt_pd;
-    bool   D3_incr_is_mc;
-    double D4_incr_dcv;
-    double D5_incr_px7;
-    bool   D6_incr_mec;
-
-    double E0_decr_bft;
-    double E1_decr_ldb;
-    double E2_decr_amt_pd;
-    bool   E3_decr_is_mc;
-    double E4_decr_dcv;
-    double E5_decr_px7;
-    bool   E6_decr_mec;
-
-    double F0_nec_pm_bft;
-    double F1_nec_pm_ldb;
-    double F2_nec_pm_amt_pd;
-    bool   F3_nec_pm_is_mc;
-    double F4_nec_pm_dcv;
-    double F5_nec_pm_px7;
-    bool   F6_nec_pm_mec;
-
-    double G0_do_mc_bft;
-    double G1_do_mc_ldb;
-    double G2_do_mc_amt_pd;
-    bool   G3_do_mc_is_mc;
-    double G4_do_mc_dcv;
-    double G5_do_mc_px7;
-    bool   G6_do_mc_mec;
-
-    double H0_unnec_pm_bft;
-    double H1_unnec_pm_ldb;
-    double H2_unnec_pm_amt_pd;
-    bool   H3_unnec_pm_is_mc;
-    double H4_unnec_pm_dcv;
-    double H5_unnec_pm_px7;
-    bool   H6_unnec_pm_mec;
-
-    double Q0_net_1035;
-    double Q1_max_nec_prem_net;
-    double Q2_max_nec_prem_gross;
-    double Q3_cv_before_last_mc;
-    double Q4_cum_px7;
-    double Q5_cum_amt_pd;
-    double Q6_max_non_mec_prem;
-
-    double X0_glp;
-    double X1_gsp;
-    double X2_glp_a;
-    double X3_gsp_a;
-    double X4_glp_b;
-    double X5_gsp_b;
-    double X6_glp_c;
-    double X7_gsp_c;
+    int    B0_deduced_policy_year    {0};
+    int    B1_deduced_contract_year  {0};
+    double B2_deduced_px7_rate       {0.0};
+    double B3_deduced_nsp_rate       {0.0};
+    double B4_deduced_target_premium {0.0};
+    double B5_deduced_target_load    {0.0};
+    double B6_deduced_excess_load    {0.0};
+
+    double C0_init_bft               {0.0};
+    double C1_init_ldb               {0.0};
+    double C2_init_amt_pd            {0.0};
+    bool   C3_init_is_mc             {false};
+    double C4_init_dcv               {0.0};
+    double C5_init_px7               {0.0};
+    bool   C6_init_mec               {false};
+
+    double D0_incr_bft               {0.0};
+    double D1_incr_ldb               {0.0};
+    double D2_incr_amt_pd            {0.0};
+    bool   D3_incr_is_mc             {false};
+    double D4_incr_dcv               {0.0};
+    double D5_incr_px7               {0.0};
+    bool   D6_incr_mec               {false};
+
+    double E0_decr_bft               {0.0};
+    double E1_decr_ldb               {0.0};
+    double E2_decr_amt_pd            {0.0};
+    bool   E3_decr_is_mc             {false};
+    double E4_decr_dcv               {0.0};
+    double E5_decr_px7               {0.0};
+    bool   E6_decr_mec               {false};
+
+    double F0_nec_pm_bft             {0.0};
+    double F1_nec_pm_ldb             {0.0};
+    double F2_nec_pm_amt_pd          {0.0};
+    bool   F3_nec_pm_is_mc           {false};
+    double F4_nec_pm_dcv             {0.0};
+    double F5_nec_pm_px7             {0.0};
+    bool   F6_nec_pm_mec             {false};
+
+    double G0_do_mc_bft              {0.0};
+    double G1_do_mc_ldb              {0.0};
+    double G2_do_mc_amt_pd           {0.0};
+    bool   G3_do_mc_is_mc            {false};
+    double G4_do_mc_dcv              {0.0};
+    double G5_do_mc_px7              {0.0};
+    bool   G6_do_mc_mec              {false};
+
+    double H0_unnec_pm_bft           {0.0};
+    double H1_unnec_pm_ldb           {0.0};
+    double H2_unnec_pm_amt_pd        {0.0};
+    bool   H3_unnec_pm_is_mc         {false};
+    double H4_unnec_pm_dcv           {0.0};
+    double H5_unnec_pm_px7           {0.0};
+    bool   H6_unnec_pm_mec           {false};
+
+    double Q0_net_1035               {0.0};
+    double Q1_max_nec_prem_net       {0.0};
+    double Q2_max_nec_prem_gross     {0.0};
+    double Q3_cv_before_last_mc      {0.0};
+    double Q4_cum_px7                {0.0};
+    double Q5_cum_amt_pd             {0.0};
+    double Q6_max_non_mec_prem       {0.0};
+
+    double X0_glp                    {0.0};
+    double X1_gsp                    {0.0};
+    double X2_glp_a                  {0.0};
+    double X3_gsp_a                  {0.0};
+    double X4_glp_b                  {0.0};
+    double X5_gsp_b                  {0.0};
+    double X6_glp_c                  {0.0};
+    double X7_gsp_c                  {0.0};
 };
 
 #endif // gpt_state_hpp
diff --git a/mec_state.hpp b/mec_state.hpp
index 997b952d..07f577c3 100644
--- a/mec_state.hpp
+++ b/mec_state.hpp
@@ -65,69 +65,69 @@ class LMI_SO mec_state final
     // xml_serializable overrides.
     bool is_detritus(std::string const&) const override;
 
-    int    B0_deduced_policy_year;
-    int    B1_deduced_contract_year;
-    double B2_deduced_px7_rate;
-    double B3_deduced_nsp_rate;
-    double B4_deduced_target_premium;
-    double B5_deduced_target_load;
-    double B6_deduced_excess_load;
-
-    double C0_init_bft;
-    double C1_init_ldb;
-    double C2_init_amt_pd;
-    bool   C3_init_is_mc;
-    double C4_init_dcv;
-    double C5_init_px7;
-    bool   C6_init_mec;
-
-    double D0_incr_bft;
-    double D1_incr_ldb;
-    double D2_incr_amt_pd;
-    bool   D3_incr_is_mc;
-    double D4_incr_dcv;
-    double D5_incr_px7;
-    bool   D6_incr_mec;
-
-    double E0_decr_bft;
-    double E1_decr_ldb;
-    double E2_decr_amt_pd;
-    bool   E3_decr_is_mc;
-    double E4_decr_dcv;
-    double E5_decr_px7;
-    bool   E6_decr_mec;
-
-    double F0_nec_pm_bft;
-    double F1_nec_pm_ldb;
-    double F2_nec_pm_amt_pd;
-    bool   F3_nec_pm_is_mc;
-    double F4_nec_pm_dcv;
-    double F5_nec_pm_px7;
-    bool   F6_nec_pm_mec;
-
-    double G0_do_mc_bft;
-    double G1_do_mc_ldb;
-    double G2_do_mc_amt_pd;
-    bool   G3_do_mc_is_mc;
-    double G4_do_mc_dcv;
-    double G5_do_mc_px7;
-    bool   G6_do_mc_mec;
-
-    double H0_unnec_pm_bft;
-    double H1_unnec_pm_ldb;
-    double H2_unnec_pm_amt_pd;
-    bool   H3_unnec_pm_is_mc;
-    double H4_unnec_pm_dcv;
-    double H5_unnec_pm_px7;
-    bool   H6_unnec_pm_mec;
-
-    double Q0_net_1035;
-    double Q1_max_nec_prem_net;
-    double Q2_max_nec_prem_gross;
-    double Q3_cv_before_last_mc;
-    double Q4_cum_px7;
-    double Q5_cum_amt_pd;
-    double Q6_max_non_mec_prem;
+    int    B0_deduced_policy_year    {0};
+    int    B1_deduced_contract_year  {0};
+    double B2_deduced_px7_rate       {0.0};
+    double B3_deduced_nsp_rate       {0.0};
+    double B4_deduced_target_premium {0.0};
+    double B5_deduced_target_load    {0.0};
+    double B6_deduced_excess_load    {0.0};
+
+    double C0_init_bft               {0.0};
+    double C1_init_ldb               {0.0};
+    double C2_init_amt_pd            {0.0};
+    bool   C3_init_is_mc             {false};
+    double C4_init_dcv               {0.0};
+    double C5_init_px7               {0.0};
+    bool   C6_init_mec               {false};
+
+    double D0_incr_bft               {0.0};
+    double D1_incr_ldb               {0.0};
+    double D2_incr_amt_pd            {0.0};
+    bool   D3_incr_is_mc             {false};
+    double D4_incr_dcv               {0.0};
+    double D5_incr_px7               {0.0};
+    bool   D6_incr_mec               {false};
+
+    double E0_decr_bft               {0.0};
+    double E1_decr_ldb               {0.0};
+    double E2_decr_amt_pd            {0.0};
+    bool   E3_decr_is_mc             {false};
+    double E4_decr_dcv               {0.0};
+    double E5_decr_px7               {0.0};
+    bool   E6_decr_mec               {false};
+
+    double F0_nec_pm_bft             {0.0};
+    double F1_nec_pm_ldb             {0.0};
+    double F2_nec_pm_amt_pd          {0.0};
+    bool   F3_nec_pm_is_mc           {false};
+    double F4_nec_pm_dcv             {0.0};
+    double F5_nec_pm_px7             {0.0};
+    bool   F6_nec_pm_mec             {false};
+
+    double G0_do_mc_bft              {0.0};
+    double G1_do_mc_ldb              {0.0};
+    double G2_do_mc_amt_pd           {0.0};
+    bool   G3_do_mc_is_mc            {false};
+    double G4_do_mc_dcv              {0.0};
+    double G5_do_mc_px7              {0.0};
+    bool   G6_do_mc_mec              {false};
+
+    double H0_unnec_pm_bft           {0.0};
+    double H1_unnec_pm_ldb           {0.0};
+    double H2_unnec_pm_amt_pd        {0.0};
+    bool   H3_unnec_pm_is_mc         {false};
+    double H4_unnec_pm_dcv           {0.0};
+    double H5_unnec_pm_px7           {0.0};
+    bool   H6_unnec_pm_mec           {false};
+
+    double Q0_net_1035               {0.0};
+    double Q1_max_nec_prem_net       {0.0};
+    double Q2_max_nec_prem_gross     {0.0};
+    double Q3_cv_before_last_mc      {0.0};
+    double Q4_cum_px7                {0.0};
+    double Q5_cum_amt_pd             {0.0};
+    double Q6_max_non_mec_prem       {0.0};
 };
 
 #endif // mec_state_hpp



reply via email to

[Prev in Thread] Current Thread [Next in Thread]