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("<script>")); assert!(!r.html.contains("<script>")); assert!(r.html.contains("hello")); } #[test]