mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-09-30 00:31:14 +00:00
DHCPClient: Avoid unaligned access when parsing options
Just casting a void* to a T* and dereferencing it is not particularly safe. Also UBSAN was complaining. Use memcpy into a default constructed T instead and require that the T be trivially copyable.
This commit is contained in:
parent
723b8586ec
commit
1a0eed705c
Notes:
sideshowbarker
2024-07-18 17:18:58 +09:00
Author: https://github.com/ADKaster Commit: https://github.com/SerenityOS/serenity/commit/1a0eed705ce Pull-request: https://github.com/SerenityOS/serenity/pull/7434 Reviewed-by: https://github.com/awesomekling
|
@ -114,7 +114,7 @@ struct AK::Traits<DHCPOption> : public GenericTraits<DHCPOption> {
|
|||
|
||||
struct ParsedDHCPv4Options {
|
||||
template<typename T>
|
||||
Optional<const T> get(DHCPOption option_name) const
|
||||
Optional<const T> get(DHCPOption option_name) const requires(IsTriviallyCopyable<T>)
|
||||
{
|
||||
auto option = options.get(option_name);
|
||||
if (!option.has_value()) {
|
||||
|
@ -123,7 +123,9 @@ struct ParsedDHCPv4Options {
|
|||
auto& value = option.value();
|
||||
if (value.length != sizeof(T))
|
||||
return {};
|
||||
return *(const T*)value.value;
|
||||
T t;
|
||||
__builtin_memcpy(&t, value.value, value.length);
|
||||
return t;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
|
|
Loading…
Reference in a new issue