avconv.c:3047: error: Null Dereference
  pointer `meta_in` last assigned on line 2981 could be null and is dereferenced at line 3047, column 32.

avconv.c:2979:1: start of procedure copy_metadata()
2977. }
2978. 
2979. static int copy_metadata(char *outspec, char *inspec, AVFormatContext *oc, AVFormatContext *ic, OptionsContext *o)
      ^
2980. {
2981.     AVDictionary **meta_in = NULL;

avconv.c:2981:5: 
2979. static int copy_metadata(char *outspec, char *inspec, AVFormatContext *oc, AVFormatContext *ic, OptionsContext *o)
2980. {
2981.     AVDictionary **meta_in = NULL;
          ^
2982.     AVDictionary **meta_out;
2983.     int i, ret = 0;

avconv.c:2983:5: 
2981.     AVDictionary **meta_in = NULL;
2982.     AVDictionary **meta_out;
2983.     int i, ret = 0;
          ^
2984.     char type_in, type_out;
2985.     const char *istream_spec = NULL, *ostream_spec = NULL;

avconv.c:2985:5: 
2983.     int i, ret = 0;
2984.     char type_in, type_out;
2985.     const char *istream_spec = NULL, *ostream_spec = NULL;
          ^
2986.     int idx_in = 0, idx_out = 0;
2987. 

avconv.c:2986:5: 
2984.     char type_in, type_out;
2985.     const char *istream_spec = NULL, *ostream_spec = NULL;
2986.     int idx_in = 0, idx_out = 0;
          ^
2987. 
2988.     parse_meta_type(inspec,  &type_in,  &idx_in,  &istream_spec);

avconv.c:2988:5: 
2986.     int idx_in = 0, idx_out = 0;
2987. 
2988.     parse_meta_type(inspec,  &type_in,  &idx_in,  &istream_spec);
          ^
2989.     parse_meta_type(outspec, &type_out, &idx_out, &ostream_spec);
2990. 

avconv.c:2952:1: start of procedure parse_meta_type()
  2950.  * @param stream_spec for type s, the stream specifier is written here
  2951.  */
  2952. static void parse_meta_type(char *arg, char *type, int *index, const char **stream_spec)
        ^
  2953. {
  2954.     if (*arg) {

avconv.c:2954:9: Taking true branch
  2952. static void parse_meta_type(char *arg, char *type, int *index, const char **stream_spec)
  2953. {
  2954.     if (*arg) {
                ^
  2955.         *type = *arg;
  2956.         switch (*arg) {

avconv.c:2955:9: 
  2953. {
  2954.     if (*arg) {
  2955.         *type = *arg;
                ^
  2956.         switch (*arg) {
  2957.         case 'g':

avconv.c:2956:9: 
  2954.     if (*arg) {
  2955.         *type = *arg;
  2956.         switch (*arg) {
                ^
  2957.         case 'g':
  2958.             break;

avconv.c:2957:9: Switch condition is false. Skipping switch case
  2955.         *type = *arg;
  2956.         switch (*arg) {
  2957.         case 'g':
                ^
  2958.             break;
  2959.         case 's':

avconv.c:2959:9: Switch condition is false. Skipping switch case
  2957.         case 'g':
  2958.             break;
  2959.         case 's':
                ^
  2960.             if (*(++arg) && *arg != ':') {
  2961.                 av_log(NULL, AV_LOG_FATAL, "Invalid metadata specifier %s.\n", arg);

avconv.c:2966:9: Switch condition is false. Skipping switch case
  2964.             *stream_spec = *arg == ':' ? arg + 1 : "";
  2965.             break;
  2966.         case 'c':
                ^
  2967.         case 'p':
  2968.             if (*(++arg) == ':')

avconv.c:2967:9: Switch condition is false. Skipping switch case
  2965.             break;
  2966.         case 'c':
  2967.         case 'p':
                ^
  2968.             if (*(++arg) == ':')
  2969.                 *index = strtol(++arg, NULL, 0);

avconv.c:2972:13: Skipping av_log(): empty list of specs
  2970.             break;
  2971.         default:
  2972.             av_log(NULL, AV_LOG_FATAL, "Invalid metadata type %c.\n", *arg);
                    ^
  2973.             exit_program(1);
  2974.         }

avconv.c:2973:13: Skipping exit_program(): empty list of specs
  2971.         default:
  2972.             av_log(NULL, AV_LOG_FATAL, "Invalid metadata type %c.\n", *arg);
  2973.             exit_program(1);
                    ^
  2974.         }
  2975.     } else

avconv.c:2954:5: 
  2952. static void parse_meta_type(char *arg, char *type, int *index, const char **stream_spec)
  2953. {
  2954.     if (*arg) {
            ^
  2955.         *type = *arg;
  2956.         switch (*arg) {

avconv.c:2977:1: return from a call to parse_meta_type
  2975.     } else
  2976.         *type = 'g';
  2977. }
        ^
  2978. 
  2979. static int copy_metadata(char *outspec, char *inspec, AVFormatContext *oc, AVFormatContext *ic, OptionsContext *o)

avconv.c:2989:5: 
2987. 
2988.     parse_meta_type(inspec,  &type_in,  &idx_in,  &istream_spec);
2989.     parse_meta_type(outspec, &type_out, &idx_out, &ostream_spec);
          ^
2990. 
2991.     if (type_in == 'g' || type_out == 'g')

avconv.c:2952:1: start of procedure parse_meta_type()
  2950.  * @param stream_spec for type s, the stream specifier is written here
  2951.  */
  2952. static void parse_meta_type(char *arg, char *type, int *index, const char **stream_spec)
        ^
  2953. {
  2954.     if (*arg) {

avconv.c:2954:9: Taking true branch
  2952. static void parse_meta_type(char *arg, char *type, int *index, const char **stream_spec)
  2953. {
  2954.     if (*arg) {
                ^
  2955.         *type = *arg;
  2956.         switch (*arg) {

avconv.c:2955:9: 
  2953. {
  2954.     if (*arg) {
  2955.         *type = *arg;
                ^
  2956.         switch (*arg) {
  2957.         case 'g':

avconv.c:2956:9: 
  2954.     if (*arg) {
  2955.         *type = *arg;
  2956.         switch (*arg) {
                ^
  2957.         case 'g':
  2958.             break;

avconv.c:2957:9: Switch condition is false. Skipping switch case
  2955.         *type = *arg;
  2956.         switch (*arg) {
  2957.         case 'g':
                ^
  2958.             break;
  2959.         case 's':

avconv.c:2959:9: Switch condition is false. Skipping switch case
  2957.         case 'g':
  2958.             break;
  2959.         case 's':
                ^
  2960.             if (*(++arg) && *arg != ':') {
  2961.                 av_log(NULL, AV_LOG_FATAL, "Invalid metadata specifier %s.\n", arg);

avconv.c:2966:9: Switch condition is false. Skipping switch case
  2964.             *stream_spec = *arg == ':' ? arg + 1 : "";
  2965.             break;
  2966.         case 'c':
                ^
  2967.         case 'p':
  2968.             if (*(++arg) == ':')

avconv.c:2967:9: Switch condition is false. Skipping switch case
  2965.             break;
  2966.         case 'c':
  2967.         case 'p':
                ^
  2968.             if (*(++arg) == ':')
  2969.                 *index = strtol(++arg, NULL, 0);

avconv.c:2972:13: Skipping av_log(): empty list of specs
  2970.             break;
  2971.         default:
  2972.             av_log(NULL, AV_LOG_FATAL, "Invalid metadata type %c.\n", *arg);
                    ^
  2973.             exit_program(1);
  2974.         }

avconv.c:2973:13: Skipping exit_program(): empty list of specs
  2971.         default:
  2972.             av_log(NULL, AV_LOG_FATAL, "Invalid metadata type %c.\n", *arg);
  2973.             exit_program(1);
                    ^
  2974.         }
  2975.     } else

avconv.c:2954:5: 
  2952. static void parse_meta_type(char *arg, char *type, int *index, const char **stream_spec)
  2953. {
  2954.     if (*arg) {
            ^
  2955.         *type = *arg;
  2956.         switch (*arg) {

avconv.c:2977:1: return from a call to parse_meta_type
  2975.     } else
  2976.         *type = 'g';
  2977. }
        ^
  2978. 
  2979. static int copy_metadata(char *outspec, char *inspec, AVFormatContext *oc, AVFormatContext *ic, OptionsContext *o)

avconv.c:2991:9: Taking false branch
2989.     parse_meta_type(outspec, &type_out, &idx_out, &ostream_spec);
2990. 
2991.     if (type_in == 'g' || type_out == 'g')
              ^
2992.         o->metadata_global_manual = 1;
2993.     if (type_in == 's' || type_out == 's')

avconv.c:2991:27: Taking false branch
2989.     parse_meta_type(outspec, &type_out, &idx_out, &ostream_spec);
2990. 
2991.     if (type_in == 'g' || type_out == 'g')
                                ^
2992.         o->metadata_global_manual = 1;
2993.     if (type_in == 's' || type_out == 's')

avconv.c:2993:9: Taking false branch
2991.     if (type_in == 'g' || type_out == 'g')
2992.         o->metadata_global_manual = 1;
2993.     if (type_in == 's' || type_out == 's')
              ^
2994.         o->metadata_streams_manual = 1;
2995.     if (type_in == 'c' || type_out == 'c')

avconv.c:2993:27: Taking false branch
2991.     if (type_in == 'g' || type_out == 'g')
2992.         o->metadata_global_manual = 1;
2993.     if (type_in == 's' || type_out == 's')
                                ^
2994.         o->metadata_streams_manual = 1;
2995.     if (type_in == 'c' || type_out == 'c')

avconv.c:2995:9: Taking false branch
2993.     if (type_in == 's' || type_out == 's')
2994.         o->metadata_streams_manual = 1;
2995.     if (type_in == 'c' || type_out == 'c')
              ^
2996.         o->metadata_chapters_manual = 1;
2997. 

avconv.c:2995:27: Taking false branch
2993.     if (type_in == 's' || type_out == 's')
2994.         o->metadata_streams_manual = 1;
2995.     if (type_in == 'c' || type_out == 'c')
                                ^
2996.         o->metadata_chapters_manual = 1;
2997. 

avconv.c:3020:5: Switch condition is false. Skipping switch case
3018.         }\
3019. 
3020.     SET_DICT(type_in, meta_in, ic, idx_in);
          ^
3021.     SET_DICT(type_out, meta_out, oc, idx_out);
3022. 

avconv.c:3020:5: Switch condition is false. Skipping switch case
3018.         }\
3019. 
3020.     SET_DICT(type_in, meta_in, ic, idx_in);
          ^
3021.     SET_DICT(type_out, meta_out, oc, idx_out);
3022. 

avconv.c:3020:5: Switch condition is false. Skipping switch case
3018.         }\
3019. 
3020.     SET_DICT(type_in, meta_in, ic, idx_in);
          ^
3021.     SET_DICT(type_out, meta_out, oc, idx_out);
3022. 

avconv.c:3021:5: Switch condition is false. Skipping switch case
3019. 
3020.     SET_DICT(type_in, meta_in, ic, idx_in);
3021.     SET_DICT(type_out, meta_out, oc, idx_out);
          ^
3022. 
3023.     /* for input streams choose first matching stream */

avconv.c:3021:5: Switch condition is false. Skipping switch case
3019. 
3020.     SET_DICT(type_in, meta_in, ic, idx_in);
3021.     SET_DICT(type_out, meta_out, oc, idx_out);
          ^
3022. 
3023.     /* for input streams choose first matching stream */

avconv.c:3021:5: Switch condition is false. Skipping switch case
3019. 
3020.     SET_DICT(type_in, meta_in, ic, idx_in);
3021.     SET_DICT(type_out, meta_out, oc, idx_out);
          ^
3022. 
3023.     /* for input streams choose first matching stream */

avconv.c:3024:9: Taking false branch
3022. 
3023.     /* for input streams choose first matching stream */
3024.     if (type_in == 's') {
              ^
3025.         for (i = 0; i < ic->nb_streams; i++) {
3026.             if ((ret = check_stream_specifier(ic, ic->streams[i], istream_spec)) > 0) {

avconv.c:3038:9: Taking false branch
3036.     }
3037. 
3038.     if (type_out == 's') {
              ^
3039.         for (i = 0; i < oc->nb_streams; i++) {
3040.             if ((ret = check_stream_specifier(oc, oc->streams[i], ostream_spec)) > 0) {

avconv.c:3047:9: 
3045.         }
3046.     } else
3047.         av_dict_copy(meta_out, *meta_in, AV_DICT_DONT_OVERWRITE);
              ^
3048. 
3049.     return 0;

static int copy_metadata(char *outspec, char *inspec, AVFormatContext *oc, AVFormatContext *ic, OptionsContext *o)
{
    AVDictionary **meta_in = NULL;
    AVDictionary **meta_out;
    int i, ret = 0;
    char type_in, type_out;
    const char *istream_spec = NULL, *ostream_spec = NULL;
    int idx_in = 0, idx_out = 0;
    parse_meta_type(inspec,  &type_in,  &idx_in,  &istream_spec);
    parse_meta_type(outspec, &type_out, &idx_out, &ostream_spec);
    if (type_in == 'g' || type_out == 'g')
        o->metadata_global_manual = 1;
    if (type_in == 's' || type_out == 's')
        o->metadata_streams_manual = 1;
    if (type_in == 'c' || type_out == 'c')
        o->metadata_chapters_manual = 1;
#define METADATA_CHECK_INDEX(index, nb_elems, desc)\
    if ((index) < 0 || (index) >= (nb_elems)) {\
        av_log(NULL, AV_LOG_FATAL, "Invalid %s index %d while processing metadata maps.\n",\
                (desc), (index));\
        exit_program(1);\
    }
#define SET_DICT(type, meta, context, index)\
        switch (type) {\
        case 'g':\
            meta = &context->metadata;\
            break;\
        case 'c':\
            METADATA_CHECK_INDEX(index, context->nb_chapters, "chapter")\
            meta = &context->chapters[index]->metadata;\
            break;\
        case 'p':\
            METADATA_CHECK_INDEX(index, context->nb_programs, "program")\
            meta = &context->programs[index]->metadata;\
            break;\
        }\
    SET_DICT(type_in, meta_in, ic, idx_in);
    SET_DICT(type_out, meta_out, oc, idx_out);
    if (type_in == 's') {
        for (i = 0; i < ic->nb_streams; i++) {
            if ((ret = check_stream_specifier(ic, ic->streams[i], istream_spec)) > 0) {
                meta_in = &ic->streams[i]->metadata;
                break;
            } else if (ret < 0)
                exit_program(1);
        }
        if (!meta_in) {
            av_log(NULL, AV_LOG_FATAL, "Stream specifier %s does not match  any streams.\n", istream_spec);
            exit_program(1);
        }
    }
    if (type_out == 's') {
        for (i = 0; i < oc->nb_streams; i++) {
            if ((ret = check_stream_specifier(oc, oc->streams[i], ostream_spec)) > 0) {
                meta_out = &oc->streams[i]->metadata;
                av_dict_copy(meta_out, *meta_in, AV_DICT_DONT_OVERWRITE);
            } else if (ret < 0)
                exit_program(1);
        }
    } else
        av_dict_copy(meta_out, *meta_in, AV_DICT_DONT_OVERWRITE);
    return 0;
}
['static int copy_metadata(char *outspec, char *inspec, AVFormatContext *oc, AVFormatContext *ic, OptionsContext *o)\n{\n    AVDictionary **meta_in = NULL;\n    AVDictionary **meta_out;\n    int i, ret = 0;\n    char type_in, type_out;\n    const char *istream_spec = NULL, *ostream_spec = NULL;\n    int idx_in = 0, idx_out = 0;\n    parse_meta_type(inspec,  &type_in,  &idx_in,  &istream_spec);\n    parse_meta_type(outspec, &type_out, &idx_out, &ostream_spec);\n    if (type_in == \'g\' || type_out == \'g\')\n        o->metadata_global_manual = 1;\n    if (type_in == \'s\' || type_out == \'s\')\n        o->metadata_streams_manual = 1;\n    if (type_in == \'c\' || type_out == \'c\')\n        o->metadata_chapters_manual = 1;\n#define METADATA_CHECK_INDEX(index, nb_elems, desc)\\\n    if ((index) < 0 || (index) >= (nb_elems)) {\\\n        av_log(NULL, AV_LOG_FATAL, "Invalid %s index %d while processing metadata maps.\\n",\\\n                (desc), (index));\\\n        exit_program(1);\\\n    }\n#define SET_DICT(type, meta, context, index)\\\n        switch (type) {\\\n        case \'g\':\\\n            meta = &context->metadata;\\\n            break;\\\n        case \'c\':\\\n            METADATA_CHECK_INDEX(index, context->nb_chapters, "chapter")\\\n            meta = &context->chapters[index]->metadata;\\\n            break;\\\n        case \'p\':\\\n            METADATA_CHECK_INDEX(index, context->nb_programs, "program")\\\n            meta = &context->programs[index]->metadata;\\\n            break;\\\n        }\\\n    SET_DICT(type_in, meta_in, ic, idx_in);\n    SET_DICT(type_out, meta_out, oc, idx_out);\n    if (type_in == \'s\') {\n        for (i = 0; i < ic->nb_streams; i++) {\n            if ((ret = check_stream_specifier(ic, ic->streams[i], istream_spec)) > 0) {\n                meta_in = &ic->streams[i]->metadata;\n                break;\n            } else if (ret < 0)\n                exit_program(1);\n        }\n        if (!meta_in) {\n            av_log(NULL, AV_LOG_FATAL, "Stream specifier %s does not match  any streams.\\n", istream_spec);\n            exit_program(1);\n        }\n    }\n    if (type_out == \'s\') {\n        for (i = 0; i < oc->nb_streams; i++) {\n            if ((ret = check_stream_specifier(oc, oc->streams[i], ostream_spec)) > 0) {\n                meta_out = &oc->streams[i]->metadata;\n                av_dict_copy(meta_out, *meta_in, AV_DICT_DONT_OVERWRITE);\n            } else if (ret < 0)\n                exit_program(1);\n        }\n    } else\n        av_dict_copy(meta_out, *meta_in, AV_DICT_DONT_OVERWRITE);\n    return 0;\n}', 'static void parse_meta_type(char *arg, char *type, int *index, const char **stream_spec)\n{\n    if (*arg) {\n        *type = *arg;\n        switch (*arg) {\n        case \'g\':\n            break;\n        case \'s\':\n            if (*(++arg) && *arg != \':\') {\n                av_log(NULL, AV_LOG_FATAL, "Invalid metadata specifier %s.\\n", arg);\n                exit_program(1);\n            }\n            *stream_spec = *arg == \':\' ? arg + 1 : "";\n            break;\n        case \'c\':\n        case \'p\':\n            if (*(++arg) == \':\')\n                *index = strtol(++arg, NULL, 0);\n            break;\n        default:\n            av_log(NULL, AV_LOG_FATAL, "Invalid metadata type %c.\\n", *arg);\n            exit_program(1);\n        }\n    } else\n        *type = \'g\';\n}']