diff options
author | wtc@chromium.org <wtc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-21 16:21:00 +0000 |
---|---|---|
committer | wtc@chromium.org <wtc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-21 16:21:00 +0000 |
commit | 985454a327e5907caf0d5f32ed37de9f6f2abda4 (patch) | |
tree | 379ee94f672bfdda9dafe820ae55685046c5ccc8 /net/third_party/nss/ssl | |
parent | 6cd4179446a0e041c69ded7e08cb93797938a567 (diff) | |
download | chromium_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.c | 20 |
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) |