[dvblast-devel] segfault dvblastctl get_sdt (xml or normal)

Georgi Chorbadzhiyski gf at unixsol.org
Tue Jul 17 23:50:43 CEST 2018


On 17.07.18 14:11, Ibrahim Tachijian wrote:
> Found a transponder on 28.2E that will segfault when running dvblastctl get_sdt
> *Ran GDB and got the following output:
> *
> 
> /opt/streamer_startup/php/dvblast/dvblastctl -r /tmp/326.sock get_sdt
> /bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
> [Thread debugging using libthread_db enabled]
> Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
> new SDT actual tsid=2094 version=10 onid=2
>   * service sid=22601 eit_schedule eit_pf running=4
>     - desc 48 service type=0x1 provider="BSkyB" service="ATN Bangla UK"
>     - desc 49 country_availability available=1 country=GBR
>     - desc 49 country_availability available=1 country=IRL
>     - desc 5f private_data specifier=0x00000002
>     - desc b2 unknown length=42 value=1d0031df221efe534deede4d357182957eedaae3024d571832858d0cf2d6cd2c6ab8c16c191a7ef6e7b5
>   * service sid=22602 eit_schedule eit_pf running=4
>     - desc 48 service type=0x1 provider="BSkyB" service="CHSTV"
>     - desc 49 country_availability available=1 country=GBR
>     - desc 49 country_availability available=1 country=IRL
>     - desc 5f private_data specifier=0x00000002
>     - desc b2 unknown length=69 value=1d0131df2ae1dccb7955c60a51eab8c11355c610f903de39a2ee4ebaed75647b6e8007fe566944755c608984a34bfb2ee4ebaed75646c6f76f269ab8c14abf76dcde5dfe95
>   * service sid=22603 eit_schedule eit_pf running=4
>     - desc 48 service type=0x1 provider="BSkyB" service="Ahlebait TV"
>     - desc 49 country_availability available=1 country=GBR
>     - desc 49 country_availability available=1 country=IRL
>     - desc 5f private_data specifier=0x00000002
>     - desc b2 unknown length=121 value=1d0111df38af4fe12adaae3013ca1a755c614832a7f44da145af211d75daeac8eab87b6e85b0e475153e1aae303a9a6a7c93d5c60a51d8d571832858dc9d75daeac8eab8c1d7c2c6ab8c14a1369ab8c14abf76d07755c60841db594b737dc57a7f0956d571809d8d4f927d571822ee2bd3f84ab6ab8c04fb55
>   * service sid=22604 eit_schedule eit_pf running=4
>     - desc 48 service type=0x1 provider="BSkyB" service="Xpanded TV2"
>     - desc 49 country_availability available=1 country=GBR
>     - desc 49 country_availability available=1 country=IRL
>     - desc 5f private_data specifier=0x00000002
>     - desc b2 unknown length=140 value=1d00313f2afb6355c605baae3024dccd7aae305cd5718516ab8c21f71b78f5718127a755c6027b84f0f0dd16cf15aae30b6d59a5b14b786ab8c21b0d571834d5c61b56dc0be606ab8c21f7097808637430eb35b997ab8c36ad86956d571846eab8c0b6c64acd355c610fbaaf422ba2af1629b6b1f52ae3052fd57182268641b73571834bff2cb5718348218a
>   * service sid=22605 eit_schedule eit_pf running=4
>     - desc 48 service type=0x1 provider="BSkyB" service="HUM EUROPE"
>     - desc 49 country_availability available=1 country=GBR
>     - desc 49 country_availability available=1 country=IRL
>     - desc 5f private_data specifier=0x00000002
>     - desc b2 unknown length=144 value=1d00d1df2ab57627741577ac8215e82c6ab8c1b755c60d1aae3087d5718206aad5d89dd7f618ca06ab8c1170acc050697b1aae306887c8355c611baae3087d571807ee20597dc9d75daeac8d8d52497d91d5718346f76f269ab8c14abf76c391c653586ab8c14f55c60701630792cd02c60391c2c6e4ce055c60a51eab8c1f4355c6049aae305b06469f87238ca6b0ed
>   * service sid=22606 eit_schedule eit_pf running=4
>     - desc 48 service type=0x1 provider="BSkyB" service="TalkingPictures"
>     - desc 49 country_availability available=1 country=GBR
>     - desc 49 country_availability available=1 country=IRL
>     - desc 5f private_data specifier=0x00000002
>     - desc b2 unknown length=142 value=1d00d038b3128faae308dd571843eaa5179801a5d1ccb5feab8c1a32651edacaff5718439656820c37837938632c37f8ebe1637275fa57c3196e4bfc75f0b185cd2055c60a51e155e5ad2f0d571809eab8c12b2b69a53b6eb7d5c60b9aae307ed5718346ab8c21f1497836ab8c093465f2de0da3fac355c608baae3042d5718126ab8c04f55c609d571846923daa
> 
> Program received signal SIGSEGV, Segmentation fault.
> sdt_table_print (pf_print=0x55555555aea0 <psi_print>, print_opaque=0x0, pf_iconv=0x55555555c900 <psi_iconv>, iconv_opaque=0x0, i_print_type=PRINT_TEXT,
>     pp_sections=0x555555773010) at /usr/local/include/bitstream/dvb/si/sdt_print.h:76
> 76        while ((p_service = sdt_get_service(p_section, j)) != NULL) {
> (gdb)

The fix is the same as the last time. It is still just a hack but
avoids the problem entirely:

Apply to bitstream, 'make install', then recompile dvblast.

diff --git a/dvb/si/sdt_print.h b/dvb/si/sdt_print.h
index fcf9f28..dab5b84 100644
--- a/dvb/si/sdt_print.h
+++ b/dvb/si/sdt_print.h
@@ -73,6 +73,9 @@ static inline void sdt_table_print(uint8_t **pp_sections,
         uint8_t *p_service;
         int j = 0;

+       if (p_section == NULL)
+           break;
+
         while ((p_service = sdt_get_service(p_section, j)) != NULL) {
             j++;
             switch (i_print_type) {

-- 
Georgi Chorbadzhiyski | https://georgi.unixsol.org/ | https://github.com/gfto/


More information about the dvblast-devel mailing list