]> granicus.if.org Git - p11-kit/commitdiff
test: Fix failure on 32-bit big endian platform
authorDaiki Ueno <dueno@redhat.com>
Mon, 3 Jul 2017 13:40:16 +0000 (15:40 +0200)
committerDaiki Ueno <ueno@gnu.org>
Fri, 14 Jul 2017 08:50:47 +0000 (10:50 +0200)
The value given to p11_rpc_buffer_add_ulong_value() must be a pointer
of CK_ULONG.  Similarly, the value returned from
p11_rpc_buffer_get_ulong_value() must be converted to CK_ULONG before
comparison.

Reported by Andreas Metzler in:
https://lists.freedesktop.org/archives/p11-glue/2017-July/000665.html

p11-kit/test-rpc.c

index b57d633668ac0cd743841c8f28e3bf8d728bca72..7c563cf15defd774503571dd638201d74c47dc8c 100644 (file)
@@ -395,8 +395,7 @@ test_ulong_value (void)
 {
        p11_buffer buffer;
        p11_buffer buf = { (unsigned char *)"pad0\x00\x00\x00\x00\x23\x45\x67\x89", 12, };
-       CK_ULONG val = 0xFFFFFFFF;
-       uint64_t val64 = 0xFFFFFFFFFFFFFFFF;
+       CK_ULONG val = (CK_ULONG)0xFFFFFFFFFFFFFFFF;
        size_t offset = 0;
        CK_ULONG val_size;
        bool ret;
@@ -410,34 +409,36 @@ test_ulong_value (void)
 
        p11_buffer_init (&buffer, 0);
 
+       val = (CK_ULONG)0xFFFFFFFFFFFFFFFF;
        offset = 0;
        val_size = SIZEOF_UNSIGNED_LONG;
-       ret = p11_rpc_buffer_get_ulong_value (&buffer, &offset, &val64, &val_size);
+       ret = p11_rpc_buffer_get_ulong_value (&buffer, &offset, &val, &val_size);
        assert_num_eq (0, ret);
        assert_num_eq (0, offset);
        assert_num_eq (SIZEOF_UNSIGNED_LONG, val_size);
-       assert (0xFFFFFFFFFFFFFFFF == val64);
+       assert_num_eq ((CK_ULONG)0xFFFFFFFFFFFFFFFF, val);
 
        p11_buffer_reset (&buffer, 0);
 
        p11_buffer_add (&buffer, (unsigned char *)"padding", 7);
 
-       val64 = 0x0123456708ABCDEF;
-       p11_rpc_buffer_add_ulong_value (&buffer, &val64, SIZEOF_UNSIGNED_LONG);
+       val = (CK_ULONG)0x0123456708ABCDEF;
+       p11_rpc_buffer_add_ulong_value (&buffer, &val, SIZEOF_UNSIGNED_LONG);
        assert (!p11_buffer_failed (&buffer));
+       /* The value is always stored as 64-bit integer */
+       assert_num_eq (7 + 8, buffer.len);
 
-       assert_num_eq (15, buffer.len);
-
-       val64 = 0xFFFFFFFFFFFFFFFF;
+       val = (CK_ULONG)0xFFFFFFFFFFFFFFFF;
        offset = 7;
-       ret = p11_rpc_buffer_get_ulong_value (&buffer, &offset, &val64, &val_size);
+       ret = p11_rpc_buffer_get_ulong_value (&buffer, &offset, &val, &val_size);
        assert_num_eq (true, ret);
-       assert_num_eq (15, offset);
-       assert_num_eq ((CK_ULONG)0x0123456708ABCDEF, val64);
+       /* The value is always stored as 64-bit integer */
+       assert_num_eq (7 + 8, offset);
+       assert_num_eq ((CK_ULONG)0x0123456708ABCDEF, *(CK_ULONG *)&val);
 
        /* Read out of bound */
-       val64 = 0xFFFFFFFFFFFFFFFF;
-       ret = p11_rpc_buffer_get_ulong_value (&buffer, &offset, &val64, &val_size);
+       val = (CK_ULONG)0xFFFFFFFFFFFFFFFF;
+       ret = p11_rpc_buffer_get_ulong_value (&buffer, &offset, &val, &val_size);
        assert_num_eq (false, ret);
 
        p11_buffer_uninit (&buffer);