mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-20 23:37:33 +09:00
Update NSS to 3.35-RTM
This commit is contained in:
parent
fe49ad404e
commit
66dd670b60
388 changed files with 39075 additions and 20752 deletions
|
|
@ -1,3 +1,4 @@
|
|||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/*
|
||||
* Gather (Read) entire SSL3 records from socket into buffer.
|
||||
*
|
||||
|
|
@ -98,7 +99,7 @@ ssl3_GatherData(sslSocket *ss, sslGather *gs, int flags, ssl2Gather *ssl2gs)
|
|||
PORT_Assert(ss->opt.noLocks || ssl_HaveRecvBufLock(ss));
|
||||
if (gs->state == GS_INIT) {
|
||||
gs->state = GS_HEADER;
|
||||
gs->remainder = ss->ssl3.hs.shortHeaders ? 2 : 5;
|
||||
gs->remainder = 5;
|
||||
gs->offset = 0;
|
||||
gs->writeOffset = 0;
|
||||
gs->readOffset = 0;
|
||||
|
|
@ -156,19 +157,7 @@ ssl3_GatherData(sslSocket *ss, sslGather *gs, int flags, ssl2Gather *ssl2gs)
|
|||
/* Should have a non-SSLv2 record header in gs->hdr. Extract
|
||||
* the length of the following encrypted data, and then
|
||||
* read in the rest of the record into gs->inbuf. */
|
||||
if (ss->ssl3.hs.shortHeaders) {
|
||||
PRUint16 len = (gs->hdr[0] << 8) | gs->hdr[1];
|
||||
if (!(len & 0x8000)) {
|
||||
SSL_DBG(("%d: SSL3[%d]: incorrectly formatted header"));
|
||||
SSL3_SendAlert(ss, alert_fatal, illegal_parameter);
|
||||
gs->state = GS_INIT;
|
||||
PORT_SetError(SSL_ERROR_BAD_MAC_READ);
|
||||
return SECFailure;
|
||||
}
|
||||
gs->remainder = len & ~0x8000;
|
||||
} else {
|
||||
gs->remainder = (gs->hdr[3] << 8) | gs->hdr[4];
|
||||
}
|
||||
gs->remainder = (gs->hdr[3] << 8) | gs->hdr[4];
|
||||
} else {
|
||||
/* Probably an SSLv2 record header. No need to handle any
|
||||
* security escapes (gs->hdr[0] & 0x40) as we wouldn't get
|
||||
|
|
@ -361,6 +350,9 @@ dtls_GatherData(sslSocket *ss, sslGather *gs, int flags)
|
|||
}
|
||||
}
|
||||
|
||||
SSL_TRC(20, ("%d: SSL3[%d]: dtls gathered record type=%d len=%d",
|
||||
SSL_GETPID(), ss->fd, gs->hdr[0], gs->inbuf.len));
|
||||
|
||||
memcpy(gs->inbuf.buf, gs->dtlsPacket.buf + gs->dtlsPacketOffset,
|
||||
gs->remainder);
|
||||
gs->inbuf.len = gs->remainder;
|
||||
|
|
@ -394,7 +386,8 @@ ssl3_GatherCompleteHandshake(sslSocket *ss, int flags)
|
|||
SSL3Ciphertext cText;
|
||||
PRBool keepGoing = PR_TRUE;
|
||||
|
||||
SSL_TRC(30, ("ssl3_GatherCompleteHandshake"));
|
||||
SSL_TRC(30, ("%d: SSL3[%d]: ssl3_GatherCompleteHandshake",
|
||||
SSL_GETPID(), ss->fd));
|
||||
|
||||
/* ssl3_HandleRecord may end up eventually calling ssl_FinishHandshake,
|
||||
* which requires the 1stHandshakeLock, which must be acquired before the
|
||||
|
|
@ -405,9 +398,12 @@ ssl3_GatherCompleteHandshake(sslSocket *ss, int flags)
|
|||
|
||||
do {
|
||||
PRBool handleRecordNow = PR_FALSE;
|
||||
PRBool processingEarlyData;
|
||||
|
||||
ssl_GetSSL3HandshakeLock(ss);
|
||||
|
||||
processingEarlyData = ss->ssl3.hs.zeroRttState == ssl_0rtt_accepted;
|
||||
|
||||
/* Without this, we may end up wrongly reporting
|
||||
* SSL_ERROR_RX_UNEXPECTED_* errors if we receive any records from the
|
||||
* peer while we are waiting to be restarted.
|
||||
|
|
@ -493,18 +489,12 @@ ssl3_GatherCompleteHandshake(sslSocket *ss, int flags)
|
|||
* If it's a change cipher spec, alert, or handshake message,
|
||||
* ss->gs.buf.len will be 0 when ssl3_HandleRecord returns SECSuccess.
|
||||
*/
|
||||
if (ss->ssl3.hs.shortHeaders) {
|
||||
cText.type = content_application_data;
|
||||
cText.version = SSL_LIBRARY_VERSION_TLS_1_0;
|
||||
} else {
|
||||
cText.type = (SSL3ContentType)ss->gs.hdr[0];
|
||||
cText.version = (ss->gs.hdr[1] << 8) | ss->gs.hdr[2];
|
||||
}
|
||||
cText.type = (SSL3ContentType)ss->gs.hdr[0];
|
||||
cText.version = (ss->gs.hdr[1] << 8) | ss->gs.hdr[2];
|
||||
|
||||
if (IS_DTLS(ss)) {
|
||||
sslSequenceNumber seq_num;
|
||||
|
||||
cText.version = dtls_DTLSVersionToTLSVersion(cText.version);
|
||||
/* DTLS sequence number */
|
||||
PORT_Memcpy(&seq_num, &ss->gs.hdr[3], sizeof(seq_num));
|
||||
cText.seq_num = PR_ntohll(seq_num);
|
||||
|
|
@ -555,12 +545,22 @@ ssl3_GatherCompleteHandshake(sslSocket *ss, int flags)
|
|||
} else {
|
||||
ss->ssl3.hs.canFalseStart = PR_FALSE;
|
||||
}
|
||||
} else if (processingEarlyData &&
|
||||
ss->ssl3.hs.zeroRttState == ssl_0rtt_done &&
|
||||
!PR_CLIST_IS_EMPTY(&ss->ssl3.hs.bufferedEarlyData)) {
|
||||
/* If we were processing early data and we are no longer, then force
|
||||
* the handshake to block. This ensures that early data is
|
||||
* delivered to the application before the handshake completes. */
|
||||
ssl_ReleaseSSL3HandshakeLock(ss);
|
||||
PORT_SetError(PR_WOULD_BLOCK_ERROR);
|
||||
return SECWouldBlock;
|
||||
}
|
||||
ssl_ReleaseSSL3HandshakeLock(ss);
|
||||
} while (keepGoing);
|
||||
|
||||
/* Service the DTLS timer so that the holddown timer eventually fires. */
|
||||
if (IS_DTLS(ss)) {
|
||||
/* Service the DTLS timer so that the post-handshake timers
|
||||
* fire. */
|
||||
if (IS_DTLS(ss) && (ss->ssl3.hs.ws == idle_handshake)) {
|
||||
dtls_CheckTimer(ss);
|
||||
}
|
||||
ss->gs.readOffset = 0;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue