diff --git a/src/filters/isoffin_read_ch.c b/src/filters/isoffin_read_ch.c index 90f5972eb1..49c1914403 100644 --- a/src/filters/isoffin_read_ch.c +++ b/src/filters/isoffin_read_ch.c @@ -480,10 +480,10 @@ void isor_reader_get_sample(ISOMChannel *ch) ch->sample_num--; } else { if (ch->to_init && ch->sample_num) { - GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("[IsoMedia] Failed to fetch initial sample %d for track %d\n")); + GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("[IsoMedia] Failed to fetch initial sample %d for track %d\n", ch->sample_num, ch->track)); ch->last_state = GF_ISOM_INVALID_FILE; - } - if (ch->sample_num >= gf_isom_get_sample_count(ch->owner->mov, ch->track)) { + } else { + GF_LOG(GF_LOG_ERROR, GF_LOG_CONTAINER, ("[IsoMedia] File truncated, aborting read for track %d\n", ch->track)); ch->last_state = GF_EOS; } } @@ -507,6 +507,10 @@ void isor_reader_get_sample(ISOMChannel *ch) } else { e = gf_isom_last_error(ch->owner->mov); GF_LOG((e==GF_ISOM_INCOMPLETE_FILE) ? GF_LOG_DEBUG : GF_LOG_WARNING, GF_LOG_DASH, ("[IsoMedia] Track #%d fail to fetch sample %d / %d: %s\n", ch->track, ch->sample_num, gf_isom_get_sample_count(ch->owner->mov, ch->track), gf_error_to_string(e) )); + + if ((elast_state = GF_EOS; + } } return; } diff --git a/src/media_tools/media_export.c b/src/media_tools/media_export.c index 3ec7024b60..26e3c1af32 100644 --- a/src/media_tools/media_export.c +++ b/src/media_tools/media_export.c @@ -1075,6 +1075,11 @@ GF_Err gf_media_export_saf(GF_MediaExporter *dumper) GF_ISOSample *samp; if (safs[i].last_sample==safs[i].nb_samp) continue; samp = gf_isom_get_sample(dumper->file, safs[i].track_num, safs[i].last_sample + 1, &di); + if (!samp) { + gf_saf_mux_del(mux); + return gf_isom_last_error(dumper->file); + } + gf_saf_mux_add_au(mux, safs[i].stream_id, (u32) (samp->DTS+samp->CTS_Offset), samp->data, samp->dataLength, (samp->IsRAP==RAP) ? 1 : 0); /*data is kept by muxer!!*/ gf_free(samp); diff --git a/src/scene_manager/scene_dump.c b/src/scene_manager/scene_dump.c index 073a1ff6c8..577cb79095 100644 --- a/src/scene_manager/scene_dump.c +++ b/src/scene_manager/scene_dump.c @@ -939,10 +939,12 @@ static void gf_dump_vrml_field(GF_SceneDumper *sdump, GF_Node *node, GF_FieldInf } if (!sdump->XMLDump) gf_fprintf(sdump->trace, "["); - for (i=0; icount; i++) { - if (i) gf_fprintf(sdump->trace, " "); - gf_sg_vrml_mf_get_item(field.far_ptr, field.fieldType, &slot_ptr, i); - gf_dump_vrml_sffield(sdump, sf_type, slot_ptr, 1, node); + if (mffield) { + for (i=0; icount; i++) { + if (i) gf_fprintf(sdump->trace, " "); + gf_sg_vrml_mf_get_item(field.far_ptr, field.fieldType, &slot_ptr, i); + gf_dump_vrml_sffield(sdump, sf_type, slot_ptr, 1, node); + } } if (!sdump->XMLDump) gf_fprintf(sdump->trace, "]"); @@ -1261,11 +1263,13 @@ static void gf_dump_vrml_proto_field(GF_SceneDumper *sdump, GF_Node *node, GF_Fi } else { gf_fprintf(sdump->trace, " %s=\"", GetXMTFieldTypeValueName(field.fieldType)); } - for (i=0; icount; i++) { - if (i) gf_fprintf(sdump->trace, " "); - if (field.fieldType != GF_SG_VRML_MFNODE) { - gf_sg_vrml_mf_get_item(field.far_ptr, field.fieldType, &slot_ptr, i); - gf_dump_vrml_sffield(sdump, sf_type, slot_ptr, (mffield->count>1) ? 1 : 0, node); + if (mffield) { + for (i=0; icount; i++) { + if (i) gf_fprintf(sdump->trace, " "); + if (field.fieldType != GF_SG_VRML_MFNODE) { + gf_sg_vrml_mf_get_item(field.far_ptr, field.fieldType, &slot_ptr, i); + gf_dump_vrml_sffield(sdump, sf_type, slot_ptr, (mffield->count>1) ? 1 : 0, node); + } } } gf_fprintf(sdump->trace, "\"/>\n"); diff --git a/testsuite b/testsuite index 0b59e2cd09..40aae7925c 160000 --- a/testsuite +++ b/testsuite @@ -1 +1 @@ -Subproject commit 0b59e2cd09a22116bb2ff1f19c09b2217adc0e29 +Subproject commit 40aae7925c8c727a55c5ad39c77952829f27cd74