From e2eade145668de0e38a363a0dda91a11cb579807 Mon Sep 17 00:00:00 2001 From: Neal Probert Date: Wed, 17 Jul 2024 10:30:39 -0400 Subject: [PATCH] Fixed asn.1 uper option bits --- src/libasn1/asn1uper.h | 2 ++ src/libasn1/uper_get_ext.c | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/libasn1/asn1uper.h b/src/libasn1/asn1uper.h index e94f152..359b194 100644 --- a/src/libasn1/asn1uper.h +++ b/src/libasn1/asn1uper.h @@ -24,6 +24,8 @@ #define uper_get_bits_length(U,S) (uper_get_bits_stream(U,S)+1) #define uper_put_bits_length(U,L,S) uper_put_bits_stream(U,(L)-1,S) +#define uper_get_seq_length(U,S) (uper_get_bits_stream(U,S)+1) + #define uper_init_extension(E) asn1_init_extension(E) #define uper_init_bitstream(E) asn1_init_bitstream(E) diff --git a/src/libasn1/uper_get_ext.c b/src/libasn1/uper_get_ext.c index 789df92..54e273b 100644 --- a/src/libasn1/uper_get_ext.c +++ b/src/libasn1/uper_get_ext.c @@ -74,8 +74,8 @@ uint uper_get_extension(UPER_Stream *uper, UPER_Extension *ext, uint noptions, u // check for options if (noptions) { - ext->value = uper_get_bits_stream(uper, noptions); ext->options = noptions; + ext->value = uper_get_bits_stream(uper, noptions); } else ext->options = 0; @@ -120,7 +120,7 @@ uint uper_get_ext_optional(UPER_Extension *ext, uint bit) if (!ext || (bit>=ext->options)) return 0; - return (ext->value & 1<<(ext->options-bit)); + return (ext->value & 1<<(ext->options-bit-1)); } uint uper_get_ext_skip(UPER_Stream *uper, UPER_Extension *ext)