diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-02-24 00:47:35 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-02-24 00:47:35 +0900 |
| commit | d9858fbd322ce20de84f44ce67ae11edf081578c (patch) | |
| tree | 10d397b94008882ce6e9dddf8905987af626e0ab /crates/mozart-registry/src/resolver.rs | |
| parent | af0df92e1ecc82823a510646b7545278caeac4b8 (diff) | |
| download | php-mozart-d9858fbd322ce20de84f44ce67ae11edf081578c.tar.gz php-mozart-d9858fbd322ce20de84f44ce67ae11edf081578c.tar.zst php-mozart-d9858fbd322ce20de84f44ce67ae11edf081578c.zip | |
fix(solver): iterate live watch chain to prevent infinite loop in propagation
The watch graph's propagateLiteral used a cloned chain for iteration
while checking the live chain for bounds. After move_watch removed a
node, the stale clone kept re-reading the same node index, causing an
infinite loop on large dependency sets (e.g. laravel/laravel).
Now re-fetch the live chain each iteration, matching Composer's
SplDoublyLinkedList semantics where remove() advances the iterator.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'crates/mozart-registry/src/resolver.rs')
| -rw-r--r-- | crates/mozart-registry/src/resolver.rs | 2 |
1 files changed, 0 insertions, 2 deletions
diff --git a/crates/mozart-registry/src/resolver.rs b/crates/mozart-registry/src/resolver.rs index fe59824..e3cc1f6 100644 --- a/crates/mozart-registry/src/resolver.rs +++ b/crates/mozart-registry/src/resolver.rs @@ -497,7 +497,6 @@ pub async fn resolve(request: &ResolveRequest) -> Result<Vec<ResolvedPackage>, R // Explore transitive dependencies while let Some(name) = builder.next_pending() { if PackageName(name.clone()).is_platform() { - // Platform package: already added if available, skip fetching continue; } @@ -531,7 +530,6 @@ pub async fn resolve(request: &ResolveRequest) -> Result<Vec<ResolvedPackage>, R // Build the pool let mut pool = builder.build(); - // Collect fixed package IDs let mut fixed_ids: Vec<u32> = Vec::new(); for pkg in pool.packages() { |
