Skip to content

Fix leak and check covariance in CovarianceWeightedCostFunction - #4911

Merged
sarlinpe merged 1 commit into
mainfrom
sarlinpe/covariance-weighted-cost-function
Oct 28, 2026
Merged

sarlinpe merged 1 commit into
mainfrom
sarlinpe/covariance-weighted-cost-function

Conversation

@sarlinpe

@sarlinpe sarlinpe commented Oct 28, 2026 •

Copy link
Copy Markdown
Member

Summary

CovarianceWeightedCostFunction leaked the wrapped cost function when computing the square root information threw, and silently produced non-finite weights for covariances that are not positive definite.

  • The owning std::unique_ptr member is now declared, and thus initialized, before the square root information, so the wrapped cost function is released if that throws.
  • A null cost function is rejected with THROW_CHECK_NOTNULL.
  • The covariance must be positive definite (finite inverse and successful Cholesky factorization), otherwise the constructor throws std::invalid_argument instead of producing NaN weights.
  • The square root information is computed by a shared helper, internal::ComputeLeftSqrtInformation, which Enable covariance-weighted rotation averaging in global pipelines #4823 reuses for a dynamic-size counterpart.

Tests

CovarianceWeightedCostFunction.RejectsNonPositiveDefiniteCovariance checks that zero and indefinite covariances, and a null cost function, throw. Under ASan, it also checks that the wrapped cost function does not leak.

This is the first PR of a stack: #4823 builds on it, and #4912 builds on #4823.

The wrapped cost function was owned only after the square root
information was computed, so it leaked if that threw. Declare the owning
member first, reject null cost functions, and check that the covariance
is positive definite instead of silently producing NaN weights. The
square root information is computed by a shared helper.
@sarlinpe
sarlinpe merged commit 98f3154 into main Oct 28, 2026
16 checks passed
@sarlinpe
sarlinpe deleted the sarlinpe/covariance-weighted-cost-function branch October 28, 2026 20:33
fringehush-gif added a commit to fringehush-gif/colmap that referenced this pull request Nov 3, 2026
## Summary
- Integrate all 12 upstream commits after the shared base 9371f7b, including LoMa BF16 loading, matching-worker error propagation, keypoint shape scaling, and project-file CLI overrides.
- Preserve the fork's CUDA blocking-sync helper alongside upstream's BF16 device check and register the shared CUDA test once.

## Validation
- Resolved all merge conflicts; no conflict markers or unmerged paths remain; git diff --check passes.
- Incremental Linux CUDA build linked six focused test executables. The prepared custom Ceres closure required its existing Abseil/CUDA library directories on the linker's search path.
- CTest passed controllers/base_option_manager_test, feature_matching_utils_test, incremental_pipeline_test, option_manager_test, feature/loma_test, and util/cuda_test (six programs, one run each).
- No full suite, Python binding, end-to-end, or performance claim.

## Upstream commits

- `ea470c0c4f4a40a3bdfa33d01eb38375c5df64de` Run Windows and remaining pycolmap CI only with the full-ci label (colmap#4904)
- `c0339e95482c404b51f38ff9b86866de495984f0` Fix MSVC warnings C4805, C4996, and C4756 (colmap#4910)
- `f00d6063bb0b120cf10ee190f7f06f4a34edf432` Expose Ceres solver thresholds in incremental mapping (colmap#4892)
- `978a4467f36bbfc9ae18780f2dca253000b0d008` Keep division-camera derivatives finite on the optical axis (colmap#4888)
- `98f31541f483788ab550f5c4a4e0804e8674b9e0` Fix leak and check covariance in CovarianceWeightedCostFunction (colmap#4911)
- `a467519441171054c7aaa17dffe86fe06431f05c` Avoid stack overflow when compressing union-find chains (colmap#4906)
- `404b83db2c2cc04892e14a578ddfa73e0ac9bfb1` Fix LoMa bf16 fallback on CUDA by loading it like any other model (colmap#4924)
- `d02e6701dede22eaeee89f73784a8c79f6f289ac` Add max_num_features option to automatic_reconstructor and benchmark (colmap#4907)
- `82c3b5db78d96a7e93ca7b8b2af0634e28aa33f4` Propagate errors of feature matching workers instead of terminating (colmap#4921)
- `4afe8d1156a71a2ff33974895f221c8eb3740cb1` Rescale keypoint shapes in image coordinates (colmap#4926)
- `ce2b5ab9df3801c2b75edbba338c04ad3c8cc6af` Fix vocabulary tree builder descriptor dimensions (colmap#4923)
- `f956ce629c21a88d75a7f7b3107298d1faf3dcf3` Fix command-line overrides for project files (colmap#4902)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants