Reject negative or fractional index in page.move

Found while testing crates/engine/src/cmd/page.rs:132

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
NetterSilverandClaude Haiku 5.5 committed 2026-10-31 21:05:43 +01:00
1 parent e04c5d2274
commit 650601593e
2 files changed
+15 -1

No files matched your search

+1 -1
View File
@@ -129,7 +129,7 @@ pub fn specs() -> Vec<CommandSpec> {
}),
spec!("page.move", "Move page", "{id?, index}", true, |s, p| {
let id = id(p, "id").unwrap_or(s.page()?);
let k = req_num("page.move", p, "index")?.max(0.0) as usize;
let k = req_index("page.move", p, "index")?;
let doc = s.doc_mut()?;
if !doc.pages.contains(&id) {
return Err(bad("page.move", format!("{id} is not a page")));
@@ -393,6 +393,20 @@ fn page_select_and_doc_switch_refuse_negative_or_fractional_indexes() {
}
}
#[test]
fn page_move_refuses_negative_or_fractional_indexes() {
let mut s = Session::new();
ex(&mut s, "page.add", json!({}));
let p3 = id(&ex(&mut s, "page.add", json!({})));
let before = pages(&mut s);
for bad_index in [json!(-1), json!(1.5)] {
assert!(s.execute("page.move", &json!({"id": p3, "index": bad_index})).is_err(), "page.move index {bad_index} must fail");
assert_eq!(pages(&mut s), before, "page.move index {bad_index} leaves the order alone");
}
ex(&mut s, "page.move", json!({"id": p3, "index": 0}));
assert_eq!(pages(&mut s)[0]["id"], json!(p3), "a valid index still moves the page");
}
#[test]
fn assets_panel_lists_files_and_drops_by_the_documented_rules() {
let mut s = Session::new();