]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
warc: Fix undefined behaviour in deconst() function 1465/head
authorAlex Richardson <Alexander.Richardson@cl.cam.ac.uk>
Wed, 9 Dec 2020 16:17:22 +0000 (16:17 +0000)
committerAlex Richardson <Alexander.Richardson@cl.cam.ac.uk>
Wed, 9 Dec 2020 16:18:36 +0000 (16:18 +0000)
Creating a pointer by adding an offset to 0x1 is undefined behaviour and
results in an invalid pointer when running on CHERI systems. Use a
standards-compliant cast via uintptr_t instead.

This was found due to a crash while running the libarchive test suite on a
CHERI-RISC-V system.

libarchive/archive_read_support_format_warc.c

index a582b81ad6dcbbce466305789b88b2d4702299be..27329962d6d105a4681e74e2ea17d892937a67ac 100644 (file)
@@ -443,7 +443,7 @@ _warc_skip(struct archive_read *a)
 static void*
 deconst(const void *c)
 {
-       return (char *)0x1 + (((const char *)c) - (const char *)0x1);
+       return (void *)(uintptr_t)c;
 }
 
 static char*