mxfdemux: Fix various logic errors in error handling of footer partition parsing

This commit is contained in:
Sebastian Dröge 2016-11-25 15:53:50 +02:00
parent 9ff1ac59f3
commit 73e02f4553

View file

@ -2333,13 +2333,11 @@ next_try:
buffer = NULL; buffer = NULL;
if (demux->current_partition->partition.header_byte_count == 0) { if (demux->current_partition->partition.header_byte_count == 0) {
if (demux->current_partition->partition.prev_partition == 0 if (demux->current_partition->partition.this_partition == 0)
|| demux->current_partition->partition.this_partition == 0)
goto out; goto out;
demux->offset = demux->offset =
demux->run_in + demux->current_partition->partition.this_partition - demux->run_in + demux->current_partition->partition.prev_partition;
demux->current_partition->partition.prev_partition;
goto next_try; goto next_try;
} }
@ -2348,10 +2346,10 @@ next_try:
gst_mxf_demux_pull_klv_packet (demux, demux->offset, &key, &buffer, gst_mxf_demux_pull_klv_packet (demux, demux->offset, &key, &buffer,
&read); &read);
if (G_UNLIKELY (flow != GST_FLOW_OK)) { if (G_UNLIKELY (flow != GST_FLOW_OK)) {
if (!demux->current_partition->partition.prev_partition)
goto out;
demux->offset = demux->offset =
demux->run_in + demux->run_in + demux->current_partition->partition.prev_partition;
demux->current_partition->partition.this_partition -
demux->current_partition->partition.prev_partition;
goto next_try; goto next_try;
} }
@ -2366,9 +2364,10 @@ next_try:
demux->offset += read; demux->offset += read;
gst_buffer_unref (buffer); gst_buffer_unref (buffer);
buffer = NULL; buffer = NULL;
if (!demux->current_partition->partition.prev_partition)
goto out;
demux->offset = demux->offset =
demux->run_in + demux->run_in +
demux->current_partition->partition.this_partition -
demux->current_partition->partition.prev_partition; demux->current_partition->partition.prev_partition;
goto next_try; goto next_try;
} }
@ -2380,10 +2379,10 @@ next_try:
} else { } else {
gst_buffer_unref (buffer); gst_buffer_unref (buffer);
buffer = NULL; buffer = NULL;
if (!demux->current_partition->partition.prev_partition)
goto out;
demux->offset = demux->offset =
demux->run_in + demux->run_in + demux->current_partition->partition.prev_partition;
demux->current_partition->partition.this_partition -
demux->current_partition->partition.prev_partition;
goto next_try; goto next_try;
} }
} }
@ -2396,10 +2395,10 @@ next_try:
gst_mxf_demux_pull_klv_packet (demux, demux->offset, &key, &buffer, gst_mxf_demux_pull_klv_packet (demux, demux->offset, &key, &buffer,
&read); &read);
if (G_UNLIKELY (flow != GST_FLOW_OK)) { if (G_UNLIKELY (flow != GST_FLOW_OK)) {
if (!demux->current_partition->partition.prev_partition)
goto out;
demux->offset = demux->offset =
demux->run_in + demux->run_in + demux->current_partition->partition.prev_partition;
demux->current_partition->partition.this_partition -
demux->current_partition->partition.prev_partition;
goto next_try; goto next_try;
} }
@ -2411,10 +2410,10 @@ next_try:
if (G_UNLIKELY (flow != GST_FLOW_OK)) { if (G_UNLIKELY (flow != GST_FLOW_OK)) {
gst_mxf_demux_reset_metadata (demux); gst_mxf_demux_reset_metadata (demux);
if (!demux->current_partition->partition.prev_partition)
goto out;
demux->offset = demux->offset =
demux->run_in + demux->run_in + demux->current_partition->partition.prev_partition;
demux->current_partition->partition.this_partition -
demux->current_partition->partition.prev_partition;
goto next_try; goto next_try;
} }
} else if (mxf_is_descriptive_metadata (&key)) { } else if (mxf_is_descriptive_metadata (&key)) {
@ -2441,13 +2440,13 @@ next_try:
} }
/* resolve references etc */ /* resolve references etc */
if (!demux->preface || gst_mxf_demux_resolve_references (demux) !=
if (gst_mxf_demux_resolve_references (demux) !=
GST_FLOW_OK || gst_mxf_demux_update_tracks (demux) != GST_FLOW_OK) { GST_FLOW_OK || gst_mxf_demux_update_tracks (demux) != GST_FLOW_OK) {
demux->current_partition->parsed_metadata = TRUE; demux->current_partition->parsed_metadata = TRUE;
if (!demux->current_partition->partition.prev_partition)
goto out;
demux->offset = demux->offset =
demux->run_in + demux->current_partition->partition.this_partition - demux->run_in + demux->current_partition->partition.prev_partition;
demux->current_partition->partition.prev_partition;
goto next_try; goto next_try;
} }