summaryrefslogtreecommitdiffstats
path: root/net/third_party/nss/ssl
diff options
context:
space:
mode:
authorwtc@chromium.org <wtc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-21 16:21:00 +0000
committerwtc@chromium.org <wtc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-21 16:21:00 +0000
commit985454a327e5907caf0d5f32ed37de9f6f2abda4 (patch)
tree379ee94f672bfdda9dafe820ae55685046c5ccc8 /net/third_party/nss/ssl
parent6cd4179446a0e041c69ded7e08cb93797938a567 (diff)
downloadchromium_src-985454a327e5907caf0d5f32ed37de9f6f2abda4.zip
chromium_src-985454a327e5907caf0d5f32ed37de9f6f2abda4.tar.gz
chromium_src-985454a327e5907caf0d5f32ed37de9f6f2abda4.tar.bz2
Add certificates to the ss->ssl3.peerCertChain linked list
in the right order. R=agl BUG=none TEST=none Review URL: http://codereview.chromium.org/3984003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@63366 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/third_party/nss/ssl')
-rw-r--r--net/third_party/nss/ssl/ssl3con.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/net/third_party/nss/ssl/ssl3con.c b/net/third_party/nss/ssl/ssl3con.c
index 9ab2a1c..1a6612f 100644
--- a/net/third_party/nss/ssl/ssl3con.c
+++ b/net/third_party/nss/ssl/ssl3con.c
@@ -7811,6 +7811,7 @@ void
ssl3_CopyPeerCertsFromSID(sslSocket *ss, sslSessionID *sid)
{
PRArenaPool *arena;
+ ssl3CertNode *lastCert = NULL;
ssl3CertNode *certs = NULL;
int i;
@@ -7822,8 +7823,13 @@ ssl3_CopyPeerCertsFromSID(sslSocket *ss, sslSessionID *sid)
for (i = 0; i < MAX_PEER_CERT_CHAIN_SIZE && sid->peerCertChain[i]; i++) {
ssl3CertNode *c = PORT_ArenaNew(arena, ssl3CertNode);
c->cert = CERT_DupCertificate(sid->peerCertChain[i]);
- c->next = certs;
- certs = c;
+ c->next = NULL;
+ if (lastCert) {
+ lastCert->next = c;
+ } else {
+ certs = c;
+ }
+ lastCert = c;
}
ss->ssl3.peerCertChain = certs;
}
@@ -7847,6 +7853,7 @@ static SECStatus
ssl3_HandleCertificate(sslSocket *ss, SSL3Opaque *b, PRUint32 length)
{
ssl3CertNode * c;
+ ssl3CertNode * lastCert = NULL;
ssl3CertNode * certs = NULL;
PRArenaPool * arena = NULL;
CERTCertificate *cert;
@@ -7974,8 +7981,13 @@ ssl3_HandleCertificate(sslSocket *ss, SSL3Opaque *b, PRUint32 length)
if (c->cert->trust)
trusted = PR_TRUE;
- c->next = certs;
- certs = c;
+ c->next = NULL;
+ if (lastCert) {
+ lastCert->next = c;
+ } else {
+ certs = c;
+ }
+ lastCert = c;
}
if (remaining != 0)