assert(0);
}
if (pos->cur_index >= pos->packet_index->len) {
- pos->offset = -EOF;
+ pos->offset = EOF;
return;
}
index = &g_array_index(pos->packet_index, struct packet_index,
/* read and check header, set stream id (and check) */
if (td->packet_header) {
/* Read packet header */
- generic_rw(&pos->parent, &td->packet_header->p);
-
+ ret = generic_rw(&pos->parent, &td->packet_header->p);
+ if (ret)
+ return ret;
len_index = struct_declaration_lookup_field_index(td->packet_header->declaration, g_quark_from_static_string("magic"));
if (len_index >= 0) {
struct definition_integer *defint;
defint = container_of(field->definition, struct definition_integer, p);
assert(defint->declaration->signedness == FALSE);
if (defint->value._unsigned != CTF_MAGIC) {
- fprintf(stdout, "[error] Invalid magic number %" PRIX64 " at packet %u (file offset %zd).\n",
+ fprintf(stdout, "[error] Invalid magic number 0x%" PRIX64 " at packet %u (file offset %zd).\n",
defint->value._unsigned,
file_stream->pos.packet_index->len,
(ssize_t) pos->mmap_offset);
if (stream->packet_context) {
/* Read packet context */
- generic_rw(&pos->parent, &stream->packet_context->p);
-
+ ret = generic_rw(&pos->parent, &stream->packet_context->p);
+ if (ret)
+ return ret;
/* read content size from header */
len_index = struct_declaration_lookup_field_index(stream->packet_context->declaration, g_quark_from_static_string("content_size"));
if (len_index >= 0) {
return -EINVAL;
}
- if (packet_index.packet_size > filestats.st_size * CHAR_BIT) {
- fprintf(stdout, "[error] Packet size (%zu bits) is larger than file size (%zu bits).\n",
- packet_index.content_size, filestats.st_size * CHAR_BIT);
+ if (packet_index.packet_size > (filestats.st_size - packet_index.offset) * CHAR_BIT) {
+ fprintf(stdout, "[error] Packet size (%zu bits) is larger than remaining file size (%zu bits).\n",
+ packet_index.content_size, (filestats.st_size - packet_index.offset) * CHAR_BIT);
return -EINVAL;
}
}
if (!diriter)
break;
- if (!strcmp(diriter->d_name, ".")
+ /* Ignore hidden files, ., .. and metadata. */
+ if (!strncmp(diriter->d_name, ".", 1)
|| !strcmp(diriter->d_name, "..")
|| !strcmp(diriter->d_name, "metadata"))
continue;