From a3e672f863b7bc9dc3191f3b728eb360d8509482 Mon Sep 17 00:00:00 2001 From: Prateek Machiraju Date: Thu, 8 Oct 2020 00:59:34 -0400 Subject: [PATCH] [wpimath] C++: Assign zero in MakeWhiteNoiseVector if std-dev is zero (#2773) A std-dev of zero is UB in C++. Java does not have this issue. Co-authored-by: Tyler Veness --- wpimath/src/main/native/include/frc/StateSpaceUtil.h | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/wpimath/src/main/native/include/frc/StateSpaceUtil.h b/wpimath/src/main/native/include/frc/StateSpaceUtil.h index e19dd1a443..b461005085 100644 --- a/wpimath/src/main/native/include/frc/StateSpaceUtil.h +++ b/wpimath/src/main/native/include/frc/StateSpaceUtil.h @@ -220,8 +220,14 @@ Eigen::Matrix MakeWhiteNoiseVector( Eigen::Matrix result; for (int i = 0; i < N; ++i) { - std::normal_distribution<> distr{0.0, stdDevs[i]}; - result(i) = distr(gen); + // Passing a standard deviation of 0.0 to std::normal_distribution is + // undefined behavior + if (stdDevs[i] == 0.0) { + result(i) = 0.0; + } else { + std::normal_distribution distr{0.0, stdDevs[i]}; + result(i) = distr(gen); + } } return result; }