Package: release.debian.org Severity: normal User: release.debian....@packages.debian.org Usertags: unblock
Please unblock package v4l-utils Hello, please unblock the latest stable version of v4l-utils 1.12. It fixes a crash in the Digital Video Broadcasting (DVB) library that occurs when a German DVB-T2 transport stream is parsed. Additionally it fixes a bug where identical transport streams were not detected as such. Thanks, Gregor diff -Nru v4l-utils-1.12.3/ChangeLog v4l-utils-1.12.5/ChangeLog --- v4l-utils-1.12.3/ChangeLog 2017-02-17 20:07:58.000000000 +0100 +++ v4l-utils-1.12.5/ChangeLog 2017-05-10 20:23:45.000000000 +0200 @@ -1,3 +1,27 @@ +v4l-utils-1.12.5 +---------------- + +Mauro Carvalho Chehab (1): + dvb-scan: fix the logic for multi-section handling + + +v4l-utils-1.12.4 +---------------- + +Clemens Ladisch (1): + libdvbv5: T2 delivery descriptor: fix wrong size of bandwidth field + +Mauro Carvalho Chehab (5): + desc_t2_delivery: consider valid to have a short T2 descriptor + desc_t2_delivery: properly handle cell and subcell tables + desc_t2_delivery: improve print dumps of T2 delivery + desc_t2_delivery: resize frequency array for subcel freqs + libdvbv5: add support for more PMT descriptors + +Reinhard Speyerer (1): + libdvbv5: fix T2 delivery descriptor parsing in dvb_desc_t2_delivery_init() + + v4l-utils-1.12.3 ---------------- diff -Nru v4l-utils-1.12.3/configure v4l-utils-1.12.5/configure --- v4l-utils-1.12.3/configure.ac 2017-02-17 20:05:46.000000000 +0100 +++ v4l-utils-1.12.5/configure.ac 2017-05-10 20:24:05.000000000 +0200 @@ -3,7 +3,7 @@ # Process this file with autoconf to produce a configure script. AC_PREREQ(2.59) -AC_INIT([v4l-utils],[1.12.3]) +AC_INIT([v4l-utils],[1.12.5]) AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_MACRO_DIR([m4]) diff -Nru v4l-utils-1.12.3/contrib/cobalt-ctl/Makefile v4l-utils-1.12.5/contrib/cobalt-ctl/Makefile diff -Nru v4l-utils-1.12.3/debian/changelog v4l-utils-1.12.5/debian/changelog --- v4l-utils-1.12.3/debian/changelog 2017-02-17 20:14:26.000000000 +0100 +++ v4l-utils-1.12.5/debian/changelog 2017-05-10 20:29:42.000000000 +0200 @@ -1,3 +1,22 @@ +v4l-utils (1.12.5-1) unstable; urgency=medium + + * Imported Upstream version 1.12.5 (Closes: #859008) + + -- Gregor Jasny <gja...@googlemail.com> Wed, 10 May 2017 20:29:42 +0200 + +v4l-utils (1.12.4-1) unstable; urgency=medium + + * Imported Upstream version 1.12.4 (Closes: #859008) + * Remove patches applied upstream + + -- Gregor Jasny <gja...@googlemail.com> Sat, 06 May 2017 19:29:03 +0200 + +v4l-utils (1.12.3-2) unstable; urgency=medium + + * Fix DVB descriptor parsing (Closes: #859008) + + -- Gregor Jasny <gja...@googlemail.com> Tue, 02 May 2017 22:12:52 +0200 + v4l-utils (1.12.3-1) unstable; urgency=medium * Imported Upstream version 1.12.3 (Closes: #854100) diff -Nru v4l-utils-1.12.3/debian/control v4l-utils-1.12.5/debian/control --- v4l-utils-1.12.3/debian/control 2017-01-22 21:28:14.000000000 +0100 +++ v4l-utils-1.12.5/debian/control 2017-05-06 19:27:07.000000000 +0200 @@ -21,7 +21,7 @@ Standards-Version: 3.9.8 Vcs-Browser: https://anonscm.debian.org/cgit/collab-maint/libv4l.git Vcs-Git: https://anonscm.debian.org/git/collab-maint/libv4l.git -Homepage: http://linuxtv.org/downloads/v4l-utils/ +Homepage: https://linuxtv.org/downloads/v4l-utils/ Package: libv4l-0 Section: libs diff -Nru v4l-utils-1.12.3/debian/libdvbv5-0.symbols v4l-utils-1.12.5/debian/libdvbv5-0.symbols --- v4l-utils-1.12.3/debian/libdvbv5-0.symbols 2017-01-22 19:33:15.000000000 +0100 +++ v4l-utils-1.12.5/debian/libdvbv5-0.symbols 2017-05-06 19:43:11.000000000 +0200 @@ -271,6 +271,7 @@ isdbt_interval@Base 1.4.0 isdbt_mode@Base 1.4.0 pmt_stream_name@Base 1.4.0 + siso_miso@Base 1.12.4 stack_dump@Base 1.12.1 sys_atsc_props@Base 1.4.0 sys_atscmh_props@Base 1.4.0 diff -Nru v4l-utils-1.12.3/debian/watch v4l-utils-1.12.5/debian/watch --- v4l-utils-1.12.3/debian/watch 2016-06-15 21:34:30.000000000 +0200 +++ v4l-utils-1.12.5/debian/watch 2017-05-06 19:26:55.000000000 +0200 @@ -1,3 +1,3 @@ version=4 -opts=pgpsigurlmangle=s/$/.asc/ http://linuxtv.org/downloads/@PACKAGE@/ @PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate +opts=pgpsigurlmangle=s/$/.asc/ https://linuxtv.org/downloads/@PACKAGE@/ @PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate diff -Nru v4l-utils-1.12.3/lib/include/libdvbv5/desc_t2_delivery.h v4l-utils-1.12.5/lib/include/libdvbv5/desc_t2_delivery.h --- v4l-utils-1.12.3/lib/include/libdvbv5/desc_t2_delivery.h 2017-01-22 18:33:34.000000000 +0100 +++ v4l-utils-1.12.5/lib/include/libdvbv5/desc_t2_delivery.h 2017-05-10 20:21:39.000000000 +0200 @@ -45,10 +45,14 @@ * * @param cell_id_extension cell id extension * @param transposer_frequency transposer frequency + * + * NOTE: This struct is deprecated and will never be filled. All + * subcell transposer frequencies will be added to + * dvb_desc_t2_delivery::centre_frequency array. */ struct dvb_desc_t2_delivery_subcell { uint8_t cell_id_extension; - uint16_t transposer_frequency; + uint16_t transposer_frequency; // Should be 32 bits, instead } __attribute__((packed)); /** @@ -65,7 +69,8 @@ * @param other_frequency_flag other frequency flag * @param tfs_flag tfs flag * - * @param centre_frequency centre frequency vector + * @param centre_frequency centre frequency vector, for all cell and + * subcel ID's * @param frequency_loop_length size of the dvb_desc_t2_delivery::centre_frequency * vector * @@ -86,13 +91,15 @@ uint16_t transmission_mode:3; uint16_t guard_interval:3; uint16_t reserved:2; - uint16_t bandwidth:3; + uint16_t bandwidth:4; uint16_t SISO_MISO:2; } __attribute__((packed)); } __attribute__((packed)); uint32_t *centre_frequency; uint8_t frequency_loop_length; + + /* Unused, as the definitions here are incomplete */ uint8_t subcel_info_loop_length; struct dvb_desc_t2_delivery_subcell *subcell; } __attribute__((packed)); @@ -161,6 +168,12 @@ */ extern const unsigned dvbt2_transmission_mode[]; +/** + * @brief converts from internal representation to string the SISO_MISO + * field of dvb_desc_t2_delivery:SISO_MISO field. + */ +const char *siso_miso[4]; + #ifdef __cplusplus } #endif diff -Nru v4l-utils-1.12.3/lib/include/libdvbv5/libdvb-version.h v4l-utils-1.12.5/lib/include/libdvbv5/libdvb-version.h --- v4l-utils-1.12.3/lib/include/libdvbv5/libdvb-version.h 2017-02-17 20:09:16.000000000 +0100 +++ v4l-utils-1.12.5/lib/include/libdvbv5/libdvb-version.h 2017-05-10 20:26:11.000000000 +0200 @@ -1,4 +1,4 @@ #define LIBDVBV5_VERSION_MAJOR 1 #define LIBDVBV5_VERSION_MINOR 12 -#define LIBDVBV5_VERSION_PATCH 3 -#define LIBDVBV5_VERSION "1.12.3" +#define LIBDVBV5_VERSION_PATCH 5 +#define LIBDVBV5_VERSION "1.12.5" diff -Nru v4l-utils-1.12.3/lib/include/libdvbv5/pmt.h v4l-utils-1.12.5/lib/include/libdvbv5/pmt.h --- v4l-utils-1.12.3/lib/include/libdvbv5/pmt.h 2017-01-22 18:33:34.000000000 +0100 +++ v4l-utils-1.12.5/lib/include/libdvbv5/pmt.h 2017-05-06 18:51:00.000000000 +0200 @@ -104,7 +104,6 @@ * @brief User Private (from 0x80 to 0xff) */ enum dvb_streams { - stream_reserved0 = 0x00, stream_video = 0x01, stream_video_h262 = 0x02, stream_audio = 0x03, @@ -125,8 +124,20 @@ stream_14496_1_pes = 0x12, stream_14496_1_iso = 0x13, stream_download = 0x14, - stream_reserved = 0x15, - stream_private = 0x80 + stream_video_h264 = 0x1b, + stream_audio_14496_3 = 0x1c, + stream_video_hevc = 0x24, + stream_video_cavs = 0x42, + stream_video_moto = 0x80, + stream_audio_a52 = 0x81, + stream_scte_27 = 0x82, + stream_audio_sdds = 0x84, + stream_audio_dts_hdmv = 0x85, + stream_audio_e_ac3 = 0x87, + stream_audio_dts = 0x8a, + stream_audio_a52_vls = 0x91, + stream_spu_vls = 0x92, + stream_audio_sdds2 = 0x94, }; /** diff -Nru v4l-utils-1.12.3/lib/libdvbv5/descriptors/desc_t2_delivery.c v4l-utils-1.12.5/lib/libdvbv5/descriptors/desc_t2_delivery.c --- v4l-utils-1.12.3/lib/libdvbv5/descriptors/desc_t2_delivery.c 2017-01-22 18:33:34.000000000 +0100 +++ v4l-utils-1.12.5/lib/libdvbv5/descriptors/desc_t2_delivery.c 2017-05-10 20:21:39.000000000 +0200 @@ -30,7 +30,7 @@ struct dvb_desc_t2_delivery *d = desc; unsigned char *p = (unsigned char *) buf; size_t desc_len = ext->length - 1, len, len2; - int i; + int i, n, pos = 0, subcel_length; len = offsetof(struct dvb_desc_t2_delivery, bitfield); len2 = offsetof(struct dvb_desc_t2_delivery, centre_frequency); @@ -40,53 +40,76 @@ return -1; } if (desc_len < len2) { - memcpy(p, buf, len); + memcpy(d, buf, len); bswap16(d->system_id); - if (desc_len != len) - dvb_logwarn("T2 delivery descriptor is truncated"); + /* It is valid to have length == 4 */ + if (desc_len == len) + return 0; + dvb_logwarn("T2 delivery descriptor is truncated"); return -2; } - memcpy(p, buf, len2); + memcpy(d, buf, len2); + bswap16(d->system_id); + bswap16(d->bitfield); p += len2; - len = desc_len - (p - buf); - memcpy(&d->centre_frequency, p, len); - p += len; - - if (d->tfs_flag) - d->frequency_loop_length = 1; - else { - d->frequency_loop_length = *p; - p++; - } + while (desc_len - (p - buf)) { + if (desc_len - (p - buf) < sizeof(uint16_t)) { + dvb_logwarn("T2 delivery descriptor is truncated"); + return -2; + } - d->centre_frequency = calloc(d->frequency_loop_length, - sizeof(*d->centre_frequency)); - if (!d->centre_frequency) { - dvb_logerr("%s: out of memory", __func__); - return -3; - } - memcpy(d->centre_frequency, p, sizeof(*d->centre_frequency) * d->frequency_loop_length); - p += sizeof(*d->centre_frequency) * d->frequency_loop_length; + /* Discard cell ID */ + p += sizeof(uint16_t); - for (i = 0; i < d->frequency_loop_length; i++) - bswap32(d->centre_frequency[i]); + if (d->tfs_flag) { + n = *p; + p++; + } + else + n = 1; + + d->frequency_loop_length += n; + d->centre_frequency = realloc(d->centre_frequency, + d->frequency_loop_length * sizeof(*d->centre_frequency)); + if (!d->centre_frequency) { + dvb_logerr("%s: out of memory", __func__); + return -3; + } + + memcpy(&d->centre_frequency[pos], p, sizeof(*d->centre_frequency) * n); + p += sizeof(*d->centre_frequency) * n; + + for (i = 0; i < n; i++) { + bswap32(d->centre_frequency[pos]); + pos++; + } - d->subcel_info_loop_length = *p; - p++; + /* Handle subcel frequency table */ + subcel_length = *p; + p++; + for (i = 0; i < subcel_length; i++) { + if (desc_len - (p - buf) < sizeof(uint8_t) + sizeof(uint32_t)) { + dvb_logwarn("T2 delivery descriptor is truncated"); + return -2; + } + p++; // Ignore subcell ID + + // Add transposer_frequency at centre_frequency table + d->frequency_loop_length++; + d->centre_frequency = realloc(d->centre_frequency, + d->frequency_loop_length * sizeof(*d->centre_frequency)); + memcpy(&d->centre_frequency[pos], p, sizeof(*d->centre_frequency)); + bswap32(d->centre_frequency[pos]); + pos++; - d->subcell = calloc(d->subcel_info_loop_length, sizeof(*d->subcell)); - if (!d->subcell) { - dvb_logerr("%s: out of memory", __func__); - return -4; + p += sizeof(*d->centre_frequency); + } } - memcpy(d->subcell, p, sizeof(*d->subcell) * d->subcel_info_loop_length); - for (i = 0; i < d->subcel_info_loop_length; i++) - bswap16(d->subcell[i].transposer_frequency); return 0; } @@ -105,19 +128,16 @@ dvb_loginfo("| tfs_flag %d", d->tfs_flag); dvb_loginfo("| other_frequency_flag %d", d->other_frequency_flag); - dvb_loginfo("| transmission_mode %d", d->transmission_mode); - dvb_loginfo("| guard_interval %d", d->guard_interval); + dvb_loginfo("| transmission_mode %s (%d)", + fe_transmission_mode_name[dvbt2_transmission_mode[d->transmission_mode]], d->transmission_mode); + dvb_loginfo("| guard_interval %s (%d)", + fe_guard_interval_name[dvbt2_interval[d->guard_interval]], d->guard_interval ); dvb_loginfo("| reserved %d", d->reserved); - dvb_loginfo("| bandwidth %d", d->bandwidth); - dvb_loginfo("| SISO MISO %d", d->SISO_MISO); + dvb_loginfo("| bandwidth %d", dvbt2_bw[d->bandwidth]); + dvb_loginfo("| SISO MISO %s", siso_miso[d->SISO_MISO]); for (i = 0; i < d->frequency_loop_length; i++) dvb_loginfo("| centre frequency[%d] %d", i, d->centre_frequency[i]); - - for (i = 0; i < d->subcel_info_loop_length; i++) { - dvb_loginfo("| cell_id_extension[%d] %d", i, d->subcell[i].cell_id_extension); - dvb_loginfo("| transposer frequency %d", d->subcell[i].transposer_frequency); - } } void dvb_desc_t2_delivery_free(const void *desc) @@ -159,3 +179,8 @@ [5] = TRANSMISSION_MODE_32K, [6 ...7] = TRANSMISSION_MODE_AUTO, /* Reserved */ }; +const char *siso_miso[4] = { + [0] = "SISO", + [1] = "MISO", + [2 ...3] = "reserved", +}; diff -Nru v4l-utils-1.12.3/lib/libdvbv5/dvb-file.c v4l-utils-1.12.5/lib/libdvbv5/dvb-file.c --- v4l-utils-1.12.3/lib/libdvbv5/dvb-file.c 2017-01-22 18:33:34.000000000 +0100 +++ v4l-utils-1.12.5/lib/libdvbv5/dvb-file.c 2017-05-06 18:51:00.000000000 +0200 @@ -1024,6 +1024,9 @@ case 0x01: /* ISO/IEC 11172-2 Video */ case 0x02: /* H.262, ISO/IEC 13818-2 or ISO/IEC 11172-2 video */ case 0x1b: /* H.264 AVC */ + case 0x24: /* HEVC */ + case 0x42: /* CAVS */ + case 0x80: /* MPEG-2 MOTO video */ entry->video_pid = realloc(entry->video_pid, sizeof(*entry->video_pid) * (video_len + 1)); @@ -1032,9 +1035,17 @@ break; case 0x03: /* ISO/IEC 11172-3 Audio */ case 0x04: /* ISO/IEC 13818-3 Audio */ + case 0x07: /* DTS and DTS-HD Audio */ case 0x0f: /* ISO/IEC 13818-7 Audio with ADTS (AAC) */ case 0x11: /* ISO/IEC 14496-3 Audio with the LATM */ - case 0x81: /* user private - in general ATSC Dolby - AC-3 */ + case 0x1c: /* ISO/IEC 14496-3 Audio, without additional transport syntax */ + case 0x81: /* A52 */ + case 0x84: /* SDDS */ + case 0x85: /* DTS on HDMV */ + case 0x87: /* E-AC3 */ + case 0x8a: /* DTS */ + case 0x91: /* A52 VLS */ + case 0x94: /* SDDS */ entry->audio_pid = realloc(entry->audio_pid, sizeof(*entry->audio_pid) * (audio_len + 1)); diff -Nru v4l-utils-1.12.3/lib/libdvbv5/dvb-scan.c v4l-utils-1.12.5/lib/libdvbv5/dvb-scan.c --- v4l-utils-1.12.3/lib/libdvbv5/dvb-scan.c 2017-01-22 18:33:34.000000000 +0100 +++ v4l-utils-1.12.5/lib/libdvbv5/dvb-scan.c 2017-05-10 20:21:53.000000000 +0200 @@ -239,12 +239,6 @@ return -1; } ext += i; - - memset(ext, 0, sizeof(*ext)); - ext->ext_id = h.id; - ext->first_section = h.section_id; - ext->last_section = h.last_section; - new = 1; } } diff -Nru v4l-utils-1.12.3/lib/libdvbv5/tables/pmt.c v4l-utils-1.12.5/lib/libdvbv5/tables/pmt.c --- v4l-utils-1.12.3/lib/libdvbv5/tables/pmt.c 2017-01-22 18:33:34.000000000 +0100 +++ v4l-utils-1.12.5/lib/libdvbv5/tables/pmt.c 2017-05-06 18:51:00.000000000 +0200 @@ -172,7 +172,9 @@ } const char *pmt_stream_name[] = { - [stream_reserved0] = "Reserved", + [0x00 ... 0x7f] = "Reserved", + [0x80 ... 0xff] = "User Private", + [stream_video] = "Video ISO/IEC 11172", [stream_video_h262] = "Video ISO/IEC 13818-2", [stream_audio] = "Audio ISO/IEC 11172", @@ -193,7 +195,20 @@ [stream_14496_1_pes] = "ISO/IEC 14496-1 PES", [stream_14496_1_iso] = "ISO/IEC 14496-1 ISO", [stream_download] = "ISO/IEC 13818-6 Synchronized Download Protocol", - [stream_reserved ... 0x7f] = "ISO/IEC 13818-1 Reserved", - [stream_private ... 0xff] = "User Private" + + [stream_video_h264] = "H264", + [stream_audio_14496_3] = "ISO/IEC 14496-3 Audio", + [stream_video_hevc] = "HEVC", + [stream_video_cavs] = "CAVS (Chinese AVS)", + [stream_video_moto] = "MPEG-2 MOTO video", + [stream_audio_a52] = "A52", + [stream_scte_27] = "SCTE-27 (sub)", + [stream_audio_sdds] = "SDDS", + [stream_audio_dts_hdmv] = "DTS", + [stream_audio_e_ac3] = "E-AC3, ATSC", + [stream_audio_dts] = "DTS", + [stream_audio_a52_vls] = "A52 vls", + [stream_spu_vls] = "DVD_SPU vls", + [stream_audio_sdds2] = "SDDS", }; unblock v4l-utils/1.12.5-1 -- System Information: Debian Release: 9.0 APT prefers unstable APT policy: (500, 'unstable'), (1, 'experimental') Architecture: amd64 (x86_64) Foreign Architectures: i386 Kernel: Linux 4.9.0-1-amd64 (SMP w/4 CPU cores) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system)