diff --git a/crates/docx/src/read/styles.rs b/crates/docx/src/read/styles.rs
index 3d7e61bf8..d2946b8ec 100644
--- a/crates/docx/src/read/styles.rs
+++ b/crates/docx/src/read/styles.rs
@@ -326,7 +326,8 @@ impl Reader<'_> {
let (Some(id), Some(abs)) = (n.attr("w:numId").and_then(u32_of), n.child_val("w:abstractNumId").and_then(u32_of)) else { continue };
let (mut start_overrides, mut level_overrides) = (Vec::new(), Vec::new());
for o in n.children("w:lvlOverride").take(9) {
- let Some(lvl) = numbering_level_index(o.attr("w:ilvl")) else { continue };
+ let Some(raw_level) = o.attr("w:ilvl") else { continue };
+ let Some(lvl) = numbering_level_index(Some(raw_level)) else { continue };
let lvl = lvl as u8;
if let Some(s) = o.child_val("w:startOverride").and_then(u32_of) {
start_overrides.push((lvl, s));
diff --git a/crates/docx/tests/it/passthrough.rs b/crates/docx/tests/it/passthrough.rs
index 97741a813..9e5f35a9f 100644
--- a/crates/docx/tests/it/passthrough.rs
+++ b/crates/docx/tests/it/passthrough.rs
@@ -322,7 +322,7 @@ fn list_identities_survive_and_a_copied_definition_gets_none() {
#[test]
fn malformed_numbering_levels_are_skipped_instead_of_becoming_level_zero() {
- let numbering = r#""#;
+ let numbering = r#""#;
let body = r#"default levelvalid levelnegative levelout of rangeoverflow"#;
let bytes = package(body, &[("rId1", &format!("{REL}/numbering"), "numbering.xml")], &[], &[("word/numbering.xml", numbering)]);
let doc = craft_docx::read(&bytes).unwrap();