Radish alpha
r
rad:z2UcCU1LgMshWvXj6hXSDDrwB8q8M
Radicle Job Collaborative Object
Radicle
Git
fix: Use loop in FindByCommit::next to avoid stack overflow
Fintan Halpenny committed 1 month ago
commit fd69685db8265b4de888d5dcd3de8a24071d289d
parent 07feea6
2 files changed +12 -8
modified CHANGELOG.md
@@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

+
### Fixes
+

+
- Use an iterative loop to avoid stack overflow, through recursion, when using
+
  `FindByCommit` iterator.
+

## 0.5.0

### Highlights
modified src/lib.rs
@@ -657,15 +657,14 @@ impl Iterator for FindByCommit<'_> {
    type Item = Result<(JobId, Job), cob::store::Error>;

    fn next(&mut self) -> Option<Self::Item> {
-
        let job = self.jobs.next()?;
-
        job.and_then(|(id, job)| {
-
            if self.wanted(&job) {
-
                Ok(Some((JobId::from(id), job)))
-
            } else {
-
                self.next().transpose()
+
        loop {
+
            let job = self.jobs.next()?;
+
            match job {
+
                Ok((id, job)) if self.wanted(&job) => return Some(Ok((JobId::from(id), job))),
+
                Ok(_) => continue,
+
                Err(err) => return Some(Err(err)),
            }
-
        })
-
        .transpose()
+
        }
    }
}