Use of -Werror (Was: Re: Nasty typecasting / alignment issues in libdvbpsi)

Martin Jackson <[email protected]>
Newsgroups gmane.comp.video.videolan.libdvbpsi.devel
Message-ID <CABMKUD-jYXg2Nqet4n1_qmFHkVSoD-8mYO3yX_TtSynTzD46uA@mail.gmail.com>
Dear Jean-Paul,

On Tue, Oct 16, 2012 at 11:03 AM, Jean-Paul Saman <[email protected]> wrote:
> On Mon, Oct 15, 2012 at 12:30 PM, Martin Jackson
> <[email protected]> wrote:
>
>> the libdvbpsi library appears not to compile without -Werror either
>> for my mips toolchain or the regular centOS x86_64 toolchain, though I
>> didn't have time to investigate.
>
> -Werror is forced in configure.ac
>

It seems that there was a bug introduced in renaming message ->
dvbpsi_message in dvbpsi_private.h. This is masked (in my environment
at least) by the configure script concluding that variadic macros are
not supported (i.e. ac_cv_cpp_variadic_macros=no) if -Werror is
included in the C flags, as the fragment in configure.ac used to
determine this generates a warning and thus failure. I'm not sure how
configure.ac should be fixed, as it's a combination of autoconf and
the C flags used in libdvbpsi. However, the following patch should be
applied to dvbpsi_private.h:

diff --git a/src/dvbpsi_private.h b/src/dvbpsi_private.h
index 800f712..b7d7bfd 100644
--- a/src/dvbpsi_private.h
+++ b/src/dvbpsi_private.h
@@ -45,11 +45,11 @@ extern uint32_t dvbpsi_crc32_table[];
 void dvbpsi_message(dvbpsi_t *dvbpsi, const int level, const char *fmt, ...);

 #  define dvbpsi_error(hnd, src, str, x...)                             \
-        message(hnd, DVBPSI_MSG_ERROR, "libdvbpsi error ("src"): " str, ##x)
+        dvbpsi_message(hnd, DVBPSI_MSG_ERROR, "libdvbpsi error (%s):
" str, src, ##x)
 #  define dvbpsi_warning(hnd, src, str, x...)                                \
-        message(hnd, DVBPSI_MSG_WARNING, "libdvbpsi warning ("src"):
" str, ##x)
+        dvbpsi_message(hnd, DVBPSI_MSG_WARNING, "libdvbpsi warning
(%s): " str, src, ##x)
 #  define dvbpsi_debug(hnd, src, str, x...)                                  \
-        message(hnd, DVBPSI_MSG_DEBUG, "libdvbpsi debug ("src"): " str, ##x)
+        dvbpsi_message(hnd, DVBPSI_MSG_DEBUG, "libdvbpsi debug (%s):
" str, src, ##x)
 #else
 void dvbpsi_error(dvbpsi_t *dvbpsi, const char *src, const char *fmt, ...);
 void dvbpsi_warning(dvbpsi_t *dvbpsi, const char *src, const char *fmt, ...);



In addition, my compiler complains about some non-sensical byte
overflow checks, which break my build (with -Werror enabled):


diff --git a/src/descriptors/dr_40.c b/src/descriptors/dr_40.c
index 7648339..d6cb9d1 100644
--- a/src/descriptors/dr_40.c
+++ b/src/descriptors/dr_40.c
@@ -61,8 +61,7 @@ dvbpsi_network_name_dr_t* dvbpsi_DecodeNetworkNameDr(
         return NULL;

     /* Decode data */
-    p_decoded->i_name_length = p_descriptor->i_length <= 255 ?
-                               p_descriptor->i_length : 255;
+    p_decoded->i_name_length = p_descriptor->i_length;
     if (p_decoded->i_name_length)
         memcpy(p_decoded->i_name_byte,
                p_descriptor->p_data,
diff --git a/src/descriptors/dr_73.c b/src/descriptors/dr_73.c
index 1e2299f..38bdd28 100644
--- a/src/descriptors/dr_73.c
+++ b/src/descriptors/dr_73.c
@@ -58,9 +58,6 @@ dvbpsi_default_authority_dr_t
*dvbpsi_DecodeDefaultAuthorityDr(dvbpsi_descriptor
     if (!p_decoded)
         return NULL;

-    if (p_descriptor->i_length > 255)
-        p_descriptor->i_length = 255;
-
     memcpy(&p_decoded->authority, p_descriptor->p_data,
p_descriptor->i_length);
     p_decoded->authority[p_descriptor->i_length] = 0;

diff --git a/src/dvbpsi.c b/src/dvbpsi.c
index f4fd5d8..ffbfaca 100644
--- a/src/dvbpsi.c
+++ b/src/dvbpsi.c
@@ -216,7 +216,6 @@ void dvbpsi_decoder_reset(dvbpsi_decoder_t*
p_decoder, const bool b_force)
 bool dvbpsi_decoder_psi_sections_completed(dvbpsi_decoder_t* p_decoder)
 {
     assert(p_decoder);
-    assert(p_decoder->i_last_section_number <= 255);

     bool b_complete = false;



Best regards,

Martin Jackson
_______________________________________________
libdvbpsi-devel mailing list
[email protected]
http://mailman.videolan.org/listinfo/libdvbpsi-devel
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.