diff options
author | Timothy Flynn <trflynn89@pm.me> | 2023-01-13 15:48:09 -0500 |
---|---|---|
committer | Tim Flynn <trflynn89@pm.me> | 2023-01-13 18:50:47 -0500 |
commit | afc0e461e123489808930e5433f0d8b3f95d9256 (patch) | |
tree | 0ac45b4bbc1c55890555cddf394b2d056502e9ea /Kernel/Net | |
parent | 3de75f6436a1e729691a40c35e8e8a5be5aa2f41 (diff) | |
download | serenity-afc0e461e123489808930e5433f0d8b3f95d9256.zip |
AK+Everywhere: Disallow returning a reference from a fallible expression
This will silently make a copy. Rather than masking this behavior, let's
explicitly disallow it.
Diffstat (limited to 'Kernel/Net')
-rw-r--r-- | Kernel/Net/Socket.h | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/Kernel/Net/Socket.h b/Kernel/Net/Socket.h index 63f92aa270..b5bc494a77 100644 --- a/Kernel/Net/Socket.h +++ b/Kernel/Net/Socket.h @@ -184,12 +184,14 @@ private: }; // This is a special variant of TRY() that also updates the socket's SO_ERROR field on error. -#define SOCKET_TRY(expression) \ - ({ \ - auto result = (expression); \ - if (result.is_error()) \ - return set_so_error(result.release_error()); \ - result.release_value(); \ +#define SOCKET_TRY(expression) \ + ({ \ + auto result = (expression); \ + if (result.is_error()) \ + return set_so_error(result.release_error()); \ + static_assert(!IsLvalueReference<decltype(result.release_value())>, \ + "Do not return a reference from a fallible expression"); \ + result.release_value(); \ }) } |