From patchwork Thu Dec 5 15:10:03 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nikolaus Schulz X-Patchwork-Id: 3288911 Return-Path: X-Original-To: patchwork-linux-media@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 327ACC0D4A for ; Thu, 5 Dec 2013 15:15:47 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 03F4A204A7 for ; Thu, 5 Dec 2013 15:15:46 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id ED1AD20481 for ; Thu, 5 Dec 2013 15:15:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756837Ab3LEPPf (ORCPT ); Thu, 5 Dec 2013 10:15:35 -0500 Received: from vstkex01.macnetix.de ([193.111.113.9]:52587 "EHLO vstkex01.macnetix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756796Ab3LEPPc (ORCPT ); Thu, 5 Dec 2013 10:15:32 -0500 X-Greylist: delayed 325 seconds by postgrey-1.27 at vger.kernel.org; Thu, 05 Dec 2013 10:15:31 EST Received: from localhost.localdomain (172.30.30.42) by vstkex01.macnetix.de (172.16.210.99) with Microsoft SMTP Server (TLS) id 14.3.158.1; Thu, 5 Dec 2013 16:10:01 +0100 From: Nikolaus Schulz To: Mauro Carvalho Chehab CC: , Nikolaus Schulz , "Nikolaus Schulz" Subject: [PATCH] libdvbv5: more fixes in the T2 delivery descriptor handler Date: Thu, 5 Dec 2013 16:10:03 +0100 Message-ID: <1386256203-3007-1-git-send-email-schulz@macnetix.de> X-Mailer: git-send-email 1.7.2.5 MIME-Version: 1.0 X-Originating-IP: [172.30.30.42] X-KSE-AntiSpam-Interceptor-Info: scan successful X-KSE-AntiSpam-Version: 5.1.9, Database issued on: 05.12.2013 15:52:07 X-KSE-AntiSpam-Status: KAS_STATUS_TRUSTED X-KSE-AntiSpam-Method: white email list X-KSE-AntiSpam-Rate: 0 X-KSE-AntiSpam-Info: Lua profiles 53812 [Dec 05 2013] X-KSE-AntiSpam-Info: Version: 5.1.9 X-KSE-AntiSpam-Info: Envelope from: schulz@macnetix.de X-KSE-AntiSpam-Info: {received from trusted sender : white list} X-KSE-AntiSpam-Info: Rate: 0 X-KSE-AntiSpam-Info: Status: trusted X-KSE-AntiSpam-Info: Method: white email list X-KSE-Antivirus-Interceptor-Info: scan successful X-KSE-Antivirus-Info: Clean Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP * Fix a couple of memcpy calls, and remove a bogus one * Properly use lengths of centre_frequency loop and subcell_info loop (they count bytes, not entries) Signed-off-by: Nikolaus Schulz --- lib/libdvbv5/descriptors/desc_t2_delivery.c | 35 ++++++++++++++------------- 1 files changed, 18 insertions(+), 17 deletions(-) diff --git a/lib/libdvbv5/descriptors/desc_t2_delivery.c b/lib/libdvbv5/descriptors/desc_t2_delivery.c index ab4361d..07a0956 100644 --- a/lib/libdvbv5/descriptors/desc_t2_delivery.c +++ b/lib/libdvbv5/descriptors/desc_t2_delivery.c @@ -32,6 +32,7 @@ void dvb_desc_t2_delivery_init(struct dvb_v5_fe_parms *parms, struct dvb_desc_t2_delivery *d = desc; unsigned char *p = (unsigned char *) buf; size_t desc_len = ext->length - 1, len, len2; + uint8_t nmemb; int i; len = offsetof(struct dvb_desc_t2_delivery, bitfield); @@ -42,7 +43,7 @@ void dvb_desc_t2_delivery_init(struct dvb_v5_fe_parms *parms, return; } if (desc_len < len2) { - memcpy(p, buf, len); + memcpy(d, p, len); bswap16(d->system_id); if (desc_len != len) @@ -50,44 +51,41 @@ void dvb_desc_t2_delivery_init(struct dvb_v5_fe_parms *parms, return; } - memcpy(p, buf, len2); + memcpy(d, p, len2); p += len2; - len = desc_len - (p - buf); - memcpy(&d->centre_frequency, p, len); - p += len; - if (d->tfs_flag) - d->frequency_loop_length = 1; + d->frequency_loop_length = sizeof(*d->centre_frequency); else { d->frequency_loop_length = *p; p++; } + nmemb = d->frequency_loop_length / sizeof(*d->centre_frequency); - d->centre_frequency = calloc(d->frequency_loop_length, - sizeof(*d->centre_frequency)); + d->centre_frequency = calloc(nmemb, sizeof(*d->centre_frequency)); if (!d->centre_frequency) { dvb_perror("Out of memory"); return; } - memcpy(d->centre_frequency, p, sizeof(*d->centre_frequency) * d->frequency_loop_length); - p += sizeof(*d->centre_frequency) * d->frequency_loop_length; + memcpy(d->centre_frequency, p, d->frequency_loop_length); + p += d->frequency_loop_length; - for (i = 0; i < d->frequency_loop_length; i++) + for (i = 0; i < nmemb; i++) bswap32(d->centre_frequency[i]); d->subcel_info_loop_length = *p; p++; + nmemb = d->subcel_info_loop_length / sizeof(*d->subcell); - d->subcell = calloc(d->subcel_info_loop_length, sizeof(*d->subcell)); + d->subcell = calloc(nmemb, sizeof(*d->subcell)); if (!d->subcell) { dvb_perror("Out of memory"); return; } - memcpy(d->subcell, p, sizeof(*d->subcell) * d->subcel_info_loop_length); + memcpy(d->subcell, p, d->subcel_info_loop_length); - for (i = 0; i < d->subcel_info_loop_length; i++) + for (i = 0; i < nmemb; i++) bswap16(d->subcell[i].transposer_frequency); } @@ -97,6 +95,7 @@ void dvb_desc_t2_delivery_print(struct dvb_v5_fe_parms *parms, { const struct dvb_desc_t2_delivery *d = desc; int i; + uint8_t nmemb; dvb_log("| DVB-T2 delivery"); dvb_log("| plp_id %d", d->plp_id); @@ -113,10 +112,12 @@ void dvb_desc_t2_delivery_print(struct dvb_v5_fe_parms *parms, dvb_log("| bandwidth %d", d->bandwidth); dvb_log("| SISO MISO %d", d->SISO_MISO); - for (i = 0; i < d->frequency_loop_length; i++) + nmemb = d->frequency_loop_length / sizeof(*d->centre_frequency); + for (i = 0; i < nmemb; i++) dvb_log("| centre frequency[%d] %d", i, d->centre_frequency[i]); - for (i = 0; i < d->subcel_info_loop_length; i++) { + nmemb = d->subcel_info_loop_length / sizeof(*d->subcell); + for (i = 0; i < nmemb; i++) { dvb_log("| cell_id_extension[%d] %d", i, d->subcell[i].cell_id_extension); dvb_log("| transposer frequency %d", d->subcell[i].transposer_frequency); }