summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Eissing <stefan@eissing.org>2023-03-22 10:25:24 +0100
committerDaniel Stenberg <daniel@haxx.se>2023-03-22 13:57:20 +0100
commit5d1ecbcbd2eaea80485374afff09d04245e05e63 (patch)
tree42dbbbbd73668c6b8a14a7d7092985214fc3f7fe
parent8a83bda0a2b013aa32a9de38e91f411069fec0ac (diff)
downloadcurl-5d1ecbcbd2eaea80485374afff09d04245e05e63.tar.gz
multi: add handle asserts in DEBUG builds
For GOOD_EASY_HANDLE and GOOD_MULTI_HANDLE checks - allow NULL pointers to "just" return an error as before - fail hard on nun-NULL pointers that no longer show the MAGICs Closes #10812
-rw-r--r--lib/multi.c9
-rw-r--r--lib/urldata.h9
2 files changed, 18 insertions, 0 deletions
diff --git a/lib/multi.c b/lib/multi.c
index 731b2598f..262321d9d 100644
--- a/lib/multi.c
+++ b/lib/multi.c
@@ -90,8 +90,17 @@
#define CURL_MULTI_HANDLE 0x000bab1e
+#ifdef DEBUGBUILD
+/* On a debug build, we want to fail hard on multi handles that
+ * are not NULL, but no longer have the MAGIC touch. This gives
+ * us early warning on things only discovered by valgrind otherwise. */
+#define GOOD_MULTI_HANDLE(x) \
+ (((x) && (x)->magic == CURL_MULTI_HANDLE)? TRUE: \
+ (DEBUGASSERT(!(x)), FALSE))
+#else
#define GOOD_MULTI_HANDLE(x) \
((x) && (x)->magic == CURL_MULTI_HANDLE)
+#endif
static CURLMcode singlesocket(struct Curl_multi *multi,
struct Curl_easy *data);
diff --git a/lib/urldata.h b/lib/urldata.h
index 8b54518d2..86b3da718 100644
--- a/lib/urldata.h
+++ b/lib/urldata.h
@@ -208,8 +208,17 @@ typedef CURLcode (*Curl_datastream)(struct Curl_easy *data,
#define UPLOADBUFFER_MIN CURL_MAX_WRITE_SIZE
#define CURLEASY_MAGIC_NUMBER 0xc0dedbadU
+#ifdef DEBUGBUILD
+/* On a debug build, we want to fail hard on easy handles that
+ * are not NULL, but no longer have the MAGIC touch. This gives
+ * us early warning on things only discovered by valgrind otherwise. */
+#define GOOD_EASY_HANDLE(x) \
+ (((x) && ((x)->magic == CURLEASY_MAGIC_NUMBER))? TRUE: \
+ (DEBUGASSERT(!(x)), FALSE))
+#else
#define GOOD_EASY_HANDLE(x) \
((x) && ((x)->magic == CURLEASY_MAGIC_NUMBER))
+#endif
#ifdef HAVE_GSSAPI
/* Types needed for krb5-ftp connections */