| 
																	
																	
																		
																	
																	
																 | 
																@@ -6035,7 +6035,7 @@ static int mov_read_saiz(MOVContext *c, AVIOContext *pb, MOVAtom atom) | 
															
														
														
													
														
															
																 | 
																 | 
																    MOVEncryptionIndex *encryption_index; | 
																 | 
																 | 
																    MOVEncryptionIndex *encryption_index; | 
															
														
														
													
														
															
																 | 
																 | 
																    MOVStreamContext *sc; | 
																 | 
																 | 
																    MOVStreamContext *sc; | 
															
														
														
													
														
															
																 | 
																 | 
																    int ret; | 
																 | 
																 | 
																    int ret; | 
															
														
														
													
														
															
																 | 
																 | 
																    unsigned int sample_count; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    unsigned int sample_count, aux_info_type, aux_info_param; | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																    ret = get_current_encryption_info(c, &encryption_index, &sc); | 
																 | 
																 | 
																    ret = get_current_encryption_info(c, &encryption_index, &sc); | 
															
														
														
													
														
															
																 | 
																 | 
																    if (ret != 1) | 
																 | 
																 | 
																    if (ret != 1) | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																	
																 | 
																@@ -6054,14 +6054,33 @@ static int mov_read_saiz(MOVContext *c, AVIOContext *pb, MOVAtom atom) | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																    avio_r8(pb); /* version */ | 
																 | 
																 | 
																    avio_r8(pb); /* version */ | 
															
														
														
													
														
															
																 | 
																 | 
																    if (avio_rb24(pb) & 0x01) {  /* flags */ | 
																 | 
																 | 
																    if (avio_rb24(pb) & 0x01) {  /* flags */ | 
															
														
														
													
														
															
																 | 
																 | 
																        if (avio_rb32(pb) != sc->cenc.default_encrypted_sample->scheme) { | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																            av_log(c->fc, AV_LOG_DEBUG, "Ignoring saiz box with non-zero aux_info_type\n"); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																            return 0; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        } | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        if (avio_rb32(pb) != 0) { | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																            av_log(c->fc, AV_LOG_DEBUG, "Ignoring saiz box with non-zero aux_info_type_parameter\n"); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																            return 0; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        aux_info_type = avio_rb32(pb); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        aux_info_param = avio_rb32(pb); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        if (sc->cenc.default_encrypted_sample) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            if (aux_info_type != sc->cenc.default_encrypted_sample->scheme) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                av_log(c->fc, AV_LOG_DEBUG, "Ignoring saiz box with non-zero aux_info_type\n"); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                return 0; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            } | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            if (aux_info_param != 0) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                av_log(c->fc, AV_LOG_DEBUG, "Ignoring saiz box with non-zero aux_info_type_parameter\n"); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                return 0; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            } | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        } else { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            // Didn't see 'schm' or 'tenc', so this isn't encrypted. | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            if ((aux_info_type == MKBETAG('c','e','n','c') || | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                 aux_info_type == MKBETAG('c','e','n','s') || | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                 aux_info_type == MKBETAG('c','b','c','1') || | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                 aux_info_type == MKBETAG('c','b','c','s')) && | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                aux_info_param == 0) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                av_log(c->fc, AV_LOG_ERROR, "Saw encrypted saiz without schm/tenc\n"); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                return AVERROR_INVALIDDATA; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            } else { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                return 0; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            } | 
															
														
														
													
														
															
																 | 
																 | 
																        } | 
																 | 
																 | 
																        } | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    } else if (!sc->cenc.default_encrypted_sample) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        // Didn't see 'schm' or 'tenc', so this isn't encrypted. | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        return 0; | 
															
														
														
													
														
															
																 | 
																 | 
																    } | 
																 | 
																 | 
																    } | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																    encryption_index->auxiliary_info_default_size = avio_r8(pb); | 
																 | 
																 | 
																    encryption_index->auxiliary_info_default_size = avio_r8(pb); | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																	
																	
																		
																	
																	
																 | 
																@@ -6089,7 +6108,8 @@ static int mov_read_saio(MOVContext *c, AVIOContext *pb, MOVAtom atom) | 
															
														
														
													
														
															
																 | 
																 | 
																    MOVEncryptionIndex *encryption_index; | 
																 | 
																 | 
																    MOVEncryptionIndex *encryption_index; | 
															
														
														
													
														
															
																 | 
																 | 
																    MOVStreamContext *sc; | 
																 | 
																 | 
																    MOVStreamContext *sc; | 
															
														
														
													
														
															
																 | 
																 | 
																    int i, ret; | 
																 | 
																 | 
																    int i, ret; | 
															
														
														
													
														
															
																 | 
																 | 
																    unsigned int version, entry_count, alloc_size = 0; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    unsigned int version, entry_count, aux_info_type, aux_info_param; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    unsigned int alloc_size = 0; | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																    ret = get_current_encryption_info(c, &encryption_index, &sc); | 
																 | 
																 | 
																    ret = get_current_encryption_info(c, &encryption_index, &sc); | 
															
														
														
													
														
															
																 | 
																 | 
																    if (ret != 1) | 
																 | 
																 | 
																    if (ret != 1) | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																	
																 | 
																@@ -6108,14 +6128,33 @@ static int mov_read_saio(MOVContext *c, AVIOContext *pb, MOVAtom atom) | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																    version = avio_r8(pb); /* version */ | 
																 | 
																 | 
																    version = avio_r8(pb); /* version */ | 
															
														
														
													
														
															
																 | 
																 | 
																    if (avio_rb24(pb) & 0x01) {  /* flags */ | 
																 | 
																 | 
																    if (avio_rb24(pb) & 0x01) {  /* flags */ | 
															
														
														
													
														
															
																 | 
																 | 
																        if (avio_rb32(pb) != sc->cenc.default_encrypted_sample->scheme) { | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																            av_log(c->fc, AV_LOG_DEBUG, "Ignoring saio box with non-zero aux_info_type\n"); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																            return 0; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        } | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        if (avio_rb32(pb) != 0) { | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																            av_log(c->fc, AV_LOG_DEBUG, "Ignoring saio box with non-zero aux_info_type_parameter\n"); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																            return 0; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        aux_info_type = avio_rb32(pb); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        aux_info_param = avio_rb32(pb); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        if (sc->cenc.default_encrypted_sample) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            if (aux_info_type != sc->cenc.default_encrypted_sample->scheme) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                av_log(c->fc, AV_LOG_DEBUG, "Ignoring saio box with non-zero aux_info_type\n"); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                return 0; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            } | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            if (aux_info_param != 0) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                av_log(c->fc, AV_LOG_DEBUG, "Ignoring saio box with non-zero aux_info_type_parameter\n"); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                return 0; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            } | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        } else { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            // Didn't see 'schm' or 'tenc', so this isn't encrypted. | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            if ((aux_info_type == MKBETAG('c','e','n','c') || | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                 aux_info_type == MKBETAG('c','e','n','s') || | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                 aux_info_type == MKBETAG('c','b','c','1') || | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                 aux_info_type == MKBETAG('c','b','c','s')) && | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                aux_info_param == 0) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                av_log(c->fc, AV_LOG_ERROR, "Saw encrypted saio without schm/tenc\n"); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                return AVERROR_INVALIDDATA; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            } else { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                return 0; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            } | 
															
														
														
													
														
															
																 | 
																 | 
																        } | 
																 | 
																 | 
																        } | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    } else if (!sc->cenc.default_encrypted_sample) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        // Didn't see 'schm' or 'tenc', so this isn't encrypted. | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        return 0; | 
															
														
														
													
														
															
																 | 
																 | 
																    } | 
																 | 
																 | 
																    } | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																    entry_count = avio_rb32(pb); | 
																 | 
																 | 
																    entry_count = avio_rb32(pb); | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																	
																	
																	
																 | 
																
  |