[dvblast-devel] [Git][videolan/dvblast][master] 3 commits: if hour, min or sec is >= 100 we can overflow duration_str

Georgi Chorbadzhiyski georgi at unixsol.net
Tue Sep 1 08:28:53 CEST 2020


On 1.09.20 1:01, Christophe Massiot wrote:
> Christophe Massiot pushed to branch master at VideoLAN / dvblast
> 
> 
> Commits:
> ff1e5700 by Marcin Kozlowski at 2020-03-25T08:53:48+01:00
> if hour, min or sec is >= 100 we can overflow duration_str
> 
> Also use %u for hours as it can be >= 100
> 
> - - - - -
> 71e95679 by Marcin Kozlowski at 2020-04-23T15:12:15+02:00
> Fixed forgotten variables
> 
> - - - - -
> c6fa7806 by Christophe Massiot at 2020-09-01T00:00:46+02:00
> Merge branch 'marcinguy-duration-fix'
> 
> - - - - -
> 
> 
> 1 changed file:
> 
> - dvblastctl.c
> 
> 
> Changes:
> 
> =====================================
> dvblastctl.c
> =====================================
> @@ -217,32 +217,31 @@ void print_eit_events(uint8_t *p_eit, f_print pf_print, void *print_opaque, f_ic
>      uint8_t j = 0;
>      while ((p_event = eit_get_event(p_eit, j)) != NULL) {
>          j++;
> -        char start_str[24], duration_str[10];
> +        char start_str[24];

A much simpler and better fix (if we care about hours/minutes/seconds bigger than 99)
is to just increase duration_str to 13 or to be on the safe side 16.

>          int duration, hour, min, sec;
>          time_t start_ts;
>  
>          start_ts = dvb_time_format_UTC(eitn_get_start_time(p_event), NULL, start_str);
>  
>          dvb_time_decode_bcd(eitn_get_duration_bcd(p_event), &duration, &hour, &min, &sec);
> -        sprintf(duration_str, "%02d:%02d:%02d", hour, min, sec);
>  
>          switch (i_print_type) {
>          case PRINT_XML:
>              pf_print(print_opaque, "<EVENT id=\"%u\" start_time=\"%ld\" start_time_dec=\"%s\""
> -                                   " duration=\"%u\" duration_dec=\"%s\""
> +                                   " duration=\"%u\" duration_dec=\"%u:%02u:%02u\""

That loses zero padding for hours.

>                                     " running=\"%d\" free_CA=\"%d\">",
>                       eitn_get_event_id(p_event),
>                       start_ts, start_str,
> -                     duration, duration_str,
> +                     duration, hour, min, sec,
>                       eitn_get_running(p_event),
>                       eitn_get_ca(p_event)
>                      );
>              break;
>          default:
> -            pf_print(print_opaque, "  * EVENT id=%u start_time=%ld start_time_dec=\"%s\" duration=%u duration_dec=%s running=%d free_CA=%d",
> +            pf_print(print_opaque, "  * EVENT id=%u start_time=%ld start_time_dec=\"%s\" duration=%u duration_dec=%u:%02u:%02u running=%d free_CA=%d",
>                       eitn_get_event_id(p_event),
>                       start_ts, start_str,
> -                     duration, duration_str,
> +                     duration, hour, min, sec,
>                       eitn_get_running(p_event),
>                       eitn_get_ca(p_event)
>                      );

-- 
Georgi Chorbadzhiyski | https://georgi.unixsol.org/ | https://georgi.unixsol.org/git/



More information about the dvblast-devel mailing list