diff --git a/skeletons/OBJECT_IDENTIFIER.c b/skeletons/OBJECT_IDENTIFIER.c
index 1e4fe5947ff856a67e32813bbb9da11fa06198ba..0f71307153adc1d633ba5def16b4b725bd15b6fb 100644
--- a/skeletons/OBJECT_IDENTIFIER.c
+++ b/skeletons/OBJECT_IDENTIFIER.c
@@ -367,6 +367,7 @@ OBJECT_IDENTIFIER_set_single_arc(uint8_t *arcbuf, void *arcval, unsigned int arc
 	uint8_t buffer[arcval_size];
 #else
 	uint8_t *buffer = alloca(arcval_size);
+	if(!buffer) { errno = ENOMEM; return -1; }
 #endif
 
 	if(isLittleEndian && !prepared_order) {
diff --git a/skeletons/constr_SET.c b/skeletons/constr_SET.c
index 2fd0ac9befe423573e231d7686aa33e085fad08d..dc699f5bd97b311654e2bbf0cfd65bdffd2280db 100644
--- a/skeletons/constr_SET.c
+++ b/skeletons/constr_SET.c
@@ -447,6 +447,12 @@ SET_encode_der(asn1_TYPE_descriptor_t *sd,
 	if(t2m_build_own) {
 		t2m = alloca(specs->elements_count * sizeof(t2m[0]));
 		t2m_count = 0;
+		if(!t2m) {	/* There are such platforms */
+			my_erval.encoded = -1;
+			my_erval.failed_type = sd;
+			my_erval.structure_ptr = ptr;
+			return my_erval;
+		}
 	} else {
 		/*
 		 * There is no untagged CHOICE in this SET.
diff --git a/skeletons/constraints.c b/skeletons/constraints.c
index cf31706134190d098587361a4fd40243a847a1d4..5f01cc73e725a9eda3a2ccf625e9c2db7f9db085 100644
--- a/skeletons/constraints.c
+++ b/skeletons/constraints.c
@@ -108,7 +108,7 @@ _asn_i_log_error(asn_app_consume_bytes_f *cb, void *key, const char *fmt, ...) {
 	 */
 	len = ret + 1;
 	p = alloca(len);
-	if(!p) return;	/* Can't be though. */
+	if(!p) return;	/* Can fail on !x86. */
 
 	
 	va_start(ap, fmt);
diff --git a/skeletons/der_encoder.c b/skeletons/der_encoder.c
index 919350c5e94b96d7899c73e7b7434aaa5b2e54d3..dc547a2cbcff895973ef99e8a474e4e5b3b29b44 100644
--- a/skeletons/der_encoder.c
+++ b/skeletons/der_encoder.c
@@ -60,7 +60,10 @@ der_write_tags(asn1_TYPE_descriptor_t *sd,
 		 */
 		int stag_offset;
 		tags = alloca((sd->tags_count + 1) * sizeof(ber_tlv_tag_t));
-		if(tags == NULL) return -1;	/* Impossible on i386 */
+		if(!tags) {	/* Can fail on !x86 */
+			errno = ENOMEM;
+			return -1;
+		}
 		tags_count = sd->tags_count
 			+ 1	/* EXPLICIT or IMPLICIT tag is given */
 			- ((tag_mode==-1)?sd->tags_impl_skip:0);
@@ -79,7 +82,10 @@ der_write_tags(asn1_TYPE_descriptor_t *sd,
 		return 0;
 
 	lens = alloca(tags_count * sizeof(lens[0]));
-	if(lens == NULL) return -1;
+	if(!lens) {
+		errno = ENOMEM;
+		return -1;
+	}
 
 	/*
 	 * Array of tags is initialized.