Skip to content

Commit 94a893b

Browse files
committed
Fix unsafe deserialize derive
1 parent ac13d3c commit 94a893b

2 files changed

Lines changed: 13 additions & 1 deletion

File tree

src/hotkey.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ impl HotkeyModifier {
7373
///
7474
/// See also <https://learn.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-ishelllinkw-gethotkey>.
7575
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
76-
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
76+
#[cfg_attr(feature = "serde", derive(serde::Serialize))]
7777
pub struct Hotkey {
7878
/// Virtual key code
7979
key: VirtualKey,
@@ -205,3 +205,14 @@ impl fmt::Display for Hotkey {
205205
}
206206
}
207207
}
208+
209+
#[cfg(feature = "serde")]
210+
impl<'de> serde::Deserialize<'de> for Hotkey {
211+
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
212+
where
213+
D: serde::Deserializer<'de>,
214+
{
215+
let raw = u16::deserialize(deserializer)?;
216+
Hotkey::from_raw(raw).ok_or_else(|| serde::de::Error::custom("invalid hotkey"))
217+
}
218+
}

src/shortcut.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ use crate::{
2727
///
2828
/// See also <https://learn.microsoft.com/en-us/windows/win32/api/shobjidl_core/nn-shobjidl_core-ishelllinka>
2929
#[derive(Debug, Clone, Default)]
30+
#[allow(clippy::unsafe_derive_deserialize)]
3031
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3132
pub struct Shortcut {
3233
/// Path to the target executable or file.

0 commit comments

Comments
 (0)