From 66ec8ff67b4d9d98c0fd936ff8435b792e58928c Mon Sep 17 00:00:00 2001 From: Rudolf Polzer Date: Fri, 23 Jun 2017 09:57:41 -0400 Subject: demux_mkv: Fix warnings. - Fix a signed/unsigned comparison involving info.segment_uid.len (doesn't actually warn here, but seems fragile). Code was previously safe though. - Match up all printf format strings with the respective value types, using the *int*_t printf specifiers where necessary, and fixing multiple signed/unsigned differences. Removed some casts that otherwise may have truncated values. - Fix a warning when initializing ebml_info. --- demux/demux_mkv.c | 83 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 43 insertions(+), 40 deletions(-) diff --git a/demux/demux_mkv.c b/demux/demux_mkv.c index 9769e6d22a..966c364f29 100644 --- a/demux/demux_mkv.c +++ b/demux/demux_mkv.c @@ -391,7 +391,7 @@ static int demux_mkv_read_info(demuxer_t *demuxer) mkv_d->tc_scale = 1000000; mkv_d->duration = 0; - struct ebml_info info = {0}; + struct ebml_info info = {{0}}; struct ebml_parse_ctx parse_ctx = {demuxer->log}; if (ebml_read_element(s, &parse_ctx, &info, &ebml_info_desc) < 0) return -1; @@ -401,7 +401,7 @@ static int demux_mkv_read_info(demuxer_t *demuxer) MP_VERBOSE(demuxer, "| + writing app: %s\n", info.writing_app); if (info.n_timecode_scale) { mkv_d->tc_scale = info.timecode_scale; - MP_VERBOSE(demuxer, "| + timecode scale: %" PRIu64 "\n", mkv_d->tc_scale); + MP_VERBOSE(demuxer, "| + timecode scale: %"PRId64"\n", mkv_d->tc_scale); if (mkv_d->tc_scale < 1 || mkv_d->tc_scale > INT_MAX) { res = -1; goto out; @@ -417,14 +417,14 @@ static int demux_mkv_read_info(demuxer_t *demuxer) mp_tags_set_str(demuxer->metadata, "TITLE", info.title); } if (info.n_segment_uid) { - int len = info.segment_uid.len; + size_t len = info.segment_uid.len; if (len != sizeof(demuxer->matroska_data.uid.segment)) { - MP_INFO(demuxer, "segment uid invalid length %d\n", len); + MP_INFO(demuxer, "segment uid invalid length %zu\n", len); } else { memcpy(demuxer->matroska_data.uid.segment, info.segment_uid.start, len); MP_VERBOSE(demuxer, "| + segment uid"); - for (int i = 0; i < len; i++) + for (size_t i = 0; i < len; i++) MP_VERBOSE(demuxer, " %02x", demuxer->matroska_data.uid.segment[i]); MP_VERBOSE(demuxer, "\n"); @@ -479,7 +479,7 @@ static void parse_trackencodings(struct demuxer *demuxer, if (e.type == 1) { MP_WARN(demuxer, "Track " - "number %u has been encrypted and " + "number %d has been encrypted and " "decryption has not yet been\n" "implemented. Skipping track.\n", track->tnum); @@ -488,14 +488,14 @@ static void parse_trackencodings(struct demuxer *demuxer, "track %u. Skipping track.\n", track->tnum); } else if (e.comp_algo != 0 && e.comp_algo != 2 && e.comp_algo != 3) { - MP_WARN(demuxer, "Track %u has been compressed with " + MP_WARN(demuxer, "Track %d has been compressed with " "an unknown/unsupported compression\n" - "algorithm (%" PRIu64 "). Skipping track.\n", + "algorithm (%"PRIu64"). Skipping track.\n", track->tnum, e.comp_algo); } #if !HAVE_ZLIB else if (e.comp_algo == 0) { - MP_WARN(demuxer, "Track %u was compressed with zlib " + MP_WARN(demuxer, "Track %d was compressed with zlib " "but mpv has not been compiled\n" "with support for zlib compression. " "Skipping track.\n", @@ -533,11 +533,11 @@ static void parse_trackaudio(struct demuxer *demuxer, struct mkv_track *track, } if (audio->n_bit_depth) { track->a_bps = audio->bit_depth; - MP_VERBOSE(demuxer, "| + Bit depth: %u\n", track->a_bps); + MP_VERBOSE(demuxer, "| + Bit depth: %"PRIu32"\n", track->a_bps); } if (audio->n_channels) { track->a_channels = audio->channels; - MP_VERBOSE(demuxer, "| + Channels: %u\n", track->a_channels); + MP_VERBOSE(demuxer, "| + Channels: %"PRIu32"\n", track->a_channels); } else { track->a_channels = 1; } @@ -571,8 +571,7 @@ static void parse_trackcolour(struct demuxer *demuxer, struct mkv_track *track, } if (colour->n_max_cll) { track->color.sig_peak = colour->max_cll / MP_REF_WHITE; - MP_VERBOSE(demuxer, "| + MaxCLL: %lu\n", - (unsigned long)colour->max_cll); + MP_VERBOSE(demuxer, "| + MaxCLL: %"PRIu64"\n", colour->max_cll); } // if MaxCLL is unavailable, try falling back to the mastering metadata if (!track->color.sig_peak && colour->n_mastering_metadata) { @@ -594,26 +593,28 @@ static void parse_trackvideo(struct demuxer *demuxer, struct mkv_track *track, if (video->n_display_width) { track->v_dwidth = video->display_width; track->v_dwidth_set = true; - MP_VERBOSE(demuxer, "| + Display width: %u\n", track->v_dwidth); + MP_VERBOSE(demuxer, "| + Display width: %"PRIu32"\n", + track->v_dwidth); } if (video->n_display_height) { track->v_dheight = video->display_height; track->v_dheight_set = true; - MP_VERBOSE(demuxer, "| + Display height: %u\n", track->v_dheight); + MP_VERBOSE(demuxer, "| + Display height: %"PRIu32"\n", + track->v_dheight); } if (video->n_pixel_width) { track->v_width = video->pixel_width; - MP_VERBOSE(demuxer, "| + Pixel width: %u\n", track->v_width); + MP_VERBOSE(demuxer, "| + Pixel width: %"PRIu32"\n", track->v_width); } if (video->n_pixel_height) { track->v_height = video->pixel_height; - MP_VERBOSE(demuxer, "| + Pixel height: %u\n", track->v_height); + MP_VERBOSE(demuxer, "| + Pixel height: %"PRIu32"\n", track->v_height); } if (video->n_colour_space && video->colour_space.len == 4) { uint8_t *d = (uint8_t *)&video->colour_space.start[0]; track->colorspace = d[0] | (d[1] << 8) | (d[2] << 16) | (d[3] << 24); - MP_VERBOSE(demuxer, "| + Colorspace: %#x\n", - (unsigned int)track->colorspace); + MP_VERBOSE(demuxer, "| + Colorspace: %#"PRIx32"\n", + track->colorspace); } if (video->n_stereo_mode) { const char *name = MP_STEREO3D_NAME(video->stereo_mode); @@ -621,7 +622,8 @@ static void parse_trackvideo(struct demuxer *demuxer, struct mkv_track *track, track->stereo_mode = video->stereo_mode; MP_VERBOSE(demuxer, "| + StereoMode: %s\n", name); } else { - MP_WARN(demuxer, "Unknown StereoMode: %d\n", (int)video->stereo_mode); + MP_WARN(demuxer, "Unknown StereoMode: %"PRIu64"\n", + video->stereo_mode); } } if (video->n_colour) @@ -648,7 +650,7 @@ static void parse_trackentry(struct demuxer *demuxer, track->tnum = entry->track_number; if (track->tnum) { - MP_VERBOSE(demuxer, "| + Track number: %u\n", track->tnum); + MP_VERBOSE(demuxer, "| + Track number: %d\n", track->tnum); } else { MP_ERR(demuxer, "Missing track number!\n"); } @@ -713,14 +715,14 @@ static void parse_trackentry(struct demuxer *demuxer, if (entry->n_flag_default) { track->default_track = entry->flag_default; - MP_VERBOSE(demuxer, "| + Default flag: %u\n", track->default_track); + MP_VERBOSE(demuxer, "| + Default flag: %d\n", track->default_track); } else { track->default_track = 1; } if (entry->n_flag_forced) { track->forced_track = entry->flag_forced; - MP_VERBOSE(demuxer, "| + Forced flag: %u\n", track->forced_track); + MP_VERBOSE(demuxer, "| + Forced flag: %d\n", track->forced_track); } if (entry->n_default_duration) { @@ -847,9 +849,9 @@ static int demux_mkv_read_cues(demuxer_t *demuxer) cue_index_add(demuxer, trackpos->cue_track, pos, time, trackpos->cue_duration); mkv_d->index_has_durations |= trackpos->n_cue_duration > 0; - MP_DBG(demuxer, "|+ found cue point for track %" PRIu64 - ": timecode %" PRId64 ", filepos: %" PRIu64 - " offset %" PRIu64 ", duration %" PRId64 "\n", + MP_DBG(demuxer, "|+ found cue point for track %"PRIu64": " + "timecode %"PRIu64", filepos: %"PRIu64"" + "offset %"PRIu64", duration %"PRIu64"\n", trackpos->cue_track, time, pos, trackpos->cue_relative_position, trackpos->cue_duration); } @@ -926,11 +928,11 @@ static int demux_mkv_read_chapters(struct demuxer *demuxer) MP_VERBOSE(demuxer, "New edition %d\n", idx); int warn_level = idx == selected_edition ? MSGL_WARN : MSGL_V; if (editions[idx].n_edition_flag_default) - MP_VERBOSE(demuxer, "Default edition flag: %"PRIu64 - "\n", editions[idx].edition_flag_default); + MP_VERBOSE(demuxer, "Default edition flag: %"PRIu64"\n", + editions[idx].edition_flag_default); if (editions[idx].n_edition_flag_ordered) - MP_VERBOSE(demuxer, "Ordered chapter flag: %"PRIu64 - "\n", editions[idx].edition_flag_ordered); + MP_VERBOSE(demuxer, "Ordered chapter flag: %"PRIu64"\n", + editions[idx].edition_flag_ordered); int chapter_count = editions[idx].n_chapter_atom; @@ -1185,8 +1187,8 @@ static int demux_mkv_read_seekhead(demuxer_t *demuxer) continue; } uint64_t pos = seek->seek_position + mkv_d->segment_start; - MP_DBG(demuxer, "Element 0x%x at %"PRIu64".\n", - (unsigned)seek->seek_id, pos); + MP_DBG(demuxer, "Element 0x%"PRIx32" at %"PRIu64".\n", + seek->seek_id, pos); get_header_element(demuxer, seek->seek_id, pos); } out: @@ -1232,15 +1234,16 @@ static int read_deferred_element(struct demuxer *demuxer, if (elem->parsed) return 0; elem->parsed = true; - MP_VERBOSE(demuxer, "Seeking to %"PRIu64" to read header element 0x%x.\n", - elem->pos, (unsigned)elem->id); + MP_VERBOSE(demuxer, "Seeking to %"PRIu64" to read header element " + "0x%"PRIx32".\n", + elem->pos, elem->id); if (!stream_seek(s, elem->pos)) { MP_WARN(demuxer, "Failed to seek when reading header element.\n"); return 0; } if (ebml_read_id(s) != elem->id) { - MP_ERR(demuxer, "Expected element 0x%x not found\n", - (unsigned int)elem->id); + MP_ERR(demuxer, "Expected element 0x%"PRIx32" not found\n", + elem->id); return 0; } elem->parsed = false; // don't make read_header_element skip it @@ -1435,7 +1438,7 @@ static int demux_mkv_open_video(demuxer_t *demuxer, mkv_track_t *track) sh_v->extradata_size = extradata_size; if (!sh_v->codec) { MP_WARN(demuxer, "Unknown/unsupported CodecID (%s) or missing/bad " - "CodecPrivate data (track %u).\n", + "CodecPrivate data (track %d).\n", track->codec_id, track->tnum); } sh_v->fps = track->v_frate; @@ -1846,8 +1849,8 @@ static int read_ebml_header(demuxer_t *demuxer) if (ebml_read_element(s, &parse_ctx, &ebml_master, &ebml_ebml_desc) < 0) return 0; if (!ebml_master.doc_type) { - MP_VERBOSE(demuxer, "File has EBML header but no doctype." - " Assuming \"matroska\".\n"); + MP_VERBOSE(demuxer, "File has EBML header but no doctype. " + "Assuming \"matroska\".\n"); } else if (strcmp(ebml_master.doc_type, "matroska") != 0 && strcmp(ebml_master.doc_type, "webm") != 0) { MP_DBG(demuxer, "no head found\n"); @@ -2832,7 +2835,7 @@ static int create_index_until(struct demuxer *demuxer, int64_t timecode) if (!index || index->timecode * mkv_d->tc_scale < timecode) { stream_seek(s, index ? index->filepos : mkv_d->cluster_start); - MP_VERBOSE(demuxer, "creating index until TC %" PRId64 "\n", timecode); + MP_VERBOSE(demuxer, "creating index until TC %"PRId64"\n", timecode); for (;;) { int res; struct block_info block; -- cgit v1.2.3