From 136abf55b71b6607672da96b928a6fb237c3cf7e Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Sat, 30 May 2020 18:07:43 -0400 Subject: [PATCH] asn1: code generators that left bit shift .gt. 31 must use 1ULL The code generators were shifting "1LU" by (<< 32) and (<< 63) which are undefined operations for a 32-bit integer. To ensure the integer is 64-bit use "1ULL". Change-Id: I062cae5638139a9fe51563f64b1964f87e2f49e3 --- lib/asn1/gen.c | 2 +- lib/asn1/gen_decode.c | 4 ++-- lib/asn1/gen_glue.c | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/asn1/gen.c b/lib/asn1/gen.c index 4c63f00f3..38bf9aad5 100644 --- a/lib/asn1/gen.c +++ b/lib/asn1/gen.c @@ -806,7 +806,7 @@ define_type (int level, const char *name, const char *basename, Type *t, int typ if (max_memno > 63) range.max = INT64_MAX; else - range.max = 1LU << max_memno; + range.max = 1ULL << max_memno; i.type = TInteger; i.range = ⦥ diff --git a/lib/asn1/gen_decode.c b/lib/asn1/gen_decode.c index c213c6cbe..9a2ec1b68 100644 --- a/lib/asn1/gen_decode.c +++ b/lib/asn1/gen_decode.c @@ -384,7 +384,7 @@ decode_type(const char *name, const Type *t, int optional, struct value *defval, decode_type (s, m->type, 0, NULL, forwstr, m->gen_name, NULL, depth + 1); free (s); - fprintf(codefile, "members |= (1LU << %u);\n", memno); + fprintf(codefile, "members |= (1ULL << %u);\n", memno); memno++; fprintf(codefile, "break;\n"); } @@ -400,7 +400,7 @@ decode_type(const char *name, const Type *t, int optional, struct value *defval, if (asprintf (&s, "%s->%s", name, m->gen_name) < 0 || s == NULL) errx(1, "malloc"); - fprintf(codefile, "if((members & (1LU << %u)) == 0)\n", memno); + fprintf(codefile, "if((members & (1ULL << %u)) == 0)\n", memno); if(m->optional) fprintf(codefile, "%s = NULL;\n", s); else if(m->defval) diff --git a/lib/asn1/gen_glue.c b/lib/asn1/gen_glue.c index 597ad56bf..c17ac206e 100644 --- a/lib/asn1/gen_glue.c +++ b/lib/asn1/gen_glue.c @@ -53,7 +53,7 @@ generate_2int (const Type *t, const char *gen_name) gen_name, gen_name); HEIM_TAILQ_FOREACH(m, t->members, members) { - fprintf (codefile, "if(f.%s) r |= (1LU << %d);\n", + fprintf (codefile, "if(f.%s) r |= (1ULL << %d);\n", m->gen_name, m->val); } fprintf (codefile, "return r;\n" @@ -114,7 +114,7 @@ generate_units (const Type *t, const char *gen_name) if(t->members) { HEIM_TAILQ_FOREACH_REVERSE(m, t->members, memhead, members) { fprintf (codefile, - "\t{\"%s\",\t1LU << %d},\n", m->name, m->val); + "\t{\"%s\",\t1ULL << %d},\n", m->name, m->val); } }