From: Jaroslav Kysela Date: Fri, 8 Jan 2016 08:19:12 +0000 (+0100) Subject: coverity fixes X-Git-Tag: v4.2.1~1196 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=06e80eb19e8167910643c525ba2f6a56635cef46;p=thirdparty%2Ftvheadend.git coverity fixes --- diff --git a/src/dvr/dvr.h b/src/dvr/dvr.h index ce3e45c45..61f6499dc 100644 --- a/src/dvr/dvr.h +++ b/src/dvr/dvr.h @@ -456,9 +456,9 @@ static inline int dvr_entry_is_valid(dvr_entry_t *de) int dvr_entry_get_mc(dvr_entry_t *de); -const char *dvr_entry_get_retention_string ( dvr_entry_t *de ); +char *dvr_entry_get_retention_string ( dvr_entry_t *de ); -const char *dvr_entry_get_removal_string ( dvr_entry_t *de ); +char *dvr_entry_get_removal_string ( dvr_entry_t *de ); uint32_t dvr_entry_get_retention_days( dvr_entry_t *de ); diff --git a/src/dvr/dvr_autorec.c b/src/dvr/dvr_autorec.c index 56e4a3834..3d66cd8b3 100644 --- a/src/dvr/dvr_autorec.c +++ b/src/dvr/dvr_autorec.c @@ -102,10 +102,11 @@ dvr_autorec_completed(dvr_autorec_entry_t *dae, int error_code) { uint32_t count, total = 0; dvr_entry_t *de, *de_prev; - uint32_t max_count = dvr_autorec_get_max_count(dae); + uint32_t max_count; char ubuf[UUID_HEX_SIZE]; if (dae == NULL) return; + max_count = dvr_autorec_get_max_count(dae); if (max_count <= 0) return; while (1) { count = 0; diff --git a/src/dvr/dvr_db.c b/src/dvr/dvr_db.c index 35fcd59e8..09a314d4b 100644 --- a/src/dvr/dvr_db.c +++ b/src/dvr/dvr_db.c @@ -255,7 +255,7 @@ dvr_entry_get_extra_time_post( dvr_entry_t *de ) return extra; } -const char * +char * dvr_entry_get_retention_string ( dvr_entry_t *de ) { char buf[24]; @@ -271,7 +271,7 @@ dvr_entry_get_retention_string ( dvr_entry_t *de ) return strdup(buf); } -const char * +char * dvr_entry_get_removal_string ( dvr_entry_t *de ) { char buf[24]; @@ -1573,7 +1573,7 @@ static dvr_entry_t *_dvr_entry_update if (e && e->episode && e->episode->subtitle) { save |= lang_str_set2(&de->de_subtitle, e->episode->subtitle) ? DVR_UPDATED_SUBTITLE : 0; } else if (subtitle) { - save |= lang_str_set(&de->de_title, subtitle, lang) ? DVR_UPDATED_SUBTITLE : 0; + save |= lang_str_set(&de->de_subtitle, subtitle, lang) ? DVR_UPDATED_SUBTITLE : 0; } /* EID */ @@ -3237,6 +3237,7 @@ dvr_entry_delete(dvr_entry_t *de) time_t t; struct tm tm; const char *filename; + char *str1, *str2; char tbuf[64], ubuf[UUID_HEX_SIZE], *rdir, *postcmd; int r, ret = 0; @@ -3245,13 +3246,15 @@ dvr_entry_delete(dvr_entry_t *de) if (strftime(tbuf, sizeof(tbuf), "%F %T", &tm) <= 0) *tbuf = 0; + str1 = dvr_entry_get_retention_string(de); + str2 = dvr_entry_get_removal_string(de); tvhlog(LOG_INFO, "dvr", "delete entry %s \"%s\" on \"%s\" start time %s, " "scheduled for recording by \"%s\", retention \"%s\" removal \"%s\"", idnode_uuid_as_str(&de->de_id, ubuf), lang_str_get(de->de_title, NULL), DVR_CH_NAME(de), tbuf, - de->de_creator ?: "", - dvr_entry_get_retention_string(de), - dvr_entry_get_removal_string(de)); + de->de_creator ?: "", str1, str2); + free(str2); + free(str1); if(!htsmsg_is_empty(de->de_files)) { #if ENABLE_INOTIFY diff --git a/src/dvr/dvr_rec.c b/src/dvr/dvr_rec.c index c9d85ef49..53852d64a 100644 --- a/src/dvr/dvr_rec.c +++ b/src/dvr/dvr_rec.c @@ -1090,16 +1090,16 @@ dvr_thread_mpegts_stats(dvr_entry_t *de, void *sm_data) { th_subscription_t *ts; pktbuf_t *pb = sm_data; - int ret; + int ret = 0; - if (pb == NULL) - return 0; - if ((ts = de->de_s) != NULL) { - if (pb->pb_err) { - de->de_data_errors += pb->pb_err; - ret = 1; + if (pb) { + if ((ts = de->de_s) != NULL) { + if (pb->pb_err) { + de->de_data_errors += pb->pb_err; + ret = 1; + } + subscription_add_bytes_out(ts, pktbuf_len(pb)); } - subscription_add_bytes_out(ts, pktbuf_len(pb)); } return ret; } @@ -1368,6 +1368,8 @@ dvr_thread(void *aux) case SMT_START: start_time = dispatch_clock; packets = 0; + if (ss) + streaming_start_unref(ss); ss = streaming_start_copy((streaming_start_t *)sm->sm_data); break; diff --git a/src/dvr/dvr_vfsmgr.c b/src/dvr/dvr_vfsmgr.c index 6133231a5..ac323fb99 100644 --- a/src/dvr/dvr_vfsmgr.c +++ b/src/dvr/dvr_vfsmgr.c @@ -94,13 +94,14 @@ dvr_vfs_refresh_entry(dvr_entry_t *de) return; HTSMSG_FOREACH(f, de->de_files) if ((m = htsmsg_field_get_map(f)) != NULL) { - filename = htsmsg_get_str(m, "filename"); vfs = dvr_vfs_find1(vfs, m); if (vfs) { size = htsmsg_get_s64_or_default(m, "size", 0); vfs->used_size = size <= vfs->used_size ? vfs->used_size - size : 0; } - if(statvfs(filename, &vst) < 0 || stat(filename, &st) < 0) { + filename = htsmsg_get_str(m, "filename"); + if(filename == NULL || + statvfs(filename, &vst) < 0 || stat(filename, &st) < 0) { tvhlog(LOG_ERR, "dvr", "unable to stat file '%s'", filename); goto rem; } diff --git a/src/esfilter.c b/src/esfilter.c index 9c6ce96b8..7f9031ed4 100644 --- a/src/esfilter.c +++ b/src/esfilter.c @@ -219,8 +219,7 @@ static const char * esfilter_class_get_title(idnode_t *self, const char *lang) { esfilter_t *esf = (esfilter_t *)self; - char ubuf[UUID_HEX_SIZE]; - return idnode_uuid_as_str(&esf->esf_id, ubuf); + return idnode_uuid_as_str(&esf->esf_id, prop_sbuf); } static void diff --git a/src/input/mpegts/dvb_support.c b/src/input/mpegts/dvb_support.c index 1c7d7065c..c4fd86f4a 100644 --- a/src/input/mpegts/dvb_support.c +++ b/src/input/mpegts/dvb_support.c @@ -429,6 +429,9 @@ atsc_get_string src += 3; srclen -= 3; + + if (bytecount > srclen) + return ls; if (mode == 0 && compressiontype == 0) { tvhtrace("atsc-str", " %d: comptype 0x%02x, mode 0x%02x, %d bytes: '%.*s'", diff --git a/src/input/mpegts/iptv/iptv_http.c b/src/input/mpegts/iptv/iptv_http.c index 6decd669f..2102f008c 100644 --- a/src/input/mpegts/iptv/iptv_http.c +++ b/src/input/mpegts/iptv/iptv_http.c @@ -132,6 +132,8 @@ iptv_http_get_url( http_priv_t *hp, htsmsg_t *m ) /* * extract the URL */ + if (items == NULL) + return NULL; HTSMSG_FOREACH(f, items) { if ((item = htsmsg_field_get_map(f)) == NULL) continue; inf = htsmsg_get_map(item, "stream-inf"); diff --git a/src/input/mpegts/scanfile.c b/src/input/mpegts/scanfile.c index 343fc0996..4213d1a5d 100644 --- a/src/input/mpegts/scanfile.c +++ b/src/input/mpegts/scanfile.c @@ -393,8 +393,10 @@ scanfile_load_one if (r) { free(mux); } else { - if (*net == NULL && scanfile_create_network(net, type, name, mux->dmc_fe_delsys)) + if (*net == NULL && scanfile_create_network(net, type, name, mux->dmc_fe_delsys)) { + free(mux); return -1; + } LIST_INSERT_HEAD(&(*net)->sfn_muxes, mux, dmc_link); } return 1; diff --git a/src/misc/m3u.c b/src/misc/m3u.c index fbc10ab92..e735acb71 100644 --- a/src/misc/m3u.c +++ b/src/misc/m3u.c @@ -271,7 +271,6 @@ multi: htsmsg_add_str(item, "m3u-url", get_url(buf, sizeof(buf), p, url)); } else if (item) { htsmsg_destroy(item); - free(item); item = NULL; } diff --git a/src/parsers/bitstream.c b/src/parsers/bitstream.c index 13ce82546..5f21449b0 100644 --- a/src/parsers/bitstream.c +++ b/src/parsers/bitstream.c @@ -108,7 +108,7 @@ read_golomb_ue(bitstream_t *bs) for(b = 0; !b && !bs_eof(bs) && lzb < 32; lzb++) b = read_bits1(bs); - if (lzb < 0) + if (lzb < 0 || lzb > 31) return 0; return (1 << lzb) - 1 + read_bits(bs, lzb); } diff --git a/src/plumbing/transcoding.c b/src/plumbing/transcoding.c index 568f908b1..0acde7dab 100644 --- a/src/plumbing/transcoding.c +++ b/src/plumbing/transcoding.c @@ -1162,7 +1162,7 @@ transcoder_stream_video(transcoder_t *t, transcoder_stream_t *ts, th_pkt_t *pkt) video_stream_t *vs = (video_stream_t*)ts; streaming_message_t *sm; th_pkt_t *pkt2; - static int max_bitrate = (INT_MAX / 3000) * 0.8; + static int max_bitrate = INT_MAX / ((3000*10)/8); av_init_packet(&packet); av_init_packet(&packet2); @@ -1431,6 +1431,7 @@ transcoder_stream_video(transcoder_t *t, transcoder_stream_t *ts, th_pkt_t *pkt) } /* and pull out a filtered frame */ + got_output = 0; while (1) { ret = av_buffersink_get_frame(vs->flt_bufsinkctx, vs->vid_enc_frame); if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) diff --git a/src/tcp.c b/src/tcp.c index 2b052edc9..11dd31d73 100644 --- a/src/tcp.c +++ b/src/tcp.c @@ -121,6 +121,7 @@ tcp_connect(const char *hostname, int port, const char *bindaddr, } else { snprintf(errbuf, errbufsize, "Invalid protocol family"); freeaddrinfo(ai); + close(fd); return -1; } diff --git a/src/wizard.c b/src/wizard.c index 4619d3f19..89dee7144 100644 --- a/src/wizard.c +++ b/src/wizard.c @@ -236,7 +236,7 @@ wizard_page_t *wizard_hello(void) page->aux = w = calloc(1, sizeof(wizard_hello_t)); if (config.language_ui) - strncpy(w->ui_lang, config.language_ui, sizeof(w->ui_lang)); + strncpy(w->ui_lang, config.language_ui, sizeof(w->ui_lang)-1); m = htsmsg_csv_2_list(config.language, ','); f = m ? HTSMSG_FIRST(m) : NULL; @@ -322,7 +322,7 @@ static void login_save(idnode_t *in) } if (w->username[0]) { - s = w->username && w->username[0] ? w->username : "*"; + s = w->username[0] ? w->username : "*"; conf = htsmsg_create_map(); htsmsg_add_str(conf, "prefix", w->network); htsmsg_add_str(conf, "username", s);