apps/ca.c:2242: error: BUFFER_OVERRUN_L3
  Offset: [-529, +oo] Size: 12 by call to `X509_print_ex`.
Showing all 13 steps of the trace


apps/ca.c:2224:7: Call
2222.   	/* Copy extensions from request (if any) */
2223.   
2224.   	if (!copy_extensions(ret, req, ext_copy))
              ^
2225.   		{
2226.   		BIO_printf(bio_err, "ERROR: adding extensions from request\n");

apps/apps.c:1065:1: Parameter `**x->cert_info->extensions->data`
  1063.   }
  1064.   
  1065. > int copy_extensions(X509 *x, X509_REQ *req, int copy_type)
  1066.   {
  1067.   	STACK_OF(X509_EXTENSION) *exts = NULL;

apps/ca.c:2242:3: Call
2240.   		/* Never print signature details because signature not present */
2241.   		certopt |= X509_FLAG_NO_SIGDUMP | X509_FLAG_NO_SIGNAME;
2242.   		X509_print_ex(bio_err, ret, nameopt, certopt); 
          ^
2243.   		}
2244.   

crypto/asn1/t_x509.c:101:1: Parameter `*x->cert_info->validity->notBefore->data`
  99.   }
  100.   
  101. > int X509_print_ex(BIO *bp, X509 *x, unsigned long nmflags, unsigned long cflag)
  102.   	{
  103.   	long l;

crypto/asn1/t_x509.c:186:8: Call
  184.   		if (BIO_write(bp,"        Validity\n",17) <= 0) goto err;
  185.   		if (BIO_write(bp,"            Not Before: ",24) <= 0) goto err;
  186.   		if (!ASN1_TIME_print(bp,X509_get_notBefore(x))) goto err;
                ^
  187.   		if (BIO_write(bp,"\n            Not After : ",25) <= 0) goto err;
  188.   		if (!ASN1_TIME_print(bp,X509_get_notAfter(x))) goto err;

crypto/asn1/t_x509.c:350:1: Parameter `*tm->data`
    348.   	}
    349.   
    350. > int ASN1_TIME_print(BIO *bp, ASN1_TIME *tm)
    351.   {
    352.   	if(tm->type == V_ASN1_UTCTIME) return ASN1_UTCTIME_print(bp, tm);

crypto/asn1/t_x509.c:354:12: Call
    352.   	if(tm->type == V_ASN1_UTCTIME) return ASN1_UTCTIME_print(bp, tm);
    353.   	if(tm->type == V_ASN1_GENERALIZEDTIME)
    354.   				return ASN1_GENERALIZEDTIME_print(bp, tm);
                      ^
    355.   	BIO_write(bp,"Bad time value",14);
    356.   	return(0);

crypto/asn1/t_x509.c:365:1: <Offset trace>
363.       };
364.   
365. > int ASN1_GENERALIZEDTIME_print(BIO *bp, ASN1_GENERALIZEDTIME *tm)
366.   	{
367.   	char *v;

crypto/asn1/t_x509.c:365:1: Parameter `*tm->data`
      363.       };
      364.   
      365. > int ASN1_GENERALIZEDTIME_print(BIO *bp, ASN1_GENERALIZEDTIME *tm)
      366.   	{
      367.   	char *v;

crypto/asn1/t_x509.c:380:2: Assignment
      378.   		if ((v[i] > '9') || (v[i] < '0')) goto err;
      379.   	y= (v[0]-'0')*1000+(v[1]-'0')*100 + (v[2]-'0')*10+(v[3]-'0');
      380.   	M= (v[4]-'0')*10+(v[5]-'0');
              ^
      381.   	if ((M > 12) || (M < 1)) goto err;
      382.   	d= (v[6]-'0')*10+(v[7]-'0');

crypto/asn1/t_x509.c:359:1: <Length trace>
357.   }
358.   
359. > static const char *mon[12]=
360.       {
361.       "Jan","Feb","Mar","Apr","May","Jun",

crypto/asn1/t_x509.c:359:1: Array declaration
      357.   }
      358.   
      359. > static const char *mon[12]=
      360.       {
      361.       "Jan","Feb","Mar","Apr","May","Jun",

crypto/asn1/t_x509.c:390:3: Array access: Offset: [-529, +oo] Size: 12 by call to `X509_print_ex` 
      388.   
      389.   	if (BIO_printf(bp,"%s %2d %02d:%02d:%02d %d%s",
      390.   		mon[M-1],d,h,m,s,y,(gmt)?" GMT":"") <= 0)
               ^
      391.   		return(0);
      392.   	else

int ASN1_GENERALIZEDTIME_print(BIO *bp, ASN1_GENERALIZEDTIME *tm)
	{
	char *v;
	int gmt=0;
	int i;
	int y=0,M=0,d=0,h=0,m=0,s=0;
	i=tm->length;
	v=(char *)tm->data;
	if (i < 12) goto err;
	if (v[i-1] == 'Z') gmt=1;
	for (i=0; i<12; i++)
		if ((v[i] > '9') || (v[i] < '0')) goto err;
	y= (v[0]-'0')*1000+(v[1]-'0')*100 + (v[2]-'0')*10+(v[3]-'0');
	M= (v[4]-'0')*10+(v[5]-'0');
	if ((M > 12) || (M < 1)) goto err;
	d= (v[6]-'0')*10+(v[7]-'0');
	h= (v[8]-'0')*10+(v[9]-'0');
	m=  (v[10]-'0')*10+(v[11]-'0');
	if (	(v[12] >= '0') && (v[12] <= '9') &&
		(v[13] >= '0') && (v[13] <= '9'))
		s=  (v[12]-'0')*10+(v[13]-'0');
	if (BIO_printf(bp,"%s %2d %02d:%02d:%02d %d%s",
		mon[M-1],d,h,m,s,y,(gmt)?" GMT":"") <= 0)
		return(0);
	else
		return(1);
err:
	BIO_write(bp,"Bad time value",14);
	return(0);
	}
['static int do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, const EVP_MD *dgst,\n\t     STACK_OF(CONF_VALUE) *policy, TXT_DB *db, BIGNUM *serial, char *subj,\n\t     int email_dn, char *startdate, char *enddate, long days, int batch,\n\t     int verbose, X509_REQ *req, char *ext_sect, CONF *lconf,\n\t     unsigned long certopt, unsigned long nameopt, int default_op,\n\t     int ext_copy)\n\t{\n\tX509_NAME *name=NULL,*CAname=NULL,*subject=NULL, *dn_subject=NULL;\n\tASN1_UTCTIME *tm,*tmptm;\n\tASN1_STRING *str,*str2;\n\tASN1_OBJECT *obj;\n\tX509 *ret=NULL;\n\tX509_CINF *ci;\n\tX509_NAME_ENTRY *ne;\n\tX509_NAME_ENTRY *tne,*push;\n\tEVP_PKEY *pktmp;\n\tint ok= -1,i,j,last,nid;\n\tchar *p;\n\tCONF_VALUE *cv;\n\tchar *row[DB_NUMBER],**rrow,**irow=NULL;\n\tchar buf[25];\n\ttmptm=ASN1_UTCTIME_new();\n\tif (tmptm == NULL)\n\t\t{\n\t\tBIO_printf(bio_err,"malloc error\\n");\n\t\treturn(0);\n\t\t}\n\tfor (i=0; i<DB_NUMBER; i++)\n\t\trow[i]=NULL;\n\tif (subj)\n\t\t{\n\t\tX509_NAME *n = do_subject(subj, email_dn);\n\t\tif (!n)\n\t\t\t{\n\t\t\tERR_print_errors(bio_err);\n\t\t\tgoto err;\n\t\t\t}\n\t\tX509_REQ_set_subject_name(req,n);\n\t\treq->req_info->enc.modified = 1;\n\t\tX509_NAME_free(n);\n\t\t}\n\tif (default_op)\n\t\tBIO_printf(bio_err,"The Subject\'s Distinguished Name is as follows\\n");\n\tname=X509_REQ_get_subject_name(req);\n\tfor (i=0; i<X509_NAME_entry_count(name); i++)\n\t\t{\n\t\tne= X509_NAME_get_entry(name,i);\n\t\tstr=X509_NAME_ENTRY_get_data(ne);\n\t\tobj=X509_NAME_ENTRY_get_object(ne);\n\t\tif (msie_hack)\n\t\t\t{\n\t\t\tnid=OBJ_obj2nid(ne->object);\n\t\t\tif (str->type == V_ASN1_UNIVERSALSTRING)\n\t\t\t\tASN1_UNIVERSALSTRING_to_string(str);\n\t\t\tif ((str->type == V_ASN1_IA5STRING) &&\n\t\t\t\t(nid != NID_pkcs9_emailAddress))\n\t\t\t\tstr->type=V_ASN1_T61STRING;\n\t\t\tif ((nid == NID_pkcs9_emailAddress) &&\n\t\t\t\t(str->type == V_ASN1_PRINTABLESTRING))\n\t\t\t\tstr->type=V_ASN1_IA5STRING;\n\t\t\t}\n\t\tif ((OBJ_obj2nid(obj) == NID_pkcs9_emailAddress) && (!email_dn))\n\t\t\tcontinue;\n\t\tif ((OBJ_obj2nid(obj) == NID_pkcs9_emailAddress) &&\n\t\t\t(str->type != V_ASN1_IA5STRING))\n\t\t\t{\n\t\t\tBIO_printf(bio_err,"\\nemailAddress type needs to be of type IA5STRING\\n");\n\t\t\tgoto err;\n\t\t\t}\n\t\tj=ASN1_PRINTABLE_type(str->data,str->length);\n\t\tif (\t((j == V_ASN1_T61STRING) &&\n\t\t\t (str->type != V_ASN1_T61STRING)) ||\n\t\t\t((j == V_ASN1_IA5STRING) &&\n\t\t\t (str->type == V_ASN1_PRINTABLESTRING)))\n\t\t\t{\n\t\t\tBIO_printf(bio_err,"\\nThe string contains characters that are illegal for the ASN.1 type\\n");\n\t\t\tgoto err;\n\t\t\t}\n\t\tif (default_op)\n\t\t\told_entry_print(bio_err, obj, str);\n\t\t}\n\tif ((subject=X509_NAME_new()) == NULL)\n\t\t{\n\t\tBIO_printf(bio_err,"Memory allocation failure\\n");\n\t\tgoto err;\n\t\t}\n\tCAname=X509_NAME_dup(x509->cert_info->subject);\n\tif (CAname == NULL) goto err;\n\tstr=str2=NULL;\n\tfor (i=0; i<sk_CONF_VALUE_num(policy); i++)\n\t\t{\n\t\tcv=sk_CONF_VALUE_value(policy,i);\n\t\tif ((j=OBJ_txt2nid(cv->name)) == NID_undef)\n\t\t\t{\n\t\t\tBIO_printf(bio_err,"%s:unknown object type in \'policy\' configuration\\n",cv->name);\n\t\t\tgoto err;\n\t\t\t}\n\t\tobj=OBJ_nid2obj(j);\n\t\tlast= -1;\n\t\tfor (;;)\n\t\t\t{\n\t\t\tj=X509_NAME_get_index_by_OBJ(name,obj,last);\n\t\t\tif (j < 0)\n\t\t\t\t{\n\t\t\t\tif (last != -1) break;\n\t\t\t\ttne=NULL;\n\t\t\t\t}\n\t\t\telse\n\t\t\t\t{\n\t\t\t\ttne=X509_NAME_get_entry(name,j);\n\t\t\t\t}\n\t\t\tlast=j;\n\t\t\tpush=NULL;\n\t\t\tif (strcmp(cv->value,"optional") == 0)\n\t\t\t\t{\n\t\t\t\tif (tne != NULL)\n\t\t\t\t\tpush=tne;\n\t\t\t\t}\n\t\t\telse if (strcmp(cv->value,"supplied") == 0)\n\t\t\t\t{\n\t\t\t\tif (tne == NULL)\n\t\t\t\t\t{\n\t\t\t\t\tBIO_printf(bio_err,"The %s field needed to be supplied and was missing\\n",cv->name);\n\t\t\t\t\tgoto err;\n\t\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tpush=tne;\n\t\t\t\t}\n\t\t\telse if (strcmp(cv->value,"match") == 0)\n\t\t\t\t{\n\t\t\t\tint last2;\n\t\t\t\tif (tne == NULL)\n\t\t\t\t\t{\n\t\t\t\t\tBIO_printf(bio_err,"The mandatory %s field was missing\\n",cv->name);\n\t\t\t\t\tgoto err;\n\t\t\t\t\t}\n\t\t\t\tlast2= -1;\nagain2:\n\t\t\t\tj=X509_NAME_get_index_by_OBJ(CAname,obj,last2);\n\t\t\t\tif ((j < 0) && (last2 == -1))\n\t\t\t\t\t{\n\t\t\t\t\tBIO_printf(bio_err,"The %s field does not exist in the CA certificate,\\nthe \'policy\' is misconfigured\\n",cv->name);\n\t\t\t\t\tgoto err;\n\t\t\t\t\t}\n\t\t\t\tif (j >= 0)\n\t\t\t\t\t{\n\t\t\t\t\tpush=X509_NAME_get_entry(CAname,j);\n\t\t\t\t\tstr=X509_NAME_ENTRY_get_data(tne);\n\t\t\t\t\tstr2=X509_NAME_ENTRY_get_data(push);\n\t\t\t\t\tlast2=j;\n\t\t\t\t\tif (ASN1_STRING_cmp(str,str2) != 0)\n\t\t\t\t\t\tgoto again2;\n\t\t\t\t\t}\n\t\t\t\tif (j < 0)\n\t\t\t\t\t{\n\t\t\t\t\tBIO_printf(bio_err,"The %s field needed to be the same in the\\nCA certificate (%s) and the request (%s)\\n",cv->name,((str2 == NULL)?"NULL":(char *)str2->data),((str == NULL)?"NULL":(char *)str->data));\n\t\t\t\t\tgoto err;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\telse\n\t\t\t\t{\n\t\t\t\tBIO_printf(bio_err,"%s:invalid type in \'policy\' configuration\\n",cv->value);\n\t\t\t\tgoto err;\n\t\t\t\t}\n\t\t\tif (push != NULL)\n\t\t\t\t{\n\t\t\t\tif (!X509_NAME_add_entry(subject,push, -1, 0))\n\t\t\t\t\t{\n\t\t\t\t\tif (push != NULL)\n\t\t\t\t\t\tX509_NAME_ENTRY_free(push);\n\t\t\t\t\tBIO_printf(bio_err,"Memory allocation failure\\n");\n\t\t\t\t\tgoto err;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tif (j < 0) break;\n\t\t\t}\n\t\t}\n\tif (preserve)\n\t\t{\n\t\tX509_NAME_free(subject);\n\t\tsubject=X509_NAME_dup(name);\n\t\tif (subject == NULL) goto err;\n\t\t}\n\tif (verbose)\n\t\tBIO_printf(bio_err,"The subject name appears to be ok, checking data base for clashes\\n");\n\tif (!email_dn)\n\t\t{\n\t\tif ((dn_subject=X509_NAME_new()) == NULL)\n\t\t\t{\n\t\t\tBIO_printf(bio_err,"Memory allocation failure\\n");\n\t\t\tgoto err;\n\t\t\t}\n\t\tfor (i=0; i<X509_NAME_entry_count(subject); i++)\n\t\t\t{\n\t\t\tne= X509_NAME_get_entry(subject,i);\n\t\t\tobj=X509_NAME_ENTRY_get_object(ne);\n\t\t\tnid=OBJ_obj2nid(obj);\n\t\t\tstr=X509_NAME_ENTRY_get_data(ne);\n\t\t\tif (nid == NID_pkcs9_emailAddress) continue;\n\t\t\tif (!X509_NAME_add_entry(dn_subject,ne, -1, 0))\n\t\t\t\t{\n\t\t\t\tBIO_printf(bio_err,"Memory allocation failure\\n");\n\t\t\t\tgoto err;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\trow[DB_name]=X509_NAME_oneline(dn_subject,NULL,0);\n\trow[DB_serial]=BN_bn2hex(serial);\n\tif ((row[DB_name] == NULL) || (row[DB_serial] == NULL))\n\t\t{\n\t\tBIO_printf(bio_err,"Memory allocation failure\\n");\n\t\tgoto err;\n\t\t}\n\trrow=TXT_DB_get_by_index(db,DB_name,row);\n\tif (rrow != NULL)\n\t\t{\n\t\tBIO_printf(bio_err,"ERROR:There is already a certificate for %s\\n",\n\t\t\trow[DB_name]);\n\t\t}\n\telse\n\t\t{\n\t\trrow=TXT_DB_get_by_index(db,DB_serial,row);\n\t\tif (rrow != NULL)\n\t\t\t{\n\t\t\tBIO_printf(bio_err,"ERROR:Serial number %s has already been issued,\\n",\n\t\t\t\trow[DB_serial]);\n\t\t\tBIO_printf(bio_err,"      check the database/serial_file for corruption\\n");\n\t\t\t}\n\t\t}\n\tif (rrow != NULL)\n\t\t{\n\t\tBIO_printf(bio_err,\n\t\t\t"The matching entry has the following details\\n");\n\t\tif (rrow[DB_type][0] == \'E\')\n\t\t\tp="Expired";\n\t\telse if (rrow[DB_type][0] == \'R\')\n\t\t\tp="Revoked";\n\t\telse if (rrow[DB_type][0] == \'V\')\n\t\t\tp="Valid";\n\t\telse\n\t\t\tp="\\ninvalid type, Data base error\\n";\n\t\tBIO_printf(bio_err,"Type\t  :%s\\n",p);;\n\t\tif (rrow[DB_type][0] == \'R\')\n\t\t\t{\n\t\t\tp=rrow[DB_exp_date]; if (p == NULL) p="undef";\n\t\t\tBIO_printf(bio_err,"Was revoked on:%s\\n",p);\n\t\t\t}\n\t\tp=rrow[DB_exp_date]; if (p == NULL) p="undef";\n\t\tBIO_printf(bio_err,"Expires on    :%s\\n",p);\n\t\tp=rrow[DB_serial]; if (p == NULL) p="undef";\n\t\tBIO_printf(bio_err,"Serial Number :%s\\n",p);\n\t\tp=rrow[DB_file]; if (p == NULL) p="undef";\n\t\tBIO_printf(bio_err,"File name     :%s\\n",p);\n\t\tp=rrow[DB_name]; if (p == NULL) p="undef";\n\t\tBIO_printf(bio_err,"Subject Name  :%s\\n",p);\n\t\tok= -1;\n\t\tgoto err;\n\t\t}\n\tif (verbose)\n\t\tBIO_printf(bio_err,"Everything appears to be ok, creating and signing the certificate\\n");\n\tif ((ret=X509_new()) == NULL) goto err;\n\tci=ret->cert_info;\n#ifdef X509_V3\n\tif (!X509_set_version(x509,2)) goto err;\n#endif\n\tif (BN_to_ASN1_INTEGER(serial,ci->serialNumber) == NULL)\n\t\tgoto err;\n\tif (!X509_set_issuer_name(ret,X509_get_subject_name(x509)))\n\t\tgoto err;\n\tif (strcmp(startdate,"today") == 0)\n\t\tX509_gmtime_adj(X509_get_notBefore(ret),0);\n\telse ASN1_UTCTIME_set_string(X509_get_notBefore(ret),startdate);\n\tif (enddate == NULL)\n\t\tX509_gmtime_adj(X509_get_notAfter(ret),(long)60*60*24*days);\n\telse ASN1_UTCTIME_set_string(X509_get_notAfter(ret),enddate);\n\tif (!X509_set_subject_name(ret,subject)) goto err;\n\tpktmp=X509_REQ_get_pubkey(req);\n\ti = X509_set_pubkey(ret,pktmp);\n\tEVP_PKEY_free(pktmp);\n\tif (!i) goto err;\n\tif (ext_sect)\n\t\t{\n\t\tX509V3_CTX ctx;\n\t\tif (ci->version == NULL)\n\t\t\tif ((ci->version=ASN1_INTEGER_new()) == NULL)\n\t\t\t\tgoto err;\n\t\tASN1_INTEGER_set(ci->version,2);\n\t\tif (ci->extensions != NULL)\n\t\t\tsk_X509_EXTENSION_pop_free(ci->extensions,\n\t\t\t\t\t\t   X509_EXTENSION_free);\n\t\tci->extensions = NULL;\n\t\tX509V3_set_ctx(&ctx, x509, ret, req, NULL, 0);\n\t\tif (extconf)\n\t\t\t{\n\t\t\tif (verbose)\n\t\t\t\tBIO_printf(bio_err, "Extra configuration file found\\n");\n\t\t\tX509V3_set_nconf(&ctx, extconf);\n\t\t\tif (!X509V3_EXT_add_nconf(extconf, &ctx, ext_sect,ret))\n\t\t\t\t{\n\t\t\t\tBIO_printf(bio_err,\n\t\t\t\t    "ERROR: adding extensions in section %s\\n",\n\t\t\t\t\t\t\t\text_sect);\n\t\t\t\tERR_print_errors(bio_err);\n\t\t\t\tgoto err;\n\t\t\t\t}\n\t\t\tif (verbose)\n\t\t\t\tBIO_printf(bio_err, "Successfully added extensions from file.\\n");\n\t\t\t}\n\t\telse if (ext_sect)\n\t\t\t{\n\t\t\tX509V3_set_nconf(&ctx, lconf);\n\t\t\tif(!X509V3_EXT_add_nconf(lconf, &ctx, ext_sect, ret))\n\t\t\t\t{\n\t\t\t\tBIO_printf(bio_err, "ERROR: adding extensions in section %s\\n", ext_sect);\n\t\t\t\tERR_print_errors(bio_err);\n\t\t\t\tgoto err;\n\t\t\t\t}\n\t\t\tif (verbose)\n\t\t\t\tBIO_printf(bio_err, "Successfully added extensions from config\\n");\n\t\t\t}\n\t\t}\n\tif (!copy_extensions(ret, req, ext_copy))\n\t\t{\n\t\tBIO_printf(bio_err, "ERROR: adding extensions from request\\n");\n\t\tERR_print_errors(bio_err);\n\t\tgoto err;\n\t\t}\n\tif( email_dn == 0 )\n\t\t{\n\t\tif (!X509_set_subject_name(ret,dn_subject)) goto err;\n\t\t}\n\tif (!default_op)\n\t\t{\n\t\tBIO_printf(bio_err, "Certificate Details:\\n");\n\t\tcertopt |= X509_FLAG_NO_SIGDUMP | X509_FLAG_NO_SIGNAME;\n\t\tX509_print_ex(bio_err, ret, nameopt, certopt);\n\t\t}\n\tBIO_printf(bio_err,"Certificate is to be certified until ");\n\tASN1_UTCTIME_print(bio_err,X509_get_notAfter(ret));\n\tif (days) BIO_printf(bio_err," (%d days)",days);\n\tBIO_printf(bio_err, "\\n");\n\tif (!batch)\n\t\t{\n\t\tBIO_printf(bio_err,"Sign the certificate? [y/n]:");\n\t\t(void)BIO_flush(bio_err);\n\t\tbuf[0]=\'\\0\';\n\t\tfgets(buf,sizeof(buf)-1,stdin);\n\t\tif (!((buf[0] == \'y\') || (buf[0] == \'Y\')))\n\t\t\t{\n\t\t\tBIO_printf(bio_err,"CERTIFICATE WILL NOT BE CERTIFIED\\n");\n\t\t\tok=0;\n\t\t\tgoto err;\n\t\t\t}\n\t\t}\n#ifndef OPENSSL_NO_DSA\n\tif (pkey->type == EVP_PKEY_DSA) dgst=EVP_dss1();\n\tpktmp=X509_get_pubkey(ret);\n\tif (EVP_PKEY_missing_parameters(pktmp) &&\n\t\t!EVP_PKEY_missing_parameters(pkey))\n\t\tEVP_PKEY_copy_parameters(pktmp,pkey);\n\tEVP_PKEY_free(pktmp);\n#endif\n\tif (!X509_sign(ret,pkey,dgst))\n\t\tgoto err;\n\trow[DB_type]=(char *)OPENSSL_malloc(2);\n\ttm=X509_get_notAfter(ret);\n\trow[DB_exp_date]=(char *)OPENSSL_malloc(tm->length+1);\n\tmemcpy(row[DB_exp_date],tm->data,tm->length);\n\trow[DB_exp_date][tm->length]=\'\\0\';\n\trow[DB_rev_date]=NULL;\n\trow[DB_file]=(char *)OPENSSL_malloc(8);\n\tif ((row[DB_type] == NULL) || (row[DB_exp_date] == NULL) ||\n\t\t(row[DB_file] == NULL))\n\t\t{\n\t\tBIO_printf(bio_err,"Memory allocation failure\\n");\n\t\tgoto err;\n\t\t}\n\tstrcpy(row[DB_file],"unknown");\n\trow[DB_type][0]=\'V\';\n\trow[DB_type][1]=\'\\0\';\n\tif ((irow=(char **)OPENSSL_malloc(sizeof(char *)*(DB_NUMBER+1))) == NULL)\n\t\t{\n\t\tBIO_printf(bio_err,"Memory allocation failure\\n");\n\t\tgoto err;\n\t\t}\n\tfor (i=0; i<DB_NUMBER; i++)\n\t\t{\n\t\tirow[i]=row[i];\n\t\trow[i]=NULL;\n\t\t}\n\tirow[DB_NUMBER]=NULL;\n\tif (!TXT_DB_insert(db,irow))\n\t\t{\n\t\tBIO_printf(bio_err,"failed to update database\\n");\n\t\tBIO_printf(bio_err,"TXT_DB error number %ld\\n",db->error);\n\t\tgoto err;\n\t\t}\n\tok=1;\nerr:\n\tfor (i=0; i<DB_NUMBER; i++)\n\t\tif (row[i] != NULL) OPENSSL_free(row[i]);\n\tif (CAname != NULL)\n\t\tX509_NAME_free(CAname);\n\tif (subject != NULL)\n\t\tX509_NAME_free(subject);\n\tif (tmptm != NULL)\n\t\tASN1_UTCTIME_free(tmptm);\n\tif (ok <= 0)\n\t\t{\n\t\tif (ret != NULL) X509_free(ret);\n\t\tret=NULL;\n\t\t}\n\telse\n\t\t*xret=ret;\n\treturn(ok);\n\t}', 'int copy_extensions(X509 *x, X509_REQ *req, int copy_type)\n{\n\tSTACK_OF(X509_EXTENSION) *exts = NULL;\n\tX509_EXTENSION *ext, *tmpext;\n\tASN1_OBJECT *obj;\n\tint i, idx, ret = 0;\n\tif (!x || !req || (copy_type == EXT_COPY_NONE))\n\t\treturn 1;\n\texts = X509_REQ_get_extensions(req);\n\tfor(i = 0; i < sk_X509_EXTENSION_num(exts); i++) {\n\t\text = sk_X509_EXTENSION_value(exts, i);\n\t\tobj = X509_EXTENSION_get_object(ext);\n\t\tidx = X509_get_ext_by_OBJ(x, obj, -1);\n\t\tif (idx != -1) {\n\t\t\tif (copy_type == EXT_COPY_ADD)\n\t\t\t\tcontinue;\n\t\t\tdo {\n\t\t\t\ttmpext = X509_get_ext(x, idx);\n\t\t\t\tX509_delete_ext(x, idx);\n\t\t\t\tX509_EXTENSION_free(tmpext);\n\t\t\t\tidx = X509_get_ext_by_OBJ(x, obj, -1);\n\t\t\t} while (idx != -1);\n\t\t}\n\t\tif (!X509_add_ext(x, ext, -1))\n\t\t\tgoto end;\n\t}\n\tret = 1;\n\tend:\n\tsk_X509_EXTENSION_pop_free(exts, X509_EXTENSION_free);\n\treturn ret;\n}', 'int X509_print_ex(BIO *bp, X509 *x, unsigned long nmflags, unsigned long cflag)\n\t{\n\tlong l;\n\tint ret=0,i;\n\tchar *m=NULL,mlch = \' \';\n\tint nmindent = 0;\n\tX509_CINF *ci;\n\tASN1_INTEGER *bs;\n\tEVP_PKEY *pkey=NULL;\n\tconst char *neg;\n\tASN1_STRING *str=NULL;\n\tif((nmflags & XN_FLAG_SEP_MASK) == XN_FLAG_SEP_MULTILINE) {\n\t\t\tmlch = \'\\n\';\n\t\t\tnmindent = 12;\n\t}\n\tif(nmflags == X509_FLAG_COMPAT)\n\t\tnmindent = 16;\n\tci=x->cert_info;\n\tif(!(cflag & X509_FLAG_NO_HEADER))\n\t\t{\n\t\tif (BIO_write(bp,"Certificate:\\n",13) <= 0) goto err;\n\t\tif (BIO_write(bp,"    Data:\\n",10) <= 0) goto err;\n\t\t}\n\tif(!(cflag & X509_FLAG_NO_VERSION))\n\t\t{\n\t\tl=X509_get_version(x);\n\t\tif (BIO_printf(bp,"%8sVersion: %lu (0x%lx)\\n","",l+1,l) <= 0) goto err;\n\t\t}\n\tif(!(cflag & X509_FLAG_NO_SERIAL))\n\t\t{\n\t\tif (BIO_write(bp,"        Serial Number:",22) <= 0) goto err;\n\t\tbs=X509_get_serialNumber(x);\n\t\tif (bs->length <= 4)\n\t\t\t{\n\t\t\tl=ASN1_INTEGER_get(bs);\n\t\t\tif (l < 0)\n\t\t\t\t{\n\t\t\t\tl= -l;\n\t\t\t\tneg="-";\n\t\t\t\t}\n\t\t\telse\n\t\t\t\tneg="";\n\t\t\tif (BIO_printf(bp," %s%lu (%s0x%lx)\\n",neg,l,neg,l) <= 0)\n\t\t\t\tgoto err;\n\t\t\t}\n\t\telse\n\t\t\t{\n\t\t\tneg=(bs->type == V_ASN1_NEG_INTEGER)?" (Negative)":"";\n\t\t\tif (BIO_printf(bp,"\\n%12s%s","",neg) <= 0) goto err;\n\t\t\tfor (i=0; i<bs->length; i++)\n\t\t\t\t{\n\t\t\t\tif (BIO_printf(bp,"%02x%c",bs->data[i],\n\t\t\t\t\t((i+1 == bs->length)?\'\\n\':\':\')) <= 0)\n\t\t\t\t\tgoto err;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\tif(!(cflag & X509_FLAG_NO_SIGNAME))\n\t\t{\n\t\tif (BIO_printf(bp,"%8sSignature Algorithm: ","") <= 0)\n\t\t\tgoto err;\n\t\tif (i2a_ASN1_OBJECT(bp, ci->signature->algorithm) <= 0)\n\t\t\tgoto err;\n\t\tif (BIO_puts(bp, "\\n") <= 0)\n\t\t\tgoto err;\n\t\t}\n\tif(!(cflag & X509_FLAG_NO_ISSUER))\n\t\t{\n\t\tif (BIO_printf(bp,"        Issuer:%c",mlch) <= 0) goto err;\n\t\tif (X509_NAME_print_ex(bp,X509_get_issuer_name(x),nmindent, nmflags) < 0) goto err;\n\t\tif (BIO_write(bp,"\\n",1) <= 0) goto err;\n\t\t}\n\tif(!(cflag & X509_FLAG_NO_VALIDITY))\n\t\t{\n\t\tif (BIO_write(bp,"        Validity\\n",17) <= 0) goto err;\n\t\tif (BIO_write(bp,"            Not Before: ",24) <= 0) goto err;\n\t\tif (!ASN1_TIME_print(bp,X509_get_notBefore(x))) goto err;\n\t\tif (BIO_write(bp,"\\n            Not After : ",25) <= 0) goto err;\n\t\tif (!ASN1_TIME_print(bp,X509_get_notAfter(x))) goto err;\n\t\tif (BIO_write(bp,"\\n",1) <= 0) goto err;\n\t\t}\n\tif(!(cflag & X509_FLAG_NO_SUBJECT))\n\t\t{\n\t\tif (BIO_printf(bp,"        Subject:%c",mlch) <= 0) goto err;\n\t\tif (X509_NAME_print_ex(bp,X509_get_subject_name(x),nmindent, nmflags) < 0) goto err;\n\t\tif (BIO_write(bp,"\\n",1) <= 0) goto err;\n\t\t}\n\tif(!(cflag & X509_FLAG_NO_PUBKEY))\n\t\t{\n\t\tif (BIO_write(bp,"        Subject Public Key Info:\\n",33) <= 0)\n\t\t\tgoto err;\n\t\tif (BIO_printf(bp,"%12sPublic Key Algorithm: ","") <= 0)\n\t\t\tgoto err;\n\t\tif (i2a_ASN1_OBJECT(bp, ci->key->algor->algorithm) <= 0)\n\t\t\tgoto err;\n\t\tif (BIO_puts(bp, "\\n") <= 0)\n\t\t\tgoto err;\n\t\tpkey=X509_get_pubkey(x);\n\t\tif (pkey == NULL)\n\t\t\t{\n\t\t\tBIO_printf(bp,"%12sUnable to load Public Key\\n","");\n\t\t\tERR_print_errors(bp);\n\t\t\t}\n\t\telse\n#ifndef OPENSSL_NO_RSA\n\t\tif (pkey->type == EVP_PKEY_RSA)\n\t\t\t{\n\t\t\tBIO_printf(bp,"%12sRSA Public Key: (%d bit)\\n","",\n\t\t\tBN_num_bits(pkey->pkey.rsa->n));\n\t\t\tRSA_print(bp,pkey->pkey.rsa,16);\n\t\t\t}\n\t\telse\n#endif\n#ifndef OPENSSL_NO_DSA\n\t\tif (pkey->type == EVP_PKEY_DSA)\n\t\t\t{\n\t\t\tBIO_printf(bp,"%12sDSA Public Key:\\n","");\n\t\t\tDSA_print(bp,pkey->pkey.dsa,16);\n\t\t\t}\n\t\telse\n#endif\n\t\t\tBIO_printf(bp,"%12sUnknown Public Key:\\n","");\n\t\tEVP_PKEY_free(pkey);\n\t\t}\n\tif (!(cflag & X509_FLAG_NO_EXTENSIONS))\n\t\tX509V3_extensions_print(bp, "X509v3 extensions",\n\t\t\t\t\tci->extensions, cflag, 8);\n\tif(!(cflag & X509_FLAG_NO_SIGDUMP))\n\t\t{\n\t\tif(X509_signature_print(bp, x->sig_alg, x->signature) <= 0) goto err;\n\t\t}\n\tif(!(cflag & X509_FLAG_NO_AUX))\n\t\t{\n\t\tif (!X509_CERT_AUX_print(bp, x->aux, 0)) goto err;\n\t\t}\n\tret=1;\nerr:\n\tif (str != NULL) ASN1_STRING_free(str);\n\tif (m != NULL) OPENSSL_free(m);\n\treturn(ret);\n\t}', 'int ASN1_TIME_print(BIO *bp, ASN1_TIME *tm)\n{\n\tif(tm->type == V_ASN1_UTCTIME) return ASN1_UTCTIME_print(bp, tm);\n\tif(tm->type == V_ASN1_GENERALIZEDTIME)\n\t\t\t\treturn ASN1_GENERALIZEDTIME_print(bp, tm);\n\tBIO_write(bp,"Bad time value",14);\n\treturn(0);\n}', 'int ASN1_GENERALIZEDTIME_print(BIO *bp, ASN1_GENERALIZEDTIME *tm)\n\t{\n\tchar *v;\n\tint gmt=0;\n\tint i;\n\tint y=0,M=0,d=0,h=0,m=0,s=0;\n\ti=tm->length;\n\tv=(char *)tm->data;\n\tif (i < 12) goto err;\n\tif (v[i-1] == \'Z\') gmt=1;\n\tfor (i=0; i<12; i++)\n\t\tif ((v[i] > \'9\') || (v[i] < \'0\')) goto err;\n\ty= (v[0]-\'0\')*1000+(v[1]-\'0\')*100 + (v[2]-\'0\')*10+(v[3]-\'0\');\n\tM= (v[4]-\'0\')*10+(v[5]-\'0\');\n\tif ((M > 12) || (M < 1)) goto err;\n\td= (v[6]-\'0\')*10+(v[7]-\'0\');\n\th= (v[8]-\'0\')*10+(v[9]-\'0\');\n\tm=  (v[10]-\'0\')*10+(v[11]-\'0\');\n\tif (\t(v[12] >= \'0\') && (v[12] <= \'9\') &&\n\t\t(v[13] >= \'0\') && (v[13] <= \'9\'))\n\t\ts=  (v[12]-\'0\')*10+(v[13]-\'0\');\n\tif (BIO_printf(bp,"%s %2d %02d:%02d:%02d %d%s",\n\t\tmon[M-1],d,h,m,s,y,(gmt)?" GMT":"") <= 0)\n\t\treturn(0);\n\telse\n\t\treturn(1);\nerr:\n\tBIO_write(bp,"Bad time value",14);\n\treturn(0);\n\t}']