s=(unsigned char *)Malloc((int)len);
s=(unsigned char *)Malloc((int)len + 1);
ASN1_STRING *d2i_ASN1_bytes(ASN1_STRING **a, unsigned char **pp, long length,	     int Ptag, int Pclass)	{	ASN1_STRING *ret=NULL;	unsigned char *p,*s;	long len;	int inf,tag,xclass;	int i=0;	if ((a == NULL) || ((*a) == NULL))		{		if ((ret=ASN1_STRING_new()) == NULL) return(NULL);		}	else		ret=(*a);	p= *pp;	inf=ASN1_get_object(&p,&len,&tag,&xclass,length);	if (inf & 0x80)		{		i=ASN1_R_BAD_OBJECT_HEADER;		goto err;		}	if (tag != Ptag)		{		i=ASN1_R_WRONG_TAG;		goto err;		}	if (inf & V_ASN1_CONSTRUCTED)		{		ASN1_CTX c;		c.pp=pp;		c.p=p;		c.inf=inf;		c.slen=len;		c.tag=Ptag;		c.xclass=Pclass;		c.max=(length == 0)?0:(p+length);		if (!asn1_collate_primative(ret,&c)) 			goto err; 		else			{			p=c.p;			}		}	else		{		if (len != 0)			{			if ((ret->length < len) || (ret->data == NULL))				{				if (ret->data != NULL) Free((char *)ret->data);				s=(unsigned char *)Malloc((int)len);				if (s == NULL)					{					i=ERR_R_MALLOC_FAILURE;					goto err;					}				}			else				s=ret->data;			memcpy(s,p,(int)len);			p+=len;			}		else			{			s=NULL;			if (ret->data != NULL) Free((char *)ret->data);			}		ret->length=(int)len;		ret->data=s;		ret->type=Ptag;		}	if (a != NULL) (*a)=ret;	*pp=p;	return(ret);err:	if ((ret != NULL) && ((a == NULL) || (*a != ret)))		ASN1_STRING_free(ret);	ASN1err(ASN1_F_D2I_ASN1_BYTES,i);	return(NULL);	}