aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--README.md37
-rw-r--r--configure.ac5
-rwxr-xr-xcontrib/jenkins.sh4
-rw-r--r--debian/changelog45
-rw-r--r--debian/compat2
-rw-r--r--debian/control10
-rw-r--r--include/asn1c/asn_internal.h26
-rw-r--r--src/INTEGER.c10
-rw-r--r--src/Makefile.am13
-rw-r--r--src/constr_CHOICE.c4
-rw-r--r--src/per_decoder.c2
12 files changed, 148 insertions, 11 deletions
diff --git a/.gitignore b/.gitignore
index 2852b4d..c7ac391 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,6 +8,7 @@ autom4te.cache
aclocal.m4
config.*
configure
+configure~
compile
depcomp
libtool
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..79d8491
--- /dev/null
+++ b/README.md
@@ -0,0 +1,37 @@
+libasn1c - shared library of asn1c runtime
+==========================================
+
+This repository contains a shared library built from the asn1c runtime files.
+
+Normally, the upstream asn1c copies an identical set of source code files into each and every project using
+asn1c. This becomes problematic if a single program uses multiple different ASN.1 specifications, where then
+those source files would clash.
+
+Let's instead move those runtime files into a shared library (*libasn1c*), which is then linked once by each program
+needing it, no matter how many asn1c-generated specifications/syntax it uses.
+
+**The version of the asn1c compiler must match the version of libasn1c**. We are using this shared library in
+combination with the [osmocom fork of asn1c](https://gitea.osmocom.org/osmocom/asn1c).
+
+
+GIT Repository
+--------------
+
+You can clone from the official libosmocore.git repository using
+
+ git clone https://gitea.osmocom.org/cellular-infrastructure/libasn1c
+
+There is a web interface at <https://gitea.osmocom.org/cellular-infrastructure/libasn1c>
+
+
+Mailing List
+------------
+
+Discussions related to libasn1c are happening on the
+openbsc@lists.osmocom.org mailing list, please see
+<https://lists.osmocom.org/mailman/listinfo/openbsc> for subscription
+options and the list archive.
+
+Please observe the [Osmocom Mailing List
+Rules](https://osmocom.org/projects/cellular-infrastructure/wiki/Mailing_List_Rules)
+when posting.
diff --git a/configure.ac b/configure.ac
index 8c93c3f..6ba1d37 100644
--- a/configure.ac
+++ b/configure.ac
@@ -20,6 +20,11 @@ AC_PROG_LIBTOOL
AC_CONFIG_MACRO_DIR([m4])
+dnl patching ${archive_cmds} to affect generation of file "libtool" to fix linking with clang
+AS_CASE(["$LD"],[*clang*],
+ [AS_CASE(["${host_os}"],
+ [*linux*],[archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'])])
+
PKG_CHECK_MODULES(LIBTALLOC, talloc)
AC_ARG_ENABLE(sanitize,
diff --git a/contrib/jenkins.sh b/contrib/jenkins.sh
index c23bdec..20314e5 100755
--- a/contrib/jenkins.sh
+++ b/contrib/jenkins.sh
@@ -15,8 +15,8 @@ set -x
autoreconf --install --force
./configure --enable-werror
$MAKE $PARALLEL_MAKE
-$MAKE distcheck \
+$MAKE $PARALLEL_MAKE distcheck \
|| cat-testlogs.sh
-$MAKE maintainer-clean
+$MAKE $PARALLEL_MAKE maintainer-clean
osmo-clean-workspace.sh
diff --git a/debian/changelog b/debian/changelog
index d6987b6..447d441 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,48 @@
+libasn1c (0.9.36) unstable; urgency=medium
+
+ [ Oliver Smith ]
+ * debian/control: replace, conflict: osmo-libasn1c
+ * INTEGER: ignore invalid -Warray-bounds from GCC-10
+ * debian: set compat level to 10
+ * INTEGER: ignore warning for all GCC versions
+
+ [ Vadim Yanitskiy ]
+ * src/Makefile.am: libraries shall not be in LDFLAGS but in LIBADD
+
+ [ Pau Espin Pedrol ]
+ * .gitignore: Add configure~
+ * Disable _ASN_STACK_OVERFLOW_CHECK if building with Asan enabled
+
+ -- Pau Espin Pedrol <pespin@sysmocom.de> Tue, 12 Sep 2023 12:34:28 +0200
+
+libasn1c (0.9.35) unstable; urgency=medium
+
+ [ Neels Hofmeyr ]
+ * fix 3 indents to avoid build failure with -Werror
+
+ -- Pau Espin Pedrol <pespin@sysmocom.de> Tue, 07 Feb 2023 14:09:40 +0100
+
+libasn1c (0.9.34) unstable; urgency=medium
+
+ [ Eric ]
+ * configure.ac: fix libtool issue with clang and sanitizer
+
+ -- Pau Espin Pedrol <pespin@sysmocom.de> Tue, 28 Jun 2022 16:03:31 +0200
+
+libasn1c (0.9.33) unstable; urgency=medium
+
+ [ Oliver Smith ]
+ * contrib: import RPM spec
+ * contrib: integrate RPM spec
+
+ [ Vadim Yanitskiy ]
+ * debian/control: change maintainer to the Osmocom team / mailing list
+
+ [ Pau Espin Pedrol ]
+ * contrib/jenkins: Enable parallel make in make distcheck
+
+ -- Pau Espin Pedrol <pespin@sysmocom.de> Tue, 23 Feb 2021 16:52:29 +0100
+
libasn1c (0.9.32) unstable; urgency=medium
[ Pau Espin Pedrol ]
diff --git a/debian/compat b/debian/compat
index ec63514..f599e28 100644
--- a/debian/compat
+++ b/debian/compat
@@ -1 +1 @@
-9
+10
diff --git a/debian/control b/debian/control
index 3b392be..49cac89 100644
--- a/debian/control
+++ b/debian/control
@@ -1,8 +1,10 @@
Source: libasn1c
+Conflicts: osmo-libasn1c
+Replaces: osmo-libasn1c
Section: libs
Priority: extra
Maintainer: Osmocom team <openbsc@lists.osmocom.org>
-Build-Depends: debhelper (>=9),
+Build-Depends: debhelper (>= 10),
dh-autoreconf,
libtalloc-dev
Standards-Version: 3.9.8
@@ -11,6 +13,8 @@ Vcs-Browser: http://git.osmocom.org/gitweb?p=libasn1c.git;a=summary
Homepage: https://projects.osmocom.org/projects/libasn1c
Package: libasn1c1
+Conflicts: osmo-libasn1c1
+Replaces: osmo-libasn1c1
Section: libs
Architecture: any
Multi-Arch: same
@@ -19,6 +23,8 @@ Depends: ${misc:Depends}, ${shlibs:Depends}
Description: asn1c runtime code as shared library
Package: libasn1c-dbg
+Conflicts: osmo-libasn1c-dbg
+Replaces: osmo-libasn1c-dbg
Section: debug
Architecture: any
Multi-Arch: same
@@ -26,6 +32,8 @@ Depends: libasn1c1 (= ${binary:Version}), ${misc:Depends}
Description: asn1c runtime code as shared library
Package: libasn1c-dev
+Conflicts: osmo-libasn1c-dev
+Replaces: osmo-libasn1c-dev
Section: libdevel
Architecture: any
Multi-Arch: same
diff --git a/include/asn1c/asn_internal.h b/include/asn1c/asn_internal.h
index 580c2e7..0af6bd9 100644
--- a/include/asn1c/asn_internal.h
+++ b/include/asn1c/asn_internal.h
@@ -108,9 +108,34 @@ static inline void ASN_DEBUG(const char *fmt, ...) { (void)fmt; }
/*
* Check stack against overflow, if limit is set.
*/
+
+/* Since GCC 13, AddressSanitizer started defaulting to
+* ASAN_OPTIONS="detect_stack_use_after_return=1", which makes this check
+* fail due to apparently jumping stack pointers.
+* Hence, disable this check if building with ASan, as documented in:
+* GCC: https://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html
+* Clang: https://clang.llvm.org/docs/AddressSanitizer.html#conditional-compilation-with-has-feature-address-sanitizer
+*/
+#if defined(__SANITIZE_ADDRESS__)
+ #define _ASN_SANITIZE_ENABLED 1
+#elif defined(__has_feature)
+#if __has_feature(address_sanitizer)
+ #define _ASN_SANITIZE_ENABLED 1
+#endif
+#endif
+
#define _ASN_DEFAULT_STACK_MAX (30000)
+
+#if defined(_ASN_SANITIZE_ENABLED)
static inline int
_ASN_STACK_OVERFLOW_CHECK(asn_codec_ctx_t *ctx) {
+ (void)ctx;
+ return 0;
+}
+#else
+static inline int
+_ASN_STACK_OVERFLOW_CHECK(asn_codec_ctx_t *ctx) {
+
if(ctx && ctx->max_stack_size) {
/* ctx MUST be allocated on the stack */
@@ -126,6 +151,7 @@ _ASN_STACK_OVERFLOW_CHECK(asn_codec_ctx_t *ctx) {
}
return 0;
}
+#endif
#ifdef __cplusplus
}
diff --git a/src/INTEGER.c b/src/INTEGER.c
index b3f0da1..1e62b2c 100644
--- a/src/INTEGER.c
+++ b/src/INTEGER.c
@@ -775,8 +775,8 @@ INTEGER_decode_aper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
? asn_ulong2INTEGER(st, value)
: asn_long2INTEGER(st, value))
_ASN_DECODE_FAILED;
- ASN_DEBUG("Got value %ld + low %lld",
- value, ct->lower_bound);
+ ASN_DEBUG("Got value %ld + low %lld",
+ value, ct->lower_bound);
}
return rval;
} else {
@@ -1336,9 +1336,12 @@ asn_int642INTEGER(INTEGER_t *st, int64_t value) {
}
break;
}
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Warray-bounds"
/* Copy the integer body */
for(pstart = p, bp = buf, pend1 += add; p != pend1; p += add)
*bp++ = *p;
+#pragma GCC diagnostic pop
if(st->buf) FREEMEM(st->buf);
st->buf = buf;
@@ -1391,9 +1394,12 @@ asn_long2INTEGER(INTEGER_t *st, long value) {
}
break;
}
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Warray-bounds"
/* Copy the integer body */
for(pstart = p, bp = buf, pend1 += add; p != pend1; p += add)
*bp++ = *p;
+#pragma GCC diagnostic pop
if(st->buf) FREEMEM(st->buf);
st->buf = buf;
diff --git a/src/Makefile.am b/src/Makefile.am
index 29b5e64..5e9a0d7 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,7 +1,7 @@
# This is _NOT_ the library release version, it's an API version.
# Please read Chapter 6 "Library interface versions" of the libtool
# documentation before making any modification
-LIBVERSION=1:1:0
+LIBVERSION=1:2:0
AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/include/asn1c
AM_CFLAGS = -fPIC -Wall $(LIBTALLOC_CFLAGS)
@@ -11,5 +11,14 @@ endif
lib_LTLIBRARIES = libasn1c.la
-libasn1c_la_LDFLAGS = $(LIBTALLOC_LIBS) -lm -version-info $(LIBVERSION) -no-undefined
+libasn1c_la_LIBADD = \
+ $(LIBTALLOC_LIBS) \
+ -lm \
+ $(NULL)
+
+libasn1c_la_LDFLAGS = \
+ -version-info $(LIBVERSION) \
+ -no-undefined \
+ $(NULL)
+
libasn1c_la_SOURCES = ANY.c constraints.c GeneralizedTime.c NumericString.c T61String.c asn_codecs_prim.c constr_CHOICE.c GeneralString.c ObjectDescriptor.c TeletexString.c asn_SEQUENCE_OF.c constr_SEQUENCE.c GraphicString.c OBJECT_IDENTIFIER.c UniversalString.c asn_SET_OF.c constr_SEQUENCE_OF.c IA5String.c OCTET_STRING.c UTCTime.c ber_decoder.c constr_SET.c INTEGER.c per_decoder.c UTF8String.c ber_tlv_length.c constr_SET_OF.c ISO646String.c per_encoder.c VideotexString.c ber_tlv_tag.c constr_TYPE.c NativeEnumerated.c per_support.c VisibleString.c BIT_STRING.c NativeInteger.c PrintableString.c xer_decoder.c BMPString.c der_encoder.c NativeReal.c REAL.c xer_encoder.c BOOLEAN.c ENUMERATED.c NULL.c RELATIVE-OID.c xer_support.c per_opentype.c asn1helpers.c
diff --git a/src/constr_CHOICE.c b/src/constr_CHOICE.c
index 18c24cd..df68feb 100644
--- a/src/constr_CHOICE.c
+++ b/src/constr_CHOICE.c
@@ -1134,8 +1134,8 @@ CHOICE_encode_aper(asn_TYPE_descriptor_t *td,
if(per_put_few_bits(po, present, ct->range_bits))
_ASN_ENCODE_FAILED;
- return elm->type->aper_encoder(elm->type, elm->per_constraints,
- memb_ptr, po);
+ return elm->type->aper_encoder(elm->type, elm->per_constraints,
+ memb_ptr, po);
} else {
asn_enc_rval_t rval;
if(specs->ext_start == -1)
diff --git a/src/per_decoder.c b/src/per_decoder.c
index 20fe1a1..b5056b5 100644
--- a/src/per_decoder.c
+++ b/src/per_decoder.c
@@ -160,7 +160,7 @@ aper_decode(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sp
*/
if(!td->aper_decoder)
_ASN_DECODE_FAILED; /* PER is not compiled in */
- rval = td->aper_decoder(opt_codec_ctx, td, 0, sptr, &pd);
+ rval = td->aper_decoder(opt_codec_ctx, td, 0, sptr, &pd);
if(rval.code == RC_OK) {
/* Return the number of consumed bits */
rval.consumed = ((pd.buffer - (const uint8_t *)buffer) << 3)