Skip to content

Commit 5d4f47a

Browse files
authored
Fix cstr macro leak (#123)
1 parent f17dd8d commit 5d4f47a

File tree

6 files changed

+31
-25
lines changed

6 files changed

+31
-25
lines changed

crates/openvino/src/core.rs

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,10 @@ impl Core {
3737

3838
/// Construct a new OpenVINO [`Core`] with config specified in an xml file.
3939
pub fn new_with_config(xml_config_file: &str) -> std::result::Result<Core, SetupError> {
40+
let xml_config_file = cstr!(xml_config_file);
4041
let mut ptr = std::ptr::null_mut();
4142
try_unsafe!(ov_core_create_with_config(
42-
cstr!(xml_config_file.to_string()),
43+
xml_config_file.as_ptr(),
4344
std::ptr::addr_of_mut!(ptr)
4445
))?;
4546
Ok(Core { ptr })
@@ -56,7 +57,7 @@ impl Core {
5657
};
5758
try_unsafe!(ov_core_get_versions_by_device_name(
5859
self.ptr,
59-
device_name,
60+
device_name.as_ptr(),
6061
std::ptr::addr_of_mut!(ov_version_list)
6162
))?;
6263

@@ -110,7 +111,7 @@ impl Core {
110111
try_unsafe!(ov_core_get_property(
111112
self.ptr,
112113
EMPTY_C_STR.as_ptr(),
113-
ov_prop_key,
114+
ov_prop_key.as_ptr(),
114115
std::ptr::addr_of_mut!(ov_prop_value)
115116
))?;
116117
let rust_prop = unsafe { CStr::from_ptr(ov_prop_value) }
@@ -127,8 +128,8 @@ impl Core {
127128
try_unsafe!(ov_core_set_property(
128129
self.ptr,
129130
EMPTY_C_STR.as_ptr(),
130-
ov_prop_key,
131-
ov_prop_value,
131+
ov_prop_key.as_ptr(),
132+
ov_prop_value.as_ptr(),
132133
))?;
133134
Ok(())
134135
}
@@ -152,8 +153,8 @@ impl Core {
152153
let mut ov_prop_value = std::ptr::null_mut();
153154
try_unsafe!(ov_core_get_property(
154155
self.ptr,
155-
ov_device_name,
156-
ov_prop_key,
156+
ov_device_name.as_ptr(),
157+
ov_prop_key.as_ptr(),
157158
std::ptr::addr_of_mut!(ov_prop_value)
158159
))?;
159160
let rust_prop = unsafe { CStr::from_ptr(ov_prop_value) }
@@ -175,9 +176,9 @@ impl Core {
175176
let ov_prop_value = cstr!(value);
176177
try_unsafe!(ov_core_set_property(
177178
self.ptr,
178-
ov_device_name,
179-
ov_prop_key,
180-
ov_prop_value,
179+
ov_device_name.as_ptr(),
180+
ov_prop_key.as_ptr(),
181+
ov_prop_value.as_ptr(),
181182
))?;
182183
Ok(())
183184
}
@@ -197,11 +198,13 @@ impl Core {
197198
/// Read a Model from a pair of files: `model_path` points to an XML file containing the
198199
/// OpenVINO model IR and `weights_path` points to the binary weights file.
199200
pub fn read_model_from_file(&mut self, model_path: &str, weights_path: &str) -> Result<Model> {
201+
let model_path = cstr!(model_path);
202+
let weights_path = cstr!(weights_path);
200203
let mut ptr = std::ptr::null_mut();
201204
try_unsafe!(ov_core_read_model(
202205
self.ptr,
203-
cstr!(model_path),
204-
cstr!(weights_path),
206+
model_path.as_ptr(),
207+
weights_path.as_ptr(),
205208
std::ptr::addr_of_mut!(ptr)
206209
))?;
207210
Ok(Model::from_ptr(ptr))

crates/openvino/src/layout.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,10 @@ impl Layout {
1616

1717
/// Creates a new layout with the given description.
1818
pub fn new(layout_desc: &str) -> Result<Self> {
19+
let layout_desc = cstr!(layout_desc);
1920
let mut layout = std::ptr::null_mut();
2021
try_unsafe!(ov_layout_create(
21-
cstr!(layout_desc),
22+
layout_desc.as_ptr(),
2223
std::ptr::addr_of_mut!(layout)
2324
))?;
2425
Ok(Self { ptr: layout })

crates/openvino/src/model.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ impl CompiledModel {
150150
let mut port = std::ptr::null_mut();
151151
try_unsafe!(ov_compiled_model_input_by_name(
152152
self.ptr,
153-
name,
153+
name.as_ptr(),
154154
std::ptr::addr_of_mut!(port)
155155
))?;
156156
Ok(Node::from_ptr(port))
@@ -190,7 +190,7 @@ impl CompiledModel {
190190
let mut port = std::ptr::null_mut();
191191
try_unsafe!(ov_compiled_model_output_by_name(
192192
self.ptr,
193-
name,
193+
name.as_ptr(),
194194
std::ptr::addr_of_mut!(port)
195195
))?;
196196
Ok(Node::from_ptr(port))
@@ -212,7 +212,7 @@ impl CompiledModel {
212212
let mut ov_prop_value = std::ptr::null_mut();
213213
try_unsafe!(ov_compiled_model_get_property(
214214
self.ptr,
215-
ov_prop_key,
215+
ov_prop_key.as_ptr(),
216216
std::ptr::addr_of_mut!(ov_prop_value)
217217
))?;
218218
let rust_prop = unsafe { CStr::from_ptr(ov_prop_value) }.to_string_lossy();
@@ -225,8 +225,8 @@ impl CompiledModel {
225225
let ov_prop_value = cstr!(value);
226226
try_unsafe!(ov_compiled_model_set_property(
227227
self.ptr,
228-
ov_prop_key,
229-
ov_prop_value,
228+
ov_prop_key.as_ptr(),
229+
ov_prop_value.as_ptr(),
230230
))?;
231231
Ok(())
232232
}

crates/openvino/src/prepostprocess.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,11 @@ impl Pipeline {
8484

8585
/// Retrieves the input information by name.
8686
pub fn get_input_info_by_name(&self, name: &str) -> Result<InputInfo> {
87+
let name = cstr!(name);
8788
let mut ptr = std::ptr::null_mut();
8889
try_unsafe!(ov_preprocess_prepostprocessor_get_input_info_by_name(
8990
self.ptr,
90-
cstr!(name),
91+
name.as_ptr(),
9192
std::ptr::addr_of_mut!(ptr)
9293
))?;
9394

@@ -96,10 +97,11 @@ impl Pipeline {
9697

9798
/// Retrieves the output information by name.
9899
pub fn get_output_info_by_name(&self, name: &str) -> Result<OutputInfo> {
100+
let name = cstr!(name);
99101
let mut ptr = std::ptr::null_mut();
100102
try_unsafe!(ov_preprocess_prepostprocessor_get_output_info_by_name(
101103
self.ptr,
102-
cstr!(name),
104+
name.as_ptr(),
103105
std::ptr::addr_of_mut!(ptr)
104106
))?;
105107
Ok(OutputInfo { ptr })

crates/openvino/src/request.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,20 +27,22 @@ impl InferRequest {
2727

2828
/// Assign a [`Tensor`] to the input on the model.
2929
pub fn set_tensor(&mut self, name: &str, tensor: &Tensor) -> Result<()> {
30+
let name = cstr!(name);
3031
try_unsafe!(ov_infer_request_set_tensor(
3132
self.ptr,
32-
cstr!(name),
33+
name.as_ptr(),
3334
tensor.as_ptr()
3435
))?;
3536
Ok(())
3637
}
3738

3839
/// Retrieve a [`Tensor`] from the output on the model.
3940
pub fn get_tensor(&self, name: &str) -> Result<Tensor> {
41+
let name = cstr!(name);
4042
let mut tensor = std::ptr::null_mut();
4143
try_unsafe!(ov_infer_request_get_tensor(
4244
self.ptr,
43-
cstr!(name),
45+
name.as_ptr(),
4446
std::ptr::addr_of_mut!(tensor)
4547
))?;
4648
Ok(Tensor::from_ptr(tensor))

crates/openvino/src/util.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,7 @@ pub(crate) type Result<T> = std::result::Result<T, InferenceError>;
88
#[macro_export]
99
macro_rules! cstr {
1010
($str: expr) => {
11-
std::ffi::CString::new($str)
12-
.expect("a valid C string")
13-
.into_raw()
11+
std::ffi::CString::new($str).expect("a valid C string")
1412
};
1513
}
1614

0 commit comments

Comments
 (0)