[FFmpeg-devel] [PATCH] matroskadec: Add sizes to forward declarations
Paul B Mahol
onemda at gmail.com
Wed Jul 17 18:24:21 EEST 2019
On 7/17/19, Andreas Rheinhardt <andreas.rheinhardt at gmail.com> wrote:
> Unknown-length elements end when an element not allowed in them, but
> allowed at a higher level is encountered. In order to check for this,
> c1abd95a added a pointer to every syntax level's parent to each
> EbmlSyntax. Given that the parent must of course also reference the
> child in order to be able to enter said child level, one needs to use
> forward declarations.
> These forward declarations constitute tentative definitions and tentative
> definitions with internal linkage (like our syntaxes) must not be an
> incomplete type. Yet they were an incomplete type and while GCC and
> Clang did not even warn about this (on default warning levels), it
> broke compilation with MSVC. Therefore this commit adds the sizes.
>
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at gmail.com>
> ---
> 1. I am terribly sorry for this. I did test with both GCC and Clang, but
> not with -pedantic, but only with default warning levels.
> 2. I don't have an MSVC setup here, so could please someone confirm that
> this patch indeed fixes the compilation? All I know is that GCC's
> -pedantic warnings are gone with this patch and that the requirement
> that tentative definitions with internal linkage must not be of
> incomplete type is fulfilled now.
>
> libavformat/matroskadec.c | 16 ++++++++++------
> 1 file changed, 10 insertions(+), 6 deletions(-)
>
> diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
> index b97189e674..fb0356e7b7 100644
> --- a/libavformat/matroskadec.c
> +++ b/libavformat/matroskadec.c
> @@ -389,12 +389,16 @@ typedef struct MatroskaDemuxContext {
>
> #define CHILD_OF(parent) { .def = { .n = parent } }
>
> -static const EbmlSyntax ebml_syntax[], matroska_segment[],
> matroska_track_video_color[], matroska_track_video[],
> - matroska_track[], matroska_track_encoding[],
> matroska_track_encodings[],
> - matroska_track_combine_planes[],
> matroska_track_operation[], matroska_tracks[],
> - matroska_attachments[], matroska_chapter_entry[],
> matroska_chapter[], matroska_chapters[],
> - matroska_index_entry[], matroska_index[],
> matroska_tag[], matroska_tags[], matroska_seekhead[],
> - matroska_blockadditions[], matroska_blockgroup[],
> matroska_cluster_parsing[];
> +// The following forward declarations need their size because
> +// a tentative definition with internal linkage must not be an
> +// incomplete type (6.7.2 in C90, 6.9.2 in C99).
> +// Removing the sizes breaks MSVC.
> +static const EbmlSyntax ebml_syntax[3], matroska_segment[9],
> matroska_track_video_color[15], matroska_track_video[19],
> + matroska_track[27], matroska_track_encoding[6],
> matroska_track_encodings[2],
> + matroska_track_combine_planes[2],
> matroska_track_operation[2], matroska_tracks[2],
> + matroska_attachments[2], matroska_chapter_entry[9],
> matroska_chapter[6], matroska_chapters[2],
> + matroska_index_entry[3], matroska_index[2],
> matroska_tag[3], matroska_tags[2], matroska_seekhead[2],
> + matroska_blockadditions[2], matroska_blockgroup[8],
> matroska_cluster_parsing[8];
>
> static const EbmlSyntax ebml_header[] = {
> { EBML_ID_EBMLREADVERSION, EBML_UINT, 0, offsetof(Ebml, version),
> { .u = EBML_VERSION } },
> --
> 2.21.0
>
Looks fine.
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
More information about the ffmpeg-devel
mailing list