summaryrefslogtreecommitdiff
path: root/Kernel/Net
diff options
context:
space:
mode:
authorTimothy Flynn <trflynn89@pm.me>2023-01-13 15:48:09 -0500
committerTim Flynn <trflynn89@pm.me>2023-01-13 18:50:47 -0500
commitafc0e461e123489808930e5433f0d8b3f95d9256 (patch)
tree0ac45b4bbc1c55890555cddf394b2d056502e9ea /Kernel/Net
parent3de75f6436a1e729691a40c35e8e8a5be5aa2f41 (diff)
downloadserenity-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.h14
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(); \
})
}