]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
unit3214: fix to pass on systems with >=128-bit pointers
authorCollin Funk <collin.funk1@gmail.com>
Sat, 11 Jul 2026 07:47:16 +0000 (00:47 -0700)
committerViktor Szakats <commit@vsz.me>
Tue, 14 Jul 2026 01:14:49 +0000 (03:14 +0200)
E.g. on CHERI pointers are 128 bits [1]. This causes the unit3214 test
to fail, which was written with more traditional platforms in mind. Here
is the output of log/stderr3214:

```
URL: -
BAD: struct Curl_easy is 7984 bytes, allowed to be 5370: 2614 bytes too big
BAD: struct connectdata is 1408 bytes, allowed to be 1300: 108 bytes too big
BAD: struct Curl_multi is 1248 bytes, allowed to be 850: 398 bytes too big
BAD: struct curl_httppost is 224 bytes, allowed to be 112: 112 bytes too big
BAD: struct curl_slist is 32 bytes, allowed to be 16: 16 bytes too big
BAD: struct curl_khkey is 32 bytes, allowed to be 24: 8 bytes too big
BAD: struct curl_hstsentry is 48 bytes, allowed to be 40: 8 bytes too big
BAD: struct curl_mime is 144 bytes, allowed to be 96: 48 bytes too big
BAD: struct curl_mimepart is 592 bytes, allowed to be 440: 152 bytes too big
BAD: struct curl_certinfo is 32 bytes, allowed to be 16: 16 bytes too big
BAD: struct curl_tlssessioninfo is 32 bytes, allowed to be 16: 16 bytes too big
BAD: struct curl_blob is 32 bytes, allowed to be 24: 8 bytes too big
BAD: struct CURLMsg is 48 bytes, allowed to be 24: 24 bytes too big
BAD: struct curl_header is 80 bytes, allowed to be 48: 32 bytes too big
Test ended with result 14
```

Multiply the allowed size on systems with larger than 64-bit pointers.

[1] https://www.cl.cam.ac.uk/research/security/ctsrd/pdfs/20171017a-cheri-poster.pdf

Closes #22299

tests/unit/unit3214.c

index 8f22f53cc64d46be07e9f55dcee43102fb4259bf..191ef2f3f69567d88f136927d04eeb403ba3930d 100644 (file)
 
 static void checksize(const char *name, size_t size, size_t allowed)
 {
+  /* Some platforms, e.g., CHERI, have 128-bit pointers. Allow structs to be
+     double the size of what we would typically expect. */
+  if(sizeof(void *) > 8)
+    allowed *= sizeof(void *) / 8;
+
   if(size > allowed) {
     curl_mfprintf(stderr, "BAD: struct %s is %zu bytes, "
                   "allowed to be %zu: %zu bytes too big\n",
@@ -39,7 +44,8 @@ static void checksize(const char *name, size_t size, size_t allowed)
   }
 }
 
-/* the maximum sizes we allow specific structs to grow to */
+/* The maximum sizes we allow specific structs to grow to.
+   These sizes were chosen with platforms with 64-bit pointers in mind. */
 #define MAX_CURL_EASY           5370
 #define MAX_CONNECTDATA         1300
 #define MAX_CURL_MULTI          850