Skip to content

Commit 985e852

Browse files
inuex35claude
andcommitted
Fix potential use of uninitialized H_compose in evaluateError
Cache ecef_T_nav_.has_value() in a local bool to avoid reading H_compose when ecef_T_nav is not set. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent ea2df9d commit 985e852

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

gtsam/navigation/PseudorangeFactor.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,8 @@ Vector PseudorangeFactorArm::evaluateError(
193193
OptionalMatrixType HreceiverClockBias) const {
194194
// Convert from local nav frame to ECEF if ecef_T_nav is provided:
195195
Matrix66 H_compose;
196-
const Pose3 ecef_T_body = ecef_T_nav_
196+
const bool has_nav = ecef_T_nav_.has_value();
197+
const Pose3 ecef_T_body = has_nav
197198
? ecef_T_nav_->compose(pose, {}, H_pose ? &H_compose : nullptr)
198199
: pose;
199200

@@ -220,7 +221,7 @@ Vector PseudorangeFactorArm::evaluateError(
220221
u * (-ecef_R_body * skewSymmetric(bL_));
221222
H_ecef.block<1, 3>(0, 3) = u * ecef_R_body;
222223
// Chain rule: if ecef_T_nav is set, multiply by compose Jacobian
223-
*H_pose = ecef_T_nav_ ? H_ecef * H_compose : H_ecef;
224+
*H_pose = has_nav ? H_ecef * H_compose : H_ecef;
224225
}
225226
}
226227

@@ -290,7 +291,8 @@ Vector DifferentialPseudorangeFactorArm::evaluateError(
290291
OptionalMatrixType HdifferentialCorrection) const {
291292
// Convert from local nav frame to ECEF if ecef_T_nav is provided:
292293
Matrix66 H_compose;
293-
const Pose3 ecef_T_body = ecef_T_nav_
294+
const bool has_nav = ecef_T_nav_.has_value();
295+
const Pose3 ecef_T_body = has_nav
294296
? ecef_T_nav_->compose(pose, {}, H_pose ? &H_compose : nullptr)
295297
: pose;
296298

@@ -317,7 +319,7 @@ Vector DifferentialPseudorangeFactorArm::evaluateError(
317319
u * (-ecef_R_body * skewSymmetric(bL_));
318320
H_ecef.block<1, 3>(0, 3) = u * ecef_R_body;
319321
// Chain rule: if ecef_T_nav is set, multiply by compose Jacobian
320-
*H_pose = ecef_T_nav_ ? H_ecef * H_compose : H_ecef;
322+
*H_pose = has_nav ? H_ecef * H_compose : H_ecef;
321323
}
322324
}
323325

0 commit comments

Comments
 (0)