Back to Freedom.Tech Back
All llama.cpp releasesAll versions
Release Wed, Aug 5, 2026 3 min read

llama.cpp b10289

Original release notes

server: harden the file_glob_search directory walk (#26626)

  • server: don't walk Windows junctions in file_glob_search

std::filesystem reports a junction as a plain directory, so the symlink guard misses it and a junction pointing back at an ancestor is walked until the path length gives out

read the reparse tag and treat a symlink and a mount point as links, leaving any other reparse point walkable so cloud placeholders and dedup stubs still get searched

look junk directory names up case insensitively on Windows, where NTFS makes Build the same directory as build

test that a junk directory stays selectable while its contents stay out of search results

  • server: report a directory the walk could not read

a directory that fails to open or to iterate was skipped in silence, so a caller got a listing that looked complete while a whole subtree was missing: a path over the platform limit, a volume going away, a name the filesystem rejects

skip_permission_denied never reaches this path, so an error here is an incomplete answer rather than a deliberate omission, and it now sets the truncated flag

  • server: simplify the file_glob_search listing plumbing

return a small result struct instead of two out params and a caller path that only fed an error string, taking list_entries from six parameters down to three

scope the error code to the directory being read, act on the status code the entry lookups already returned, and treat an unreadable link state as a link so the walk never descends on a guess

check the deadline when a directory is popped, not only per entry, so a tree of empty directories cannot outlive the budget

read the path parameter once, and reject an invalid limit the way an invalid type is already rejected, instead of silently falling back

normalize the resolved path, so a "." or ".." a caller typed reaches neither git nor the client, and return the generic path form with '/' separators on every platform, so the base sent to clients no longer needs a local fixup

  • ui: expire cached picker searches

the cache grew for the lifetime of the component: entries went stale after the TTL but were never removed, so every distinct query typed in a session stayed in memory

drop expired entries when a new result is stored

  • server: address review from @ngxson

trim comments to one line each, and drop two that restate the code

rename junk_lookup_name to get_effective_name, and move it and the link check to private static members next to junk_dir_names

merge the Windows and Linux link checks into one is_link, so symlinks are checked everywhere and junctions only add to it on Windows

  • server: convert tool paths as UTF-8 on Windows

a narrow path uses the active code page there, so a file name came back mangled and a path with an accent could not be opened at all

convert explicitly at every crossing between a std::string, which always carries UTF-8 here, and fs::path

read the home directory through the wide environment, since the narrow one returns the profile path in the active code page too

the walker no longer normalizes separators by hand, since paths now come back in generic form

  • server: fold the platform branch inside console_output_to_utf8

match the shape of the other helpers, one definition with the #if inside, instead of two definitions wrapped in #if and #else

inline the single caller helper and trim the comment

Website: -

UI: