--- example.c.orig	2012-12-16 14:16:02.150623343 -0800
+++ example.c	2012-12-16 14:20:50.590549277 -0800
@@ -95,6 +95,8 @@
 	total=ASN1_object_size(1,i,V_ASN1_SEQUENCE);
 
 	data=malloc(total);
+        if (data == NULL)
+                return 0;   /* unable to allocate memory, leave */
 	p=data;
 	ASN1_put_object(&p,1,i,V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL);
 	i2d_ASN1_OCTET_STRING(os1,&p);
@@ -147,6 +149,8 @@
 		if (!asn1_const_Finish(&c)) goto err;
 		*str1=malloc(os1->length+1);
 		*str2=malloc(os2->length+1);
+                if ((*str1 == NULL) || (*str2 == NULL))
+                        goto err;   /* unable to allocate memory, error */
 		memcpy(*str1,os1->data,os1->length);
 		memcpy(*str2,os2->data,os2->length);
 		(*str1)[os1->length]='\0';
@@ -259,6 +263,8 @@
 	total=ASN1_object_size(1,i,V_ASN1_SEQUENCE);
 
 	data=malloc(total);
+        if (data == NULL)
+                return 0;   /* unable to allocate memory */
 	p=data;
 	ASN1_put_object(&p,1,i,V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL);
 	i2d_ASN1_OCTET_STRING(os1,&p);
@@ -314,6 +320,8 @@
 		if (!asn1_const_Finish(&c)) goto err;
 		*str1=malloc(os1->length+1);
 		*str2=malloc(os2->length+1);
+                if ((*str1 == NULL) || (*str2 == NULL))
+                        goto err; /* unable to allocate memory, error   */
 		memcpy(*str1,os1->data,os1->length);
 		memcpy(*str2,os2->data,os2->length);
 		(*str1)[os1->length]='\0';
