From 8eba7863b126584f4b9a5b1d3cc4cbc0d0f59976 Mon Sep 17 00:00:00 2001 From: Alisa Sireneva Date: Sun, 11 Aug 2024 23:45:41 +0300 Subject: [PATCH] Fix skip_to_escape on BE architectures --- src/read.rs | 9 ++------- tests/test.rs | 2 +- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/src/read.rs b/src/read.rs index 1494ec6d2..6c663768e 100644 --- a/src/read.rs +++ b/src/read.rs @@ -453,7 +453,7 @@ impl<'a> SliceRead<'a> { const ONE_BYTES: Chunk = Chunk::MAX / 255; // 0x0101...01 for chunk in rest.chunks_exact(STEP) { - let chars = Chunk::from_ne_bytes(chunk.try_into().unwrap()); + let chars = Chunk::from_le_bytes(chunk.try_into().unwrap()); let contains_ctrl = chars.wrapping_sub(ONE_BYTES * 0x20) & !chars; let chars_quote = chars ^ (ONE_BYTES * Chunk::from(b'"')); let contains_quote = chars_quote.wrapping_sub(ONE_BYTES) & !chars_quote; @@ -461,14 +461,9 @@ impl<'a> SliceRead<'a> { let contains_backslash = chars_backslash.wrapping_sub(ONE_BYTES) & !chars_backslash; let masked = (contains_ctrl | contains_quote | contains_backslash) & (ONE_BYTES << 7); if masked != 0 { - let addresswise_first_bit = if cfg!(target_endian = "little") { - masked.trailing_zeros() - } else { - masked.leading_zeros() - }; // SAFETY: chunk is in-bounds for slice self.index = unsafe { chunk.as_ptr().offset_from(self.slice.as_ptr()) } as usize - + addresswise_first_bit as usize / 8; + + masked.trailing_zeros() as usize / 8; return; } } diff --git a/tests/test.rs b/tests/test.rs index 6baf7e5d9..9f2159513 100644 --- a/tests/test.rs +++ b/tests/test.rs @@ -2504,7 +2504,7 @@ fn test_control_character_search() { for n in 0..16 { for m in 0..16 { test_parse_err::(&[( - &format!("\"{}\n{}\"", ".".repeat(n), ".".repeat(m)), + &format!("\"{}\n{}\"", " ".repeat(n), " ".repeat(m)), "control character (\\u0000-\\u001F) found while parsing a string at line 2 column 0", )]); }