asn1: Fix a compiler warning with GCC 9.1
authorTobias Brunner <tobias@strongswan.org>
Thu, 22 Aug 2019 14:27:19 +0000 (16:27 +0200)
committerTobias Brunner <tobias@strongswan.org>
Fri, 23 Aug 2019 07:06:34 +0000 (09:06 +0200)
Compiling with GCC 9.1, as e.g. happens on AppVeyor, results in the
following warning:

asn1/asn1.c: In function 'asn1_integer':
asn1/asn1.c:871:24: error: '<Ucb40>' may be used uninitialized in this function [-Werror=maybe-uninitialized]
  871 |  len = content.len + ((*content.ptr & 0x80) ? 1 : 0);
      |                        ^~~~~~~~~~~~

Some experiments showed that the problem was the chunk_from_chars()
assignment.  This might be because the temporary chunk_t that was assigned
to the variable was defined in a sub-block, so it might actually be
undefined later when *content.ptr is read.

src/libstrongswan/asn1/asn1.c

index aa649e9..f75e942 100644 (file)
@@ -851,15 +851,14 @@ chunk_t asn1_bitstring(const char *mode, chunk_t content)
  */
 chunk_t asn1_integer(const char *mode, chunk_t content)
 {
-       chunk_t object;
+       chunk_t zero = chunk_from_chars(0x00), object;
        size_t len;
        u_char *pos;
        bool move;
 
-
        if (content.len == 0)
        {       /* make sure 0 is encoded properly */
-               content = chunk_from_chars(0x00);
+               content = zero;
                move = FALSE;
        }
        else