Skip to content

Commit 36fb036

Browse files
jonatackvasild
andcommitted
p2p: allow NetPermissions::ClearFlag() only with PF_ISIMPLICIT
NetPermissions::ClearFlag() is currently only called in the codebase with an `f` value of NetPermissionFlags::PF_ISIMPLICIT. If that should change in the future, ClearFlag() should not be called with `f` being a subflag of a multiflag, e.g. NetPermissionFlags::PF_RELAY or NetPermissionFlags::PF_DOWNLOAD, as that would leave `flags` in an invalid state corresponding to none of the existing NetPermissionFlags. Therefore, allow only calling ClearFlag with the implicit flag for now. Co-authored-by: Vasil Dimov <[email protected]>
1 parent 4e0d578 commit 36fb036

File tree

2 files changed

+8
-2
lines changed

2 files changed

+8
-2
lines changed

src/net_permissions.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,14 @@ class NetPermissions
5151
{
5252
flags = static_cast<NetPermissionFlags>(flags | f);
5353
}
54+
//! ClearFlag is only called with `f` == NetPermissionFlags::PF_ISIMPLICIT.
55+
//! If that should change in the future, be aware that ClearFlag should not
56+
//! be called with a subflag of a multiflag, e.g. NetPermissionFlags::PF_RELAY
57+
//! or NetPermissionFlags::PF_DOWNLOAD, as that would leave `flags` in an
58+
//! invalid state corresponding to none of the existing flags.
5459
static inline void ClearFlag(NetPermissionFlags& flags, NetPermissionFlags f)
5560
{
61+
assert(f == NetPermissionFlags::PF_ISIMPLICIT);
5662
flags = static_cast<NetPermissionFlags>(flags & ~f);
5763
}
5864
};

src/test/fuzz/net_permissions.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ FUZZ_TARGET(net_permissions)
2525
(void)NetPermissions::ToStrings(net_whitebind_permissions.m_flags);
2626
(void)NetPermissions::AddFlag(net_whitebind_permissions.m_flags, net_permission_flags);
2727
assert(NetPermissions::HasFlag(net_whitebind_permissions.m_flags, net_permission_flags));
28-
(void)NetPermissions::ClearFlag(net_whitebind_permissions.m_flags, net_permission_flags);
28+
(void)NetPermissions::ClearFlag(net_whitebind_permissions.m_flags, NetPermissionFlags::PF_ISIMPLICIT);
2929
(void)NetPermissions::ToStrings(net_whitebind_permissions.m_flags);
3030
}
3131

@@ -35,7 +35,7 @@ FUZZ_TARGET(net_permissions)
3535
(void)NetPermissions::ToStrings(net_whitelist_permissions.m_flags);
3636
(void)NetPermissions::AddFlag(net_whitelist_permissions.m_flags, net_permission_flags);
3737
assert(NetPermissions::HasFlag(net_whitelist_permissions.m_flags, net_permission_flags));
38-
(void)NetPermissions::ClearFlag(net_whitelist_permissions.m_flags, net_permission_flags);
38+
(void)NetPermissions::ClearFlag(net_whitelist_permissions.m_flags, NetPermissionFlags::PF_ISIMPLICIT);
3939
(void)NetPermissions::ToStrings(net_whitelist_permissions.m_flags);
4040
}
4141
}

0 commit comments

Comments
 (0)