llama.cpp build b10289 patches three bugs in the server’s file_glob_search that could hang the walk or silently drop subtrees from results.
- Windows junction loop —
std::filesystemtreats junctions as plain directories, so the symlink guard missed them. A junction pointing at an ancestor walked until the OS path-length limit killed it. Fix: read the reparse tag, treat symlinks and mount points as links, leave other reparse points (cloud placeholders, dedup stubs) walkable. - Case-insensitive junk dirs on Windows — NTFS treats
Buildandbuildas the same directory. Junk directory name matching is now case-insensitive on Windows so excluded directories stay excluded regardless of casing. A test confirms the junk dir stays selectable while its contents stay out of search results. - Silent directory failures — A directory that failed to open or iterate was skipped silently, making incomplete listings look complete. Causes include paths over the platform limit, volumes going away, or names the filesystem rejects. The walk now reports these failures instead of swallowing them.
The junction bug is the nastiest of the three. A single junction pointing at a parent directory would loop the walk until the OS path-length limit killed it — effectively a hang on the server. The silent-skip bug is subtler: skip_permission_denied never reaches this code path, so permission errors got handled but open/iterate failures didn’t.
NOTE
The reparse tag fix is deliberately narrow. Cloud placeholder files and dedup stubs are still walked — only symlinks and mount points are treated as links. If you use junction-based directory structures for model files, those junctions will now be skipped during glob search.
Available in build b10289 (PR #26626). Server operators on Windows should update — the junction loop and silent subtree drops affect any workflow using file_glob_search.