mirror of
https://github.com/roc-lang/roc.git
synced 2025-10-03 08:34:33 +00:00
Consistently triggering null pointer bug
This commit is contained in:
parent
945212db28
commit
05d87314e7
2 changed files with 61 additions and 7 deletions
|
@ -1557,6 +1557,7 @@ fn str_from_utf8_range(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||||
|
|
||||||
let start_var = var_store.fresh();
|
let start_var = var_store.fresh();
|
||||||
let start_bool = var_store.fresh();
|
let start_bool = var_store.fresh();
|
||||||
|
let add_var = var_store.fresh();
|
||||||
|
|
||||||
let body = If {
|
let body = If {
|
||||||
cond_var: start_bool,
|
cond_var: start_bool,
|
||||||
|
@ -1567,6 +1568,11 @@ fn str_from_utf8_range(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||||
args: vec![
|
args: vec![
|
||||||
(
|
(
|
||||||
start_var,
|
start_var,
|
||||||
|
RunLowLevel {
|
||||||
|
op: LowLevel::NumAdd,
|
||||||
|
args: vec![
|
||||||
|
(
|
||||||
|
add_var,
|
||||||
Access {
|
Access {
|
||||||
record_var: arg_record_var,
|
record_var: arg_record_var,
|
||||||
ext_var: var_store.fresh(),
|
ext_var: var_store.fresh(),
|
||||||
|
@ -1575,6 +1581,20 @@ fn str_from_utf8_range(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||||
loc_expr: Box::new(no_region(Var(Symbol::ARG_2))),
|
loc_expr: Box::new(no_region(Var(Symbol::ARG_2))),
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
add_var,
|
||||||
|
Access {
|
||||||
|
record_var: arg_record_var,
|
||||||
|
ext_var: var_store.fresh(),
|
||||||
|
field: "count".into(),
|
||||||
|
field_var: var_store.fresh(),
|
||||||
|
loc_expr: Box::new(no_region(Var(Symbol::ARG_2))),
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
ret_var: add_var,
|
||||||
|
},
|
||||||
|
),
|
||||||
(
|
(
|
||||||
start_var,
|
start_var,
|
||||||
RunLowLevel {
|
RunLowLevel {
|
||||||
|
|
|
@ -896,7 +896,7 @@ fn str_from_utf8_range_order_does_not_matter() {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn str_from_utf8_range_out_of_bounds() {
|
fn str_from_utf8_range_out_of_bounds_start_value() {
|
||||||
assert_evals_to!(
|
assert_evals_to!(
|
||||||
indoc!(
|
indoc!(
|
||||||
r#"
|
r#"
|
||||||
|
@ -911,3 +911,37 @@ fn str_from_utf8_range_out_of_bounds() {
|
||||||
RocStr
|
RocStr
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn str_from_utf8_range_count_too_high() {
|
||||||
|
assert_evals_to!(
|
||||||
|
indoc!(
|
||||||
|
r#"
|
||||||
|
bytes = Str.toUtf8 "hello"
|
||||||
|
when Str.fromUtf8Range bytes { start: 0, count: 6 } is
|
||||||
|
Ok _ -> ""
|
||||||
|
Err (BadUtf8 _ _) -> ""
|
||||||
|
Err OutOfBounds -> "out of bounds"
|
||||||
|
"#
|
||||||
|
),
|
||||||
|
RocStr::from("out of bounds"),
|
||||||
|
RocStr
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn str_from_utf8_range_count_too_high_for_start() {
|
||||||
|
assert_evals_to!(
|
||||||
|
indoc!(
|
||||||
|
r#"
|
||||||
|
bytes = Str.toUtf8 "hello"
|
||||||
|
when Str.fromUtf8Range bytes { start: 4, count: 3 } is
|
||||||
|
Ok _ -> ""
|
||||||
|
Err (BadUtf8 _ _) -> ""
|
||||||
|
Err OutOfBounds -> "out of bounds"
|
||||||
|
"#
|
||||||
|
),
|
||||||
|
RocStr::from("out of bounds"),
|
||||||
|
RocStr
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue