Ugh, BIO_find_type() cannot be passed a NULL.

Fix doc example, and fix BIO_find_type().

Fix PKCS7_verify(). It was using 'i' for both the
loop variable and the verify return value.
diff --git a/CHANGES b/CHANGES
index 5ada535..01f8d5b 100644
--- a/CHANGES
+++ b/CHANGES
@@ -4,6 +4,10 @@
 
  Changes between 0.9.5a and 0.9.6  [xx XXX 2000]
 
+  *) Fix bug in PKCS7_verify() which caused an infinite loop
+     if there was more than one signature.
+     [Sven Uszpelkat <su@celocom.de>]
+
   *) Major change in util/mkdef.pl to include extra information
      about each symbol, as well as presentig variables as well
      as functions.  This change means that there's n more need
diff --git a/crypto/bio/bio_lib.c b/crypto/bio/bio_lib.c
index fa32df0..381afc9 100644
--- a/crypto/bio/bio_lib.c
+++ b/crypto/bio/bio_lib.c
@@ -418,6 +418,7 @@
 	{
 	int mt,mask;
 
+	if(!bio) return NULL;
 	mask=type&0xff;
 	do	{
 		if (bio->method != NULL)
diff --git a/crypto/pkcs7/pk7_smime.c b/crypto/pkcs7/pk7_smime.c
index 19e0b28..c8cd5a7 100644
--- a/crypto/pkcs7/pk7_smime.c
+++ b/crypto/pkcs7/pk7_smime.c
@@ -153,7 +153,7 @@
 	PKCS7_SIGNER_INFO *si;
 	X509_STORE_CTX cert_ctx;
 	char buf[4096];
-	int i, j=0;
+	int i, j=0, k;
 	BIO *p7bio;
 	BIO *tmpout;
 
@@ -193,8 +193,8 @@
 
 	/* Now verify the certificates */
 
-	if (!(flags & PKCS7_NOVERIFY)) for (i = 0; i < sk_X509_num(signers); i++) {
-		signer = sk_X509_value (signers, i);
+	if (!(flags & PKCS7_NOVERIFY)) for (k = 0; k < sk_X509_num(signers); k++) {
+		signer = sk_X509_value (signers, k);
 		if (!(flags & PKCS7_NOCHAIN)) {
 			X509_STORE_CTX_init(&cert_ctx, store, signer,
 							p7->d.sign->cert);
diff --git a/doc/crypto/BIO_find_type.pod b/doc/crypto/BIO_find_type.pod
index 1a1d6bf..cc18c06 100644
--- a/doc/crypto/BIO_find_type.pod
+++ b/doc/crypto/BIO_find_type.pod
@@ -71,6 +71,11 @@
 
  next = bio->next_bio;
 
+=head1 BUGS
+
+BIO_find_type() in OpenSSL 0.9.5a and earlier could not be safely passed a
+NULL pointer for the B<b> argument.
+
 =head1 EXAMPLE
 
 Traverse a chain looking for digest BIOs:
@@ -78,14 +83,14 @@
  BIO *btmp;
  btmp = in_bio;	/* in_bio is chain to search through */
 
- for(;;) {
+ do {
  	btmp = BIO_find_type(btmp, BIO_TYPE_MD);
 	if(btmp == NULL) break;	/* Not found */
 	/* btmp is a digest BIO, do something with it ...*/
    	...
 
 	btmp = BIO_next(btmp);
- } 
+ } while(btmp);
 
 
 =head1 SEE ALSO