diff --git a/kclvm/runtime/src/net/mod.rs b/kclvm/runtime/src/net/mod.rs index d58294c40..4abce8758 100644 --- a/kclvm/runtime/src/net/mod.rs +++ b/kclvm/runtime/src/net/mod.rs @@ -414,18 +414,17 @@ pub extern "C" fn kclvm_net_parse_CIDR( let mask = parts[1]; if let Ok(ip) = Ipv4Addr::from_str(ip) { if let Ok(mask) = mask.parse::() { - return ValueRef::dict( - vec![ - ("ip", ValueRef::str(ip.to_string().as_str())), - ("mask", ValueRef::i_int(mask as i64)), - ], - None, - ) + let ip_value = ValueRef::str(ip.to_string().as_str()); + let mask_value = ValueRef::int(mask as i64); + return ValueRef::dict(Some(&[ + ("ip", &ip_value), + ("mask", &mask_value), + ])) .into_raw(ctx); } } } - return ValueRef::dict(vec![], None).into_raw(ctx); + return ValueRef::dict(None).into_raw(ctx); } panic!("parse_CIDR() missing 1 required positional argument: 'cidr'"); @@ -455,7 +454,8 @@ pub extern "C" fn kclvm_net_hosts_in_CIDR ( let ip = u32::from_be_bytes(ip.octets()) + i; hosts.push(ValueRef::str(Ipv4Addr::from(ip).to_string().as_str())); } - return ValueRef::list(Some(hosts)).into_raw(ctx); + let hosts_refs: Vec<&ValueRef> = hosts.iter().collect(); + return ValueRef::list(Some(&hosts_refs[..])).into_raw(ctx); } } } @@ -489,7 +489,8 @@ pub extern "C" fn kclvm_net_subnets_from_CIDR ( let ip = u32::from_be_bytes(ip.octets()) + i; subnets.push(ValueRef::str(format!("{}/{}", Ipv4Addr::from(ip), mask).as_str())); } - return ValueRef::list(Some(subnets)).into_raw(ctx); + let subnets_refs: Vec<&ValueRef> = subnets.iter().collect(); + return ValueRef::list(Some(&subnets_refs)).into_raw(ctx); } } } diff --git a/test/grammar/builtins/net/is_ip_2/main.k b/test/grammar/builtins/net/is_ip_2/main.k index d215848d3..bed34c0c5 100644 --- a/test/grammar/builtins/net/is_ip_2/main.k +++ b/test/grammar/builtins/net/is_ip_2/main.k @@ -6,3 +6,8 @@ isip2 = net.is_link_local_multicast_IP("224.0.0.0") isip3 = net.is_link_local_unicast_IP("fe80::2012:1") isip4 = net.is_global_unicast_IP("220.181.108.89") isip5 = net.is_unspecified_IP("0.0.0.0") +isip6 = net.parse_CIDR("192.168.1.0/24") +isip7 = net.hosts_in_CIDR("192.168.1.0/24") +isip8 = net.subnets_from_CIDR("192.168.1.0/24") +isip9 = net.is_IP_in_CIDR("192.168.1.1", "192.168.1.0/24") +