Fix: test for less than 1 byte packets
[babeltrace.git] / formats / ctf / ctf.c
index c9eeafa5927b09edb5841ac3906bd90b4f567755..759708856b0a2044c4802325d2a2434ae0525287 100644 (file)
@@ -1489,28 +1489,28 @@ begin:
                        fprintf(stderr, "[error] Unable to read packet context: %s\n", strerror(-ret));
                        return ret;
                }
-               /* read content size from header */
-               len_index = bt_struct_declaration_lookup_field_index(file_stream->parent.stream_packet_context->declaration, g_quark_from_static_string("content_size"));
+               /* read packet size from header */
+               len_index = bt_struct_declaration_lookup_field_index(file_stream->parent.stream_packet_context->declaration, g_quark_from_static_string("packet_size"));
                if (len_index >= 0) {
                        struct bt_definition *field;
 
                        field = bt_struct_definition_get_field_from_index(file_stream->parent.stream_packet_context, len_index);
-                       packet_index.content_size = bt_get_unsigned_int(field);
+                       packet_index.packet_size = bt_get_unsigned_int(field);
                } else {
                        /* Use file size for packet size */
-                       packet_index.content_size = filesize * CHAR_BIT;
+                       packet_index.packet_size = filesize * CHAR_BIT;
                }
 
-               /* read packet size from header */
-               len_index = bt_struct_declaration_lookup_field_index(file_stream->parent.stream_packet_context->declaration, g_quark_from_static_string("packet_size"));
+               /* read content size from header */
+               len_index = bt_struct_declaration_lookup_field_index(file_stream->parent.stream_packet_context->declaration, g_quark_from_static_string("content_size"));
                if (len_index >= 0) {
                        struct bt_definition *field;
 
                        field = bt_struct_definition_get_field_from_index(file_stream->parent.stream_packet_context, len_index);
-                       packet_index.packet_size = bt_get_unsigned_int(field);
+                       packet_index.content_size = bt_get_unsigned_int(field);
                } else {
-                       /* Use content size if non-zero, else file size */
-                       packet_index.packet_size = packet_index.content_size ? : filesize * CHAR_BIT;
+                       /* Use packet size if non-zero, else file size */
+                       packet_index.content_size = packet_index.packet_size ? : filesize * CHAR_BIT;
                }
 
                /* read timestamp begin from header */
@@ -1554,9 +1554,9 @@ begin:
                }
        } else {
                /* Use file size for packet size */
-               packet_index.content_size = filesize * CHAR_BIT;
-               /* Use content size if non-zero, else file size */
-               packet_index.packet_size = packet_index.content_size ? : filesize * CHAR_BIT;
+               packet_index.packet_size = filesize * CHAR_BIT;
+               /* Use packet size if non-zero, else file size */
+               packet_index.content_size = packet_index.packet_size ? : filesize * CHAR_BIT;
        }
 
        /* Validate content size and packet size values */
@@ -1572,6 +1572,11 @@ begin:
                return -EINVAL;
        }
 
+       if ((packet_index.packet_size >> LOG2_CHAR_BIT) == 0) {
+               fprintf(stderr, "[error] Invalid CTF stream: packet size needs to be at least one byte\n");
+               return -EINVAL;
+       }
+
        /* Save position after header and context */
        packet_index.data_offset = pos->offset;
 
This page took 0.024401 seconds and 4 git commands to generate.