471b82ec87d4b23b03ec3f3a2a193eb1f88a035c braney Sat Sep 19 18:24:53 2026 -0700 dataVersionPathTester: pin which local files a hub's dataVersion may read A track's dataVersion setting is usually a version string, but for otto tracks it is the path of a local file that hgTrackUi opens and prints. On a hub track that setting is an instruction from a stranger to read a named file on our server and put it on the page. #38268 narrowed it to /gbdb, which is public data mirrored on hgdownload, and to a plain path, since a ".." component makes the name mean something outside that tree. The exception is needed: curated-hub assemblies are served as hubs, so hs1's otto tracks are hub tracks, and a quickLifted track's version file lives on the source assembly. Nothing about the failure is visible in the usual way. A refused path and an accepted one both leave a page that looks reasonable, and the difference shows only as somebody else's file appearing where a version number belongs. The test prints a classification and never a file. The three outcomes separate without looking at any contents: a refused path comes back as the path itself, an accepted path that does not exist comes back NULL, and an accepted path that exists comes back as something else. Watched to fail and then pass: with the /gbdb test dropped, /etc/passwd comes back read rather than refused, and the two climbing cases come back opened. Recorded as sandbox-ab in utils/testRegistry. refs #38268, refs #38391 diff --git src/hg/lib/tests/expected/dataVersionPathTest src/hg/lib/tests/expected/dataVersionPathTest new file mode 100644 index 00000000000..c44e6cec273 --- /dev/null +++ src/hg/lib/tests/expected/dataVersionPathTest @@ -0,0 +1,11 @@ +a hub track, which is somebody else's instruction + under /gbdb, no such file /gbdb/hg38/noSuchDataVersion.txt opened it, and there was no such file + a file outside /gbdb /etc/passwd refused, the path came back unread + climbing out of /gbdb /gbdb/hg38/../../etc/passwd refused, the path came back unread + a prefix that only looks right /gbdbNot/hg38/x.txt refused, the path came back unread + not a path at all v27 2026-01-01 refused, the path came back unread + +a native track, which is ours + no such file /no/such/dir/version.txt opened it, and there was no such file + not a path at all v27 2026-01-01 refused, the path came back unread +