[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