diff --git a/libavformat/flvdec.c b/libavformat/flvdec.c index 9296ef9d31..ad38653d76 100644 --- a/libavformat/flvdec.c +++ b/libavformat/flvdec.c @@ -240,22 +240,18 @@ static int amf_parse_object(AVFormatContext *s, AVStream *astream, AVStream *vst if(amf_get_string(ioc, str_val, sizeof(str_val)) < 0) return -1; break; - case AMF_DATA_TYPE_OBJECT: { - unsigned int keylen; - + case AMF_DATA_TYPE_OBJECT: if ((vstream || astream) && key && !strcmp(KEYFRAMES_TAG, key) && depth == 1) if (parse_keyframes_index(s, ioc, vstream ? vstream : astream, max_pos) < 0) return -1; - while(avio_tell(ioc) < max_pos - 2 && (keylen = avio_rb16(ioc))) { - avio_skip(ioc, keylen); //skip key string - if(amf_parse_object(s, NULL, NULL, NULL, max_pos, depth + 1) < 0) + while (avio_tell(ioc) < max_pos - 2 && amf_get_string(ioc, str_val, sizeof(str_val)) > 0) { + if (amf_parse_object(s, astream, vstream, str_val, max_pos, depth + 1) < 0) return -1; //if we couldn't skip, bomb out. } if(avio_r8(ioc) != AMF_END_OF_OBJECT) return -1; - } break; case AMF_DATA_TYPE_NULL: case AMF_DATA_TYPE_UNDEFINED: