a73x

733a73a2

test(server): plain readme escape + strengthen nested test

alex emery   2026-04-12 17:37


diff --git a/src/server/http/repo/readme.rs b/src/server/http/repo/readme.rs
index 58c55a1..ec16449 100644
--- a/src/server/http/repo/readme.rs
+++ b/src/server/http/repo/readme.rs
@@ -203,24 +203,47 @@ mod tests {

    #[test]
    fn nested_readme_is_not_matched() {
        // Note: tree is built non-recursively here, so we put the nested README
        // in a subtree manually.
        // Build a tree containing both:
        //   docs/README.md  (a subtree entry that must be ignored)
        //   README          (a real root-level README that must win)
        // This proves `find_readme_entry` does not recurse into subtrees,
        // and that subtree entries with README-like names are skipped at the
        // root iteration level.
        let tmp = TempDir::new().unwrap();
        let repo = Repository::init(tmp.path()).unwrap();
        let sig = git2::Signature::now("T", "t@e").unwrap();

        let blob = repo.blob(b"# nope\n").unwrap();
        // The nested blob whose name happens to match a README.
        let nested_blob = repo.blob(b"# nested wins (it should not)\n").unwrap();
        let mut sub = repo.treebuilder(None).unwrap();
        sub.insert("README.md", blob, 0o100644).unwrap();
        sub.insert("README.md", nested_blob, 0o100644).unwrap();
        let sub_oid = sub.write().unwrap();

        // The real root README.
        let root_blob = repo.blob(b"actual root readme\n").unwrap();

        let mut root = repo.treebuilder(None).unwrap();
        root.insert("docs", sub_oid, 0o040000).unwrap();
        root.insert("README", root_blob, 0o100644).unwrap();
        let root_oid = root.write().unwrap();
        let tree = repo.find_tree(root_oid).unwrap();
        repo.commit(Some("HEAD"), &sig, &sig, "init", &tree, &[]).unwrap();

        assert!(load_readme(&repo).is_none());
        let r = load_readme(&repo).expect("root README must be found");
        assert!(r.html.contains("actual root readme"));
        assert!(!r.html.contains("nested wins"));
    }

    #[test]
    fn plain_readme_escapes_script_tag() {
        let (repo, _tmp) = repo_with_files(&[
            ("README", b"<script>alert(1)</script>\nhello"),
        ]);
        let r = load_readme(&repo).unwrap();
        assert!(r.html.starts_with("<pre>"));
        assert!(r.html.contains("&lt;script&gt;"));
        assert!(!r.html.contains("<script>"));
        assert!(r.html.contains("hello"));
    }

    #[test]