Skip to content

Commit a055a39

Browse files
author
Steve Lee (POWERSHELL HE/HIM) (from Dev Box)
committed
fix registry to only use value_name when it exists
1 parent f469897 commit a055a39

File tree

1 file changed

+57
-55
lines changed

1 file changed

+57
-55
lines changed

registry/src/registry_helper.rs

Lines changed: 57 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -119,68 +119,70 @@ impl RegistryHelper {
119119
Err(e) => return self.handle_error_or_what_if(e)
120120
};
121121

122-
let value_data = match &self.config.value_data {
123-
Some(value_data) => value_data,
124-
None => &RegistryValueData::None,
125-
};
122+
if let Some(value_name) = &self.config.value_name {
123+
let value_data = match &self.config.value_data {
124+
Some(value_data) => value_data,
125+
None => &RegistryValueData::None,
126+
};
126127

127-
let Ok(value_name) = U16CString::from_str(self.config.value_name.as_ref().unwrap()) else {
128-
return self.handle_error_or_what_if(RegistryError::Utf16Conversion("valueName".to_string()));
129-
};
128+
let Ok(value_name) = U16CString::from_str(&value_name) else {
129+
return self.handle_error_or_what_if(RegistryError::Utf16Conversion("valueName".to_string()));
130+
};
130131

131-
let data = match value_data {
132-
RegistryValueData::String(s) => {
133-
let Ok(utf16) = U16CString::from_str(s) else {
134-
return self.handle_error_or_what_if(RegistryError::Utf16Conversion("valueData".to_string()));
135-
};
136-
Data::String(utf16)
137-
},
138-
RegistryValueData::ExpandString(s) => {
139-
let Ok(utf16) = U16CString::from_str(s) else {
140-
return self.handle_error_or_what_if(RegistryError::Utf16Conversion("valueData".to_string()));
141-
};
142-
Data::ExpandString(utf16)
143-
},
144-
RegistryValueData::Binary(b) => {
145-
Data::Binary(b.clone())
146-
},
147-
RegistryValueData::DWord(d) => {
148-
Data::U32(*d)
149-
},
150-
RegistryValueData::MultiString(m) => {
151-
let mut m16: Vec<UCString<u16>> = Vec::<UCString<u16>>::new();
152-
for s in m {
132+
let data = match value_data {
133+
RegistryValueData::String(s) => {
153134
let Ok(utf16) = U16CString::from_str(s) else {
154135
return self.handle_error_or_what_if(RegistryError::Utf16Conversion("valueData".to_string()));
155136
};
156-
m16.push(utf16);
157-
}
158-
Data::MultiString(m16)
159-
},
160-
RegistryValueData::QWord(q) => {
161-
Data::U64(*q)
162-
},
163-
RegistryValueData::None => {
164-
Data::None
165-
},
166-
};
167-
168-
if self.what_if {
169-
return Ok(Some(Registry {
170-
key_path: self.config.key_path.clone(),
171-
value_data: match data {
172-
Data::None => None,
173-
_ => Some(convert_reg_value(&data)?),
137+
Data::String(utf16)
174138
},
175-
value_name: self.config.value_name.clone(),
176-
metadata: if what_if_metadata.is_empty() { None } else { Some(Metadata { what_if: Some(what_if_metadata) })},
177-
..Default::default()
178-
}));
179-
}
139+
RegistryValueData::ExpandString(s) => {
140+
let Ok(utf16) = U16CString::from_str(s) else {
141+
return self.handle_error_or_what_if(RegistryError::Utf16Conversion("valueData".to_string()));
142+
};
143+
Data::ExpandString(utf16)
144+
},
145+
RegistryValueData::Binary(b) => {
146+
Data::Binary(b.clone())
147+
},
148+
RegistryValueData::DWord(d) => {
149+
Data::U32(*d)
150+
},
151+
RegistryValueData::MultiString(m) => {
152+
let mut m16: Vec<UCString<u16>> = Vec::<UCString<u16>>::new();
153+
for s in m {
154+
let Ok(utf16) = U16CString::from_str(s) else {
155+
return self.handle_error_or_what_if(RegistryError::Utf16Conversion("valueData".to_string()));
156+
};
157+
m16.push(utf16);
158+
}
159+
Data::MultiString(m16)
160+
},
161+
RegistryValueData::QWord(q) => {
162+
Data::U64(*q)
163+
},
164+
RegistryValueData::None => {
165+
Data::None
166+
},
167+
};
180168

181-
if let Some(reg_key) = reg_key {
182-
reg_key.set_value(&value_name, &data)?;
183-
};
169+
if self.what_if {
170+
return Ok(Some(Registry {
171+
key_path: self.config.key_path.clone(),
172+
value_data: match data {
173+
Data::None => None,
174+
_ => Some(convert_reg_value(&data)?),
175+
},
176+
value_name: self.config.value_name.clone(),
177+
metadata: if what_if_metadata.is_empty() { None } else { Some(Metadata { what_if: Some(what_if_metadata) })},
178+
..Default::default()
179+
}));
180+
}
181+
182+
if let Some(reg_key) = reg_key {
183+
reg_key.set_value(&value_name, &data)?;
184+
};
185+
}
184186

185187
if self.what_if {
186188
return Ok(Some(Registry {

0 commit comments

Comments
 (0)