Commit 0b3f827c authored by Ben Laurie's avatar Ben Laurie
Browse files

Yet another stack.

parent 8051996a
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -94,6 +94,7 @@ my %table=(
"purify",	"purify gcc:-g -DPURIFY -Wall:(unknown):-lsocket -lnsl::::",
"debug",	"gcc:-DBN_DEBUG -DREF_CHECK -DCRYPTO_MDEBUG -ggdb -g2 -Wformat -Wshadow -Wmissing-prototypes -Wmissing-declarations -Werror:(unknown):-lefence::::",
"debug-ben",	"gcc:-DBN_DEBUG -DREF_CHECK -DCRYPTO_MDEBUG -O2 -pedantic -Wall -Wshadow -Werror -pipe:(unknown):::::",
"debug-ben-debug",	"gcc:-DBN_DEBUG -DREF_CHECK -DCRYPTO_MDEBUG -g3 -O2 -pedantic -Wall -Wshadow -Werror -pipe:(unknown):::::",
"debug-ben-strict",	"gcc:-DBN_DEBUG -DREF_CHECK -DCRYPTO_MDEBUG -DCONST_STRICT -O2 -Wall -Wshadow -Werror -Wpointer-arith -Wcast-qual -Wwrite-strings -pipe:(unknown):::::",
"debug-rse","cc:-DTERMIOS -DL_ENDIAN -pipe -O -g -ggdb3 -Wall:(unknown)::BN_LLONG $x86_gcc_des $x86_gcc_opts:$x86_elf_asm",
"dist",		"cc:-O:(unknown):::::",
+2 −1
Original line number Diff line number Diff line
@@ -1721,7 +1721,8 @@ again2:
		/* Free the current entries if any, there should not
		 * be any I belive */
		if (ci->extensions != NULL)
			sk_pop_free(ci->extensions,X509_EXTENSION_free);
			sk_X509_EXTENSION_pop_free(ci->extensions,
						   X509_EXTENSION_free);

		ci->extensions = NULL;

+2 −2
Original line number Diff line number Diff line
@@ -638,8 +638,8 @@ int print_attribs (BIO *out, STACK *attrlst, char *name)
			BIO_printf(out, ": ");
		} else BIO_printf(out, "%s: ", OBJ_nid2ln(attr_nid));

		if(sk_num(attr->value.set)) {
			av = (ASN1_TYPE *)sk_value(attr->value.set, 0);
		if(sk_ASN1_TYPE_num(attr->value.set)) {
			av = sk_ASN1_TYPE_value(attr->value.set, 0);
			switch(av->type) {
				case V_ASN1_BMPSTRING:
        			value = uni2asc(av->value.bmpstring->data,
+56 −0
Original line number Diff line number Diff line
@@ -175,6 +175,10 @@ err:\
	if ((a != NULL) && (sk_num(a) != 0)) \
		M_ASN1_I2D_put_SEQUENCE(a,f);

#define M_ASN1_I2D_put_SEQUENCE_opt_type(type,a,f) \
	if ((a != NULL) && (sk_##type##_num(a) != 0)) \
		M_ASN1_I2D_put_SEQUENCE_type(type,a,f);

#define M_ASN1_D2I_get_IMP_set_opt(b,func,free_func,tag) \
	if ((c.slen != 0) && \
		(M_ASN1_next == \
@@ -206,6 +210,11 @@ err:\
		V_ASN1_CONSTRUCTED|V_ASN1_SEQUENCE)))\
		{ M_ASN1_D2I_get_seq(r,func,free_func); }

#define M_ASN1_D2I_get_seq_opt_type(type,r,func,free_func) \
	if ((c.slen != 0) && (M_ASN1_next == (V_ASN1_UNIVERSAL| \
		V_ASN1_CONSTRUCTED|V_ASN1_SEQUENCE)))\
		{ M_ASN1_D2I_get_seq_type(type,r,func,free_func); }

#define M_ASN1_D2I_get_IMP_set(r,func,free_func,x) \
		M_ASN1_D2I_get_imp_set(r,func,free_func,\
			x,V_ASN1_CONTEXT_SPECIFIC);
@@ -286,6 +295,32 @@ err:\
		c.slen-=(c.p-c.q); \
		}

#define M_ASN1_D2I_get_EXP_set_opt_type(type,r,func,free_func,tag,b) \
	if ((c.slen != 0) && (M_ASN1_next == \
		(V_ASN1_CONSTRUCTED|V_ASN1_CONTEXT_SPECIFIC|tag))) \
		{ \
		int Tinf,Ttag,Tclass; \
		long Tlen; \
		\
		c.q=c.p; \
		Tinf=ASN1_get_object(&c.p,&Tlen,&Ttag,&Tclass,c.slen); \
		if (Tinf & 0x80) \
			{ c.error=ERR_R_BAD_ASN1_OBJECT_HEADER; \
			c.line=__LINE__; goto err; } \
		if (Tinf == (V_ASN1_CONSTRUCTED+1)) \
					Tlen = c.slen - (c.p - c.q) - 2; \
		if (d2i_ASN1_SET_OF_##type(&(r),&c.p,Tlen,func, \
			free_func,b,V_ASN1_UNIVERSAL) == NULL) \
			{ c.line=__LINE__; goto err; } \
		if (Tinf == (V_ASN1_CONSTRUCTED+1)) { \
			Tlen = c.slen - (c.p - c.q); \
			if(!ASN1_check_infinite_end(&c.p, Tlen)) \
				{ c.error=ERR_R_MISSING_ASN1_EOS; \
				c.line=__LINE__; goto err; } \
		}\
		c.slen-=(c.p-c.q); \
		}

/* New macros */
#define M_ASN1_New_Malloc(ret,type) \
	if ((ret=(type *)Malloc(sizeof(type))) == NULL) \
@@ -329,6 +364,10 @@ err:\
		if ((a != NULL) && (sk_num(a) != 0)) \
			M_ASN1_I2D_len_SEQUENCE(a,f);

#define M_ASN1_I2D_len_SEQUENCE_opt_type(type,a,f) \
		if ((a != NULL) && (sk_##type##_num(a) != 0)) \
			M_ASN1_I2D_len_SEQUENCE_type(type,a,f);

#define M_ASN1_I2D_len_IMP_SET(a,f,x) \
		ret+=i2d_ASN1_SET(a,NULL,f,x,V_ASN1_CONTEXT_SPECIFIC,IS_SET);

@@ -383,6 +422,15 @@ err:\
			ret+=ASN1_object_size(1,v,mtag); \
			}

#define M_ASN1_I2D_len_EXP_SEQUENCE_opt_type(type,a,f,mtag,tag,v) \
		if ((a != NULL) && (sk_##type##_num(a) != 0))\
			{ \
			v=i2d_ASN1_SET_OF_##type(a,NULL,f,tag, \
						 V_ASN1_UNIVERSAL, \
						 IS_SEQUENCE); \
			ret+=ASN1_object_size(1,v,mtag); \
			}

/* Put Macros */
#define M_ASN1_I2D_put(a,f)	f(a,&p)

@@ -457,6 +505,14 @@ err:\
			i2d_ASN1_SET(a,&p,f,tag,V_ASN1_UNIVERSAL,IS_SEQUENCE); \
			}

#define M_ASN1_I2D_put_EXP_SEQUENCE_opt_type(type,a,f,mtag,tag,v) \
		if ((a != NULL) && (sk_##type##_num(a) != 0)) \
			{ \
			ASN1_put_object(&p,1,v,mtag,V_ASN1_CONTEXT_SPECIFIC); \
			i2d_ASN1_SET_OF_##type(a,&p,f,tag,V_ASN1_UNIVERSAL, \
					       IS_SEQUENCE); \
			}

#define M_ASN1_I2D_seq_total() \
		r=ASN1_object_size(1,ret,V_ASN1_SEQUENCE); \
		if (pp == NULL) return(r); \
+15 −9
Original line number Diff line number Diff line
@@ -74,7 +74,9 @@ int i2d_X509_CINF(X509_CINF *a, unsigned char **pp)
	M_ASN1_I2D_len(a->key,			i2d_X509_PUBKEY);
	M_ASN1_I2D_len_IMP_opt(a->issuerUID,	i2d_ASN1_BIT_STRING);
	M_ASN1_I2D_len_IMP_opt(a->subjectUID,	i2d_ASN1_BIT_STRING);
	M_ASN1_I2D_len_EXP_SEQUENCE_opt(a->extensions,i2d_X509_EXTENSION,3,V_ASN1_SEQUENCE,v2);
	M_ASN1_I2D_len_EXP_SEQUENCE_opt_type(X509_EXTENSION,a->extensions,
					     i2d_X509_EXTENSION,3,
					     V_ASN1_SEQUENCE,v2);

	M_ASN1_I2D_seq_total();

@@ -87,7 +89,9 @@ int i2d_X509_CINF(X509_CINF *a, unsigned char **pp)
	M_ASN1_I2D_put(a->key,			i2d_X509_PUBKEY);
	M_ASN1_I2D_put_IMP_opt(a->issuerUID,	i2d_ASN1_BIT_STRING,1);
	M_ASN1_I2D_put_IMP_opt(a->subjectUID,	i2d_ASN1_BIT_STRING,2);
	M_ASN1_I2D_put_EXP_SEQUENCE_opt(a->extensions,i2d_X509_EXTENSION,3,V_ASN1_SEQUENCE,v2);
	M_ASN1_I2D_put_EXP_SEQUENCE_opt_type(X509_EXTENSION,a->extensions,
					     i2d_X509_EXTENSION,3,
					     V_ASN1_SEQUENCE,v2);

	M_ASN1_I2D_finish();
	}
@@ -147,11 +151,13 @@ X509_CINF *d2i_X509_CINF(X509_CINF **a, unsigned char **pp, long length)
#endif
		{
		if (ret->extensions != NULL)
			while (sk_num(ret->extensions))
				X509_EXTENSION_free((X509_EXTENSION *)
					sk_pop(ret->extensions));
		M_ASN1_D2I_get_EXP_set_opt(ret->extensions,d2i_X509_EXTENSION,
			X509_EXTENSION_free,3,V_ASN1_SEQUENCE);
			while (sk_X509_EXTENSION_num(ret->extensions))
				X509_EXTENSION_free(
				      sk_X509_EXTENSION_pop(ret->extensions));
		M_ASN1_D2I_get_EXP_set_opt_type(X509_EXTENSION,ret->extensions,
						d2i_X509_EXTENSION,
						X509_EXTENSION_free,3,
						V_ASN1_SEQUENCE);
		}
	M_ASN1_D2I_Finish(a,X509_CINF_free,ASN1_F_D2I_X509_CINF);
	}
@@ -188,7 +194,7 @@ void X509_CINF_free(X509_CINF *a)
	X509_PUBKEY_free(a->key);
	ASN1_BIT_STRING_free(a->issuerUID);
	ASN1_BIT_STRING_free(a->subjectUID);
	sk_pop_free(a->extensions,X509_EXTENSION_free);
	Free((char *)a);
	sk_X509_EXTENSION_pop_free(a->extensions,X509_EXTENSION_free);
	Free(a);
	}
Loading