Skip to content

Commit 003b39e

Browse files
Use from_normalized_str when parsing extension names in EST (#1789)
Signed-off-by: John Kastner <[email protected]>
1 parent 84b1e9e commit 003b39e

File tree

1 file changed

+12
-10
lines changed

1 file changed

+12
-10
lines changed

cedar-policy-core/src/est/expr.rs

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ use super::FromJsonError;
1919
use crate::ast::expr_allows_errors::AstExprErrorKind;
2020
#[cfg(feature = "tolerant-ast")]
2121
use crate::ast::Infallible;
22-
use crate::ast::{self, BoundedDisplay, EntityUID};
22+
use crate::ast::{self, BoundedDisplay, EntityUID, Name};
2323
use crate::entities::json::{
2424
err::EscapeKind, err::JsonDeserializationError, err::JsonDeserializationErrorContext,
2525
CedarValueJson, FnAndArgs,
@@ -31,6 +31,7 @@ use crate::parser::cst_to_ast;
3131
use crate::parser::err::ParseErrors;
3232
use crate::parser::Node;
3333
use crate::parser::{cst, Loc};
34+
use crate::FromNormalizedStr;
3435
use itertools::Itertools;
3536
use serde::{de::Visitor, Deserialize, Serialize};
3637
use serde_with::serde_as;
@@ -1034,22 +1035,23 @@ impl Expr {
10341035
.into_iter()
10351036
.next()
10361037
.expect("already checked that len was 1");
1037-
let fn_name: ast::Name = fn_name.parse().map_err(|errs| {
1038+
let fn_name = Name::from_normalized_str(&fn_name).map_err(|errs| {
10381039
JsonDeserializationError::parse_escape(
10391040
EscapeKind::Extension,
10401041
fn_name,
10411042
errs,
10421043
)
10431044
})?;
1044-
if !cst_to_ast::is_known_extension_func_name(&fn_name) {
1045-
return Err(FromJsonError::UnknownExtensionFunction(fn_name));
1045+
if cst_to_ast::is_known_extension_func_name(&fn_name) {
1046+
Ok(ast::Expr::call_extension_fn(
1047+
fn_name,
1048+
args.into_iter()
1049+
.map(|arg| arg.try_into_ast(id))
1050+
.collect::<Result<_, _>>()?,
1051+
))
1052+
} else {
1053+
Err(FromJsonError::UnknownExtensionFunction(fn_name))
10461054
}
1047-
Ok(ast::Expr::call_extension_fn(
1048-
fn_name,
1049-
args.into_iter()
1050-
.map(|arg| arg.try_into_ast(id))
1051-
.collect::<Result<_, _>>()?,
1052-
))
10531055
}
10541056
_ => Err(FromJsonError::MultipleOperators {
10551057
ops: call.into_keys().collect(),

0 commit comments

Comments
 (0)