Panic with some very different unicode inputs
badicsalex opened this issue · comments
Alex Badics commented
Hi,
The following testcase panics for me:
#[test]
fn test_panic() {
let a = "Az épületek építésére, javítására, fenntartására, átalakítására vagy elbontására vonatkozó építőmunkát, így különösen földkiemelést, földmunkát, tényleges építőmunkát, előre gyártott elemek össze- és szétszerelését, felszerelést vagy berendezést, átalakításokat, felújítást, javítást, szétszerelést, elbontást, karbantartást, fenntartást, festési és takarítási munkát végző munkáltatók esetében az e tevékenység keretében foglalkoztatott munkavállalóra – az (1) bekezdésben meghatározott feltételek tekintetében – az ágazatra vagy alágazatra kiterjedő hatályú kollektív szerződés rendelkezéseit kell alkalmazni.";
let b = "Magyarország területén ideiglenesen foglalkoztatott munkavállaló kiküldetésekor felmerülő vagy Magyarország területén történő tartózkodás során, a szokásos munkavégzés helyétől eltérő munkahelyre küldés esetén az utazással, ellátással és szállással kapcsolatos költségekre fizetett juttatások vagy költségtérítés mértéke";
let d = diff(a,b);
assert!(!d.is_empty());
}
Backtrace:
---- test_panic stdout ----
thread 'test_panic' panicked at 'byte index 415 is not a char boundary; it is inside 'í' (bytes 414..416) of `Az épületek építésére, javítására, fenntartására, átalakítására vagy elbontására vonatkozó építőmunkát, így különösen földkiemelést, földmunkát, tényleges építőmunkát, előre gyártott elemek össze- és szétszerelését`[...]', src/range.rs:90:6
stack backtrace:
0: rust_begin_unwind
at /rustc/57f097ea25f2c05f424fc9b9dc50dbd6d399845c/library/std/src/panicking.rs:556:5
1: core::panicking::panic_fmt
at /rustc/57f097ea25f2c05f424fc9b9dc50dbd6d399845c/library/core/src/panicking.rs:142:14
2: core::str::slice_error_fail_rt
3: core::str::slice_error_fail
at /rustc/57f097ea25f2c05f424fc9b9dc50dbd6d399845c/library/core/src/str/mod.rs:86:9
4: core::str::traits::<impl core::slice::index::SliceIndex<str> for core::ops::range::Range<usize>>::index
at /rustc/57f097ea25f2c05f424fc9b9dc50dbd6d399845c/library/core/src/str/traits.rs:218:21
5: core::str::traits::<impl core::ops::index::Index<I> for str>::index
at /rustc/57f097ea25f2c05f424fc9b9dc50dbd6d399845c/library/core/src/str/traits.rs:65:9
6: dissimilar::range::str
at ./src/range.rs:90:6
7: dissimilar::range::Range::chars
at ./src/range.rs:54:9
8: dissimilar::common_prefix
at ./src/lib.rs:346:53
9: dissimilar::cleanup_merge
at ./src/lib.rs:803:49
10: dissimilar::cleanup_semantic
at ./src/lib.rs:574:9
11: dissimilar::diff
at ./src/lib.rs:129:5
12: test::test_panic
at ./tests/test.rs:46:13
13: test::test_panic::{{closure}}
at ./tests/test.rs:43:1
14: core::ops::function::FnOnce::call_once
at /rustc/57f097ea25f2c05f424fc9b9dc50dbd6d399845c/library/core/src/ops/function.rs:251:5
15: core::ops::function::FnOnce::call_once
at /rustc/57f097ea25f2c05f424fc9b9dc50dbd6d399845c/library/core/src/ops/function.rs:251:5
Even small changes to the original strings caused the panic to go away, so I couldn't minimize the repro, and I haven't investigated it any deeper than this.
David Tolnay commented
Fixed in 1.0.6.