Fix misuse of uint64_t as size_t
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Mon, 4 Aug 2014 02:50:00 +0000 (22:50 -0400)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Mon, 4 Aug 2014 03:53:49 +0000 (23:53 -0400)
They have different size on 32 bit, so they are really not interchangable.

src/journal/compress.c
src/journal/compress.h
src/journal/journal-file.c
src/journal/journal-file.h
src/journal/journal-verify.c
src/journal/journald-native.c
src/journal/sd-journal.c
src/journal/test-compress-benchmark.c
src/journal/test-compress.c
src/libudev/libudev-hwdb.c

index ee18bc8..52a4c10 100644 (file)
@@ -47,7 +47,7 @@ static const char* const object_compressed_table[_OBJECT_COMPRESSED_MAX] = {
 
 DEFINE_STRING_TABLE_LOOKUP(object_compressed, int);
 
-int compress_blob_xz(const void *src, uint64_t src_size, void *dst, uint64_t *dst_size) {
+int compress_blob_xz(const void *src, uint64_t src_size, void *dst, size_t *dst_size) {
 #ifdef HAVE_XZ
         static const lzma_options_lzma opt = {
                 1u << 20u, NULL, 0, LZMA_LC_DEFAULT, LZMA_LP_DEFAULT,
@@ -82,7 +82,7 @@ int compress_blob_xz(const void *src, uint64_t src_size, void *dst, uint64_t *ds
 #endif
 }
 
-int compress_blob_lz4(const void *src, uint64_t src_size, void *dst, uint64_t *dst_size) {
+int compress_blob_lz4(const void *src, uint64_t src_size, void *dst, size_t *dst_size) {
 #ifdef HAVE_LZ4
         int r;
 
@@ -112,12 +112,12 @@ int compress_blob_lz4(const void *src, uint64_t src_size, void *dst, uint64_t *d
 
 
 int decompress_blob_xz(const void *src, uint64_t src_size,
-                       void **dst, uint64_t *dst_alloc_size, uint64_t* dst_size, uint64_t dst_max) {
+                       void **dst, size_t *dst_alloc_size, size_t* dst_size, size_t dst_max) {
 
 #ifdef HAVE_XZ
         _cleanup_(lzma_end) lzma_stream s = LZMA_STREAM_INIT;
         lzma_ret ret;
-        uint64_t space;
+        size_t space;
 
         assert(src);
         assert(src_size > 0);
@@ -130,7 +130,7 @@ int decompress_blob_xz(const void *src, uint64_t src_size,
         if (ret != LZMA_OK)
                 return -ENOMEM;
 
-        space = MIN(src_size * 2, dst_max ?: (uint64_t) -1);
+        space = MIN(src_size * 2, dst_max ?: (size_t) -1);
         if (!greedy_realloc(dst, dst_alloc_size, space, 1))
                 return -ENOMEM;
 
@@ -141,7 +141,7 @@ int decompress_blob_xz(const void *src, uint64_t src_size,
         s.avail_out = space;
 
         for (;;) {
-                uint64_t used;
+                size_t used;
 
                 ret = lzma_code(&s, LZMA_FINISH);
 
@@ -156,7 +156,7 @@ int decompress_blob_xz(const void *src, uint64_t src_size,
                         return -ENOBUFS;
 
                 used = space - s.avail_out;
-                space = MIN(2 * space, dst_max ?: (uint64_t) -1);
+                space = MIN(2 * space, dst_max ?: (size_t) -1);
                 if (!greedy_realloc(dst, dst_alloc_size, space, 1))
                         return -ENOMEM;
 
@@ -172,12 +172,11 @@ int decompress_blob_xz(const void *src, uint64_t src_size,
 }
 
 int decompress_blob_lz4(const void *src, uint64_t src_size,
-                        void **dst, uint64_t *dst_alloc_size, uint64_t* dst_size, uint64_t dst_max) {
+                        void **dst, size_t *dst_alloc_size, size_t* dst_size, size_t dst_max) {
 
 #ifdef HAVE_LZ4
         char* out;
-        uint64_t size;
-        int r;
+        int r, size; /* LZ4 uses int for size */
 
         assert(src);
         assert(src_size > 0);
@@ -190,7 +189,9 @@ int decompress_blob_lz4(const void *src, uint64_t src_size,
                 return -EBADMSG;
 
         size = le64toh( *(le64_t*)src );
-        if (size > *dst_alloc_size) {
+        if (size < 0 || (le64_t) size != *(le64_t*)src)
+                return -EFBIG;
+        if ((size_t) size > *dst_alloc_size) {
                 out = realloc(*dst, size);
                 if (!out)
                         return -ENOMEM;
@@ -200,7 +201,7 @@ int decompress_blob_lz4(const void *src, uint64_t src_size,
                 out = *dst;
 
         r = LZ4_decompress_safe(src + 8, out, src_size - 8, size);
-        if (r < 0 || (uint64_t) r != size)
+        if (r < 0 || r != size)
                 return -EBADMSG;
 
         *dst_size = size;
@@ -212,7 +213,7 @@ int decompress_blob_lz4(const void *src, uint64_t src_size,
 
 int decompress_blob(int compression,
                     const void *src, uint64_t src_size,
-                    void **dst, uint64_t *dst_alloc_size, uint64_t* dst_size, uint64_t dst_max) {
+                    void **dst, size_t *dst_alloc_size, size_t* dst_size, size_t dst_max) {
         if (compression == OBJECT_COMPRESSED_XZ)
                 return decompress_blob_xz(src, src_size,
                                           dst, dst_alloc_size, dst_size, dst_max);
@@ -225,8 +226,8 @@ int decompress_blob(int compression,
 
 
 int decompress_startswith_xz(const void *src, uint64_t src_size,
-                             void **buffer, uint64_t *buffer_size,
-                             const void *prefix, uint64_t prefix_len,
+                             void **buffer, size_t *buffer_size,
+                             const void *prefix, size_t prefix_len,
                              uint8_t extra) {
 
 #ifdef HAVE_XZ
@@ -284,8 +285,8 @@ int decompress_startswith_xz(const void *src, uint64_t src_size,
 }
 
 int decompress_startswith_lz4(const void *src, uint64_t src_size,
-                              void **buffer, uint64_t *buffer_size,
-                              const void *prefix, uint64_t prefix_len,
+                              void **buffer, size_t *buffer_size,
+                              const void *prefix, size_t prefix_len,
                               uint8_t extra) {
 #ifdef HAVE_LZ4
         /* Checks whether the decompressed blob starts with the
@@ -325,8 +326,8 @@ int decompress_startswith_lz4(const void *src, uint64_t src_size,
 
 int decompress_startswith(int compression,
                           const void *src, uint64_t src_size,
-                          void **buffer, uint64_t *buffer_size,
-                          const void *prefix, uint64_t prefix_len,
+                          void **buffer, size_t *buffer_size,
+                          const void *prefix, size_t prefix_len,
                           uint8_t extra) {
         if (compression == OBJECT_COMPRESSED_XZ)
                 return decompress_startswith_xz(src, src_size,
@@ -407,7 +408,7 @@ int compress_stream_xz(int fdf, int fdt, off_t max_bytes) {
                                 return errno ? -errno : -EIO;
 
                         if (ret == LZMA_STREAM_END) {
-                                log_debug("XZ compression finished (%zu -> %zu bytes, %.1f%%)",
+                                log_debug("XZ compression finished (%"PRIu64" -> %"PRIu64" bytes, %.1f%%)",
                                           s.total_in, s.total_out,
                                           (double) s.total_out / s.total_in * 100);
 
@@ -566,7 +567,7 @@ int decompress_stream_xz(int fdf, int fdt, off_t max_bytes) {
                                 return errno ? -errno : -EIO;
 
                         if (ret == LZMA_STREAM_END) {
-                                log_debug("XZ decompression finished (%zu -> %zu bytes, %.1f%%)",
+                                log_debug("XZ decompression finished (%"PRIu64" -> %"PRIu64" bytes, %.1f%%)",
                                           s.total_in, s.total_out,
                                           (double) s.total_out / s.total_in * 100);
 
index 92621ba..136dda6 100644 (file)
 const char* object_compressed_to_string(int compression);
 int object_compressed_from_string(const char *compression);
 
-int compress_blob_xz(const void *src, uint64_t src_size, void *dst, uint64_t *dst_size);
-int compress_blob_lz4(const void *src, uint64_t src_size, void *dst, uint64_t *dst_size);
+int compress_blob_xz(const void *src, uint64_t src_size, void *dst, size_t *dst_size);
+int compress_blob_lz4(const void *src, uint64_t src_size, void *dst, size_t *dst_size);
 
-static inline int compress_blob(const void *src, uint64_t src_size, void *dst, uint64_t *dst_size) {
+static inline int compress_blob(const void *src, uint64_t src_size, void *dst, size_t *dst_size) {
         int r;
 #ifdef HAVE_LZ4
         r = compress_blob_lz4(src, src_size, dst, dst_size);
@@ -48,25 +48,25 @@ static inline int compress_blob(const void *src, uint64_t src_size, void *dst, u
 }
 
 int decompress_blob_xz(const void *src, uint64_t src_size,
-                       void **dst, uint64_t *dst_alloc_size, uint64_t* dst_size, uint64_t dst_max);
+                       void **dst, size_t *dst_alloc_size, size_t* dst_size, size_t dst_max);
 int decompress_blob_lz4(const void *src, uint64_t src_size,
-                        void **dst, uint64_t *dst_alloc_size, uint64_t* dst_size, uint64_t dst_max);
+                        void **dst, size_t *dst_alloc_size, size_t* dst_size, size_t dst_max);
 int decompress_blob(int compression,
                     const void *src, uint64_t src_size,
-                    void **dst, uint64_t *dst_alloc_size, uint64_t* dst_size, uint64_t dst_max);
+                    void **dst, size_t *dst_alloc_size, size_t* dst_size, size_t dst_max);
 
 int decompress_startswith_xz(const void *src, uint64_t src_size,
-                             void **buffer, uint64_t *buffer_size,
-                             const void *prefix, uint64_t prefix_len,
+                             void **buffer, size_t *buffer_size,
+                             const void *prefix, size_t prefix_len,
                              uint8_t extra);
 int decompress_startswith_lz4(const void *src, uint64_t src_size,
-                              void **buffer, uint64_t *buffer_size,
-                              const void *prefix, uint64_t prefix_len,
+                              void **buffer, size_t *buffer_size,
+                              const void *prefix, size_t prefix_len,
                               uint8_t extra);
 int decompress_startswith(int compression,
                           const void *src, uint64_t src_size,
-                          void **buffer, uint64_t *buffer_size,
-                          const void *prefix, uint64_t prefix_len,
+                          void **buffer, size_t *buffer_size,
+                          const void *prefix, size_t prefix_len,
                           uint8_t extra);
 
 int compress_stream_xz(int fdf, int fdt, off_t max_bytes);
index 6679ea4..986e94d 100644 (file)
@@ -814,7 +814,8 @@ int journal_file_find_data_object_with_hash(
 
                 if (o->object.flags & OBJECT_COMPRESSION_MASK) {
 #if defined(HAVE_XZ) || defined(HAVE_LZ4)
-                        uint64_t l, rsize;
+                        uint64_t l;
+                        size_t rsize;
 
                         l = le64toh(o->object.size);
                         if (l <= offsetof(Object, data.payload))
@@ -979,7 +980,7 @@ static int journal_file_append_data(
 #if defined(HAVE_XZ) || defined(HAVE_LZ4)
         if (f->compress_xz &&
             size >= COMPRESSION_SIZE_THRESHOLD) {
-                uint64_t rsize;
+                size_t rsize;
 
                 compression = compress_blob(data, size, o->data.payload, &rsize);
 
@@ -987,7 +988,7 @@ static int journal_file_append_data(
                         o->object.size = htole64(offsetof(Object, data.payload) + rsize);
                         o->object.flags |= compression;
 
-                        log_debug("Compressed data object %"PRIu64" -> %"PRIu64" using %s",
+                        log_debug("Compressed data object %"PRIu64" -> %zu using %s",
                                   size, rsize, object_compressed_to_string(compression));
                 }
         }
@@ -2770,7 +2771,7 @@ int journal_file_copy_entry(JournalFile *from, JournalFile *to, Object *o, uint6
 
                 if (o->object.flags & OBJECT_COMPRESSION_MASK) {
 #if defined(HAVE_XZ) || defined(HAVE_LZ4)
-                        uint64_t rsize;
+                        size_t rsize;
 
                         r = decompress_blob(o->object.flags & OBJECT_COMPRESSION_MASK,
                                             o->data.payload, l, &from->compress_buffer, &from->compress_buffer_size, &rsize, 0);
index 6703b93..3d41682 100644 (file)
@@ -80,7 +80,7 @@ typedef struct JournalFile {
 
 #ifdef HAVE_XZ
         void *compress_buffer;
-        uint64_t compress_buffer_size;
+        size_t compress_buffer_size;
 #endif
 
 #ifdef HAVE_GCRYPT
index 333757b..6c8ca8c 100644 (file)
@@ -142,7 +142,7 @@ static int journal_file_object_verify(JournalFile *f, uint64_t offset, Object *o
                 compression = o->object.flags & OBJECT_COMPRESSION_MASK;
                 if (compression) {
                         _cleanup_free_ void *b = NULL;
-                        uint64_t alloc = 0, b_size;
+                        size_t alloc = 0, b_size;
 
                         r = decompress_blob(compression,
                                             o->data.payload,
index d73280c..6bc5df7 100644 (file)
@@ -223,7 +223,7 @@ void server_process_native_message(
                         l = le64toh(l_le);
 
                         if (l > DATA_SIZE_MAX) {
-                                log_debug("Received binary data block of %zu bytes is too large, ignoring.", l);
+                                log_debug("Received binary data block of %"PRIu64" bytes is too large, ignoring.", l);
                                 break;
                         }
 
index 01c91e4..b9ec902 100644 (file)
@@ -2004,7 +2004,7 @@ _public_ int sd_journal_get_data(sd_journal *j, const char *field, const void **
                                                   &f->compress_buffer, &f->compress_buffer_size,
                                                   field, field_length, '=')) {
 
-                                uint64_t rsize;
+                                size_t rsize;
 
                                 r = decompress_blob(compression,
                                                     o->data.payload, l,
@@ -2059,7 +2059,7 @@ static int return_data(sd_journal *j, JournalFile *f, Object *o, const void **da
         compression = o->object.flags & OBJECT_COMPRESSION_MASK;
         if (compression) {
 #if defined(HAVE_XZ) || defined(HAVE_LZ4)
-                uint64_t rsize;
+                size_t rsize;
                 int r;
 
                 r = decompress_blob(compression,
index 0141df4..8975e29 100644 (file)
@@ -21,9 +21,9 @@
 #include "util.h"
 #include "macro.h"
 
-typedef int (compress_t)(const void *src, uint64_t src_size, void *dst, uint64_t *dst_size);
+typedef int (compress_t)(const void *src, uint64_t src_size, void *dst, size_t *dst_size);
 typedef int (decompress_t)(const void *src, uint64_t src_size,
-                           void **dst, uint64_t *dst_alloc_size, uint64_t* dst_size, uint64_t dst_max);
+                           void **dst, size_t *dst_alloc_size, size_t* dst_size, size_t dst_max);
 
 #define MAX_SIZE (1024*1024LU)
 
@@ -47,7 +47,7 @@ static void test_compress_decompress(const char* label,
 
         _cleanup_free_ char *text, *buf;
         _cleanup_free_ void *buf2 = NULL;
-        uint64_t buf2_allocated = 0;
+        size_t buf2_allocated = 0;
         size_t skipped = 0, compressed = 0, total = 0;
 
         text = make_buf(MAX_SIZE);
@@ -57,7 +57,7 @@ static void test_compress_decompress(const char* label,
         n = now(CLOCK_MONOTONIC);
 
         for (size_t i = 1; i <= MAX_SIZE; i += (i < 2048 ? 1 : 217)) {
-                uint64_t j = 0, k = 0;
+                size_t j = 0, k = 0;
                 int r;
 
                 r = compress(text, i, buf, &j);
@@ -72,7 +72,7 @@ static void test_compress_decompress(const char* label,
 
                 assert(j > 0);
                 if (j >= i)
-                        log_error("%s \"compressed\" %zu -> %" PRIu64, label, i, j);
+                        log_error("%s \"compressed\" %zu -> %zu", label, i, j);
 
                 r = decompress(buf, j, &buf2, &buf2_allocated, &k, 0);
                 assert(r == 0);
index 4c0a9a0..f5f5f8d 100644 (file)
 #endif
 
 typedef int (compress_blob_t)(const void *src, uint64_t src_size,
-                              void *dst, uint64_t *dst_size);
+                              void *dst, size_t *dst_size);
 typedef int (decompress_blob_t)(const void *src, uint64_t src_size,
-                                void **dst, uint64_t *dst_alloc_size,
-                                uint64_t* dst_size, uint64_t dst_max);
-
+                                void **dst, size_t *dst_alloc_size,
+                                size_t* dst_size, size_t dst_max);
 typedef int (decompress_sw_t)(const void *src, uint64_t src_size,
-                              void **buffer, uint64_t *buffer_size,
-                              const void *prefix, uint64_t prefix_len,
+                              void **buffer, size_t *buffer_size,
+                              const void *prefix, size_t prefix_len,
                               uint8_t extra);
 
 typedef int (compress_stream_t)(int fdf, int fdt, off_t max_bytes);
@@ -53,8 +52,8 @@ static void test_compress_decompress(int compression,
         char text[] = "foofoofoofoo AAAA aaaaaaaaa ghost busters barbarbar FFF"
                       "foofoofoofoo AAAA aaaaaaaaa ghost busters barbarbar FFF";
         char compressed[512];
-        uint64_t csize = 512;
-        uint64_t usize = 0;
+        size_t csize = 512;
+        size_t usize = 0;
         _cleanup_free_ char *decompressed = NULL;
         int r;
 
@@ -92,8 +91,8 @@ static void test_decompress_startswith(int compression,
         char text[] = "foofoofoofoo AAAA aaaaaaaaa ghost busters barbarbar FFF"
                       "foofoofoofoo AAAA aaaaaaaaa ghost busters barbarbar FFF";
         char compressed[512];
-        uint64_t csize = 512;
-        uint64_t usize = 0;
+        size_t csize = 512;
+        size_t usize = 0;
         _cleanup_free_ char *decompressed = NULL;
 
         log_info("/* testing decompress_startswith with %s */",
index e0d4d7c..8fb7240 100644 (file)
@@ -305,7 +305,7 @@ _public_ struct udev_hwdb *udev_hwdb_new(struct udev *udev) {
 
         udev_dbg(udev, "=== trie on-disk ===\n");
         udev_dbg(udev, "tool version:          %"PRIu64, le64toh(hwdb->head->tool_version));
-        udev_dbg(udev, "file size:        %8zu bytes\n", hwdb->st.st_size);
+        udev_dbg(udev, "file size:        %8"PRIu64" bytes\n", hwdb->st.st_size);
         udev_dbg(udev, "header size       %8"PRIu64" bytes\n", le64toh(hwdb->head->header_size));
         udev_dbg(udev, "strings           %8"PRIu64" bytes\n", le64toh(hwdb->head->strings_len));
         udev_dbg(udev, "nodes             %8"PRIu64" bytes\n", le64toh(hwdb->head->nodes_len));