summaryrefslogtreecommitdiff
path: root/lib/share.h
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2021-01-19 08:23:52 +0100
committerDaniel Stenberg <daniel@haxx.se>2021-01-19 08:41:29 +0100
commitabc52bf7cbf300eacabbaf642a0a9ac7af99ddc2 (patch)
treea72fc642f34c95eeeba4fd7ed3d100739596967b /lib/share.h
parent8399d89360db40cafe16ba65b5d9586d5a4fd3eb (diff)
downloadcurl-bagder/handle-diff.tar.gz
urldata: make magic be the first struct fieldbagder/handle-diff
By making the `magic` identifier the same size and at the same place within the structs (easy, multi, share), libcurl will be able to more reliably detect and safely error out if an application passes in the wrong handle to APIs. Easier to detect and less likely to cause crashes if done. Such mixups can't be detected at compile-time due to them being typedefed void pointers - unless `CURL_STRICTER` is defined.
Diffstat (limited to 'lib/share.h')
-rw-r--r--lib/share.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/lib/share.h b/lib/share.h
index 01aa9cda5..222e34ba6 100644
--- a/lib/share.h
+++ b/lib/share.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2021, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -37,8 +37,12 @@
#define CURL_VOLATILE volatile
#endif
+#define CURL_GOOD_SHARE 0x7e117a1e
+#define GOOD_SHARE_HANDLE(x) ((x) && (x)->magic == CURL_GOOD_SHARE)
+
/* this struct is libcurl-private, don't export details */
struct Curl_share {
+ unsigned int magic; /* CURL_GOOD_SHARE */
unsigned int specifier;
CURL_VOLATILE unsigned int dirty;