mirror of
https://github.com/classilla/tenfourfox.git
synced 2025-04-12 16:37:15 +00:00
#633: M1683964 M1683940 M1677590
This commit is contained in:
parent
0bb76284cd
commit
ef55596e77
@ -104,6 +104,7 @@ var NetworkManager = (function NetworkManagerClosure() {
|
||||
var rangeStr = args.begin + '-' + (args.end - 1);
|
||||
xhr.setRequestHeader('Range', 'bytes=' + rangeStr);
|
||||
pendingRequest.expectedStatus = 206;
|
||||
xhr.channel.QueryInterface(Ci.nsIHttpChannel).redirectionLimit = 0;
|
||||
} else {
|
||||
pendingRequest.expectedStatus = 200;
|
||||
}
|
||||
|
@ -1573,6 +1573,12 @@ gfxFontFamily::FindFontForChar(GlobalFontMatch *aMatchData)
|
||||
void
|
||||
gfxFontFamily::SearchAllFontsForChar(GlobalFontMatch *aMatchData)
|
||||
{
|
||||
if (!mFamilyCharacterMapInitialized) {
|
||||
ReadAllCMAPs();
|
||||
}
|
||||
if (!mFamilyCharacterMap.test(aMatchData->mCh)) {
|
||||
return;
|
||||
}
|
||||
uint32_t i, numFonts = mAvailableFonts.Length();
|
||||
for (i = 0; i < numFonts; i++) {
|
||||
gfxFontEntry *fe = mAvailableFonts[i];
|
||||
|
@ -3242,7 +3242,7 @@ sdp_result_e sdp_parse_attr_cpar (sdp_t *sdp_p, sdp_attr_t *attr_p,
|
||||
sdp_mca_t *cap_p;
|
||||
sdp_attr_t *cap_attr_p = NULL;
|
||||
sdp_attr_t *prev_attr_p;
|
||||
char tmp[SDP_MAX_STRING_LEN];
|
||||
char tmp[SDP_MAX_STRING_LEN] = {0};
|
||||
|
||||
/* Make sure we've processed a valid X-cap/cdsc attr prior to this and
|
||||
* if so, get the cap pointer. */
|
||||
@ -3299,8 +3299,8 @@ sdp_result_e sdp_parse_attr_cpar (sdp_t *sdp_p, sdp_attr_t *attr_p,
|
||||
|
||||
if ((result != SDP_SUCCESS) || (tmp[0] != 'a') || (tmp[1] != '\0')) {
|
||||
sdp_parse_error(sdp_p,
|
||||
"%s Warning: Invalid token type (%s) in %s "
|
||||
"attribute, unable to parse", sdp_p->debug_str, tmp,
|
||||
"%s Warning: Invalid token type in %s "
|
||||
"attribute, unable to parse", sdp_p->debug_str,
|
||||
sdp_get_attr_name(attr_p->type));
|
||||
sdp_p->conf_p->num_invalid_param++;
|
||||
return (SDP_INVALID_PARAMETER);
|
||||
|
@ -1503,6 +1503,11 @@ sctp_process_cookie_existing(struct mbuf *m, int iphlen, int offset,
|
||||
struct sctp_association *asoc;
|
||||
struct sctp_init_chunk *init_cp, init_buf;
|
||||
struct sctp_init_ack_chunk *initack_cp, initack_buf;
|
||||
struct sctp_asconf_addr *aparam, *naparam;
|
||||
struct sctp_asconf_ack *aack, *naack;
|
||||
struct sctp_tmit_chunk *chk, *nchk;
|
||||
struct sctp_stream_reset_list *strrst, *nstrrst;
|
||||
struct sctp_queued_to_read *sq, *nsq;
|
||||
struct sctp_nets *net;
|
||||
struct mbuf *op_err;
|
||||
int init_offset, initack_offset, i;
|
||||
@ -1785,8 +1790,9 @@ sctp_process_cookie_existing(struct mbuf *m, int iphlen, int offset,
|
||||
NULL);
|
||||
}
|
||||
asoc->my_rwnd = ntohl(initack_cp->init.a_rwnd);
|
||||
asoc->pre_open_streams = ntohs(initack_cp->init.num_outbound_streams);
|
||||
|
||||
if (asoc->pre_open_streams < asoc->streamoutcnt) {
|
||||
asoc->pre_open_streams = asoc->streamoutcnt;
|
||||
}
|
||||
if (ntohl(init_cp->init.initiate_tag) != asoc->peer_vtag) {
|
||||
/* Ok the peer probably discarded our
|
||||
* data (if we echoed a cookie+data). So anything
|
||||
@ -1795,7 +1801,6 @@ sctp_process_cookie_existing(struct mbuf *m, int iphlen, int offset,
|
||||
* kick us so it COULD still take a timeout
|
||||
* to move these.. but it can't hurt to mark them.
|
||||
*/
|
||||
struct sctp_tmit_chunk *chk;
|
||||
TAILQ_FOREACH(chk, &stcb->asoc.sent_queue, sctp_next) {
|
||||
if (chk->sent < SCTP_DATAGRAM_RESEND) {
|
||||
chk->sent = SCTP_DATAGRAM_RESEND;
|
||||
@ -1938,8 +1943,9 @@ sctp_process_cookie_existing(struct mbuf *m, int iphlen, int offset,
|
||||
/* move to OPEN state, if not in SHUTDOWN_SENT */
|
||||
SCTP_SET_STATE(asoc, SCTP_STATE_OPEN);
|
||||
}
|
||||
asoc->pre_open_streams =
|
||||
ntohs(initack_cp->init.num_outbound_streams);
|
||||
if (asoc->pre_open_streams < asoc->streamoutcnt) {
|
||||
asoc->pre_open_streams = asoc->streamoutcnt;
|
||||
}
|
||||
asoc->init_seq_number = ntohl(initack_cp->init.initial_tsn);
|
||||
asoc->sending_seq = asoc->asconf_seq_out = asoc->str_reset_seq_out = asoc->init_seq_number;
|
||||
asoc->asconf_seq_out_acked = asoc->asconf_seq_out - 1;
|
||||
@ -1985,6 +1991,58 @@ sctp_process_cookie_existing(struct mbuf *m, int iphlen, int offset,
|
||||
stcb->asoc.strmout[i].next_sequence_send = 0;
|
||||
stcb->asoc.strmout[i].last_msg_incomplete = 0;
|
||||
}
|
||||
TAILQ_FOREACH_SAFE(strrst, &asoc->resetHead, next_resp, nstrrst) {
|
||||
TAILQ_REMOVE(&asoc->resetHead, strrst, next_resp);
|
||||
SCTP_FREE(strrst, SCTP_M_STRESET);
|
||||
}
|
||||
TAILQ_FOREACH_SAFE(sq, &asoc->pending_reply_queue, next, nsq) {
|
||||
TAILQ_REMOVE(&asoc->pending_reply_queue, sq, next);
|
||||
if (sq->data) {
|
||||
sctp_m_freem(sq->data);
|
||||
sq->data = NULL;
|
||||
}
|
||||
sctp_free_remote_addr(sq->whoFrom);
|
||||
sq->whoFrom = NULL;
|
||||
sq->stcb = NULL;
|
||||
sctp_free_a_readq(stcb, sq);
|
||||
}
|
||||
TAILQ_FOREACH_SAFE(chk, &asoc->control_send_queue, sctp_next, nchk) {
|
||||
TAILQ_REMOVE(&asoc->control_send_queue, chk, sctp_next);
|
||||
if (chk->data) {
|
||||
sctp_m_freem(chk->data);
|
||||
chk->data = NULL;
|
||||
}
|
||||
if (chk->holds_key_ref)
|
||||
sctp_auth_key_release(stcb, chk->auth_keyid, SCTP_SO_LOCKED);
|
||||
sctp_free_remote_addr(chk->whoTo);
|
||||
SCTP_ZONE_FREE(SCTP_BASE_INFO(ipi_zone_chunk), chk);
|
||||
SCTP_DECR_CHK_COUNT();
|
||||
}
|
||||
TAILQ_FOREACH_SAFE(chk, &asoc->asconf_send_queue, sctp_next, nchk) {
|
||||
TAILQ_REMOVE(&asoc->asconf_send_queue, chk, sctp_next);
|
||||
if (chk->data) {
|
||||
sctp_m_freem(chk->data);
|
||||
chk->data = NULL;
|
||||
}
|
||||
if (chk->holds_key_ref)
|
||||
sctp_auth_key_release(stcb, chk->auth_keyid, SCTP_SO_LOCKED);
|
||||
sctp_free_remote_addr(chk->whoTo);
|
||||
SCTP_ZONE_FREE(SCTP_BASE_INFO(ipi_zone_chunk), chk);
|
||||
SCTP_DECR_CHK_COUNT();
|
||||
}
|
||||
TAILQ_FOREACH_SAFE(aparam, &asoc->asconf_queue, next, naparam) {
|
||||
TAILQ_REMOVE(&asoc->asconf_queue, aparam, next);
|
||||
SCTP_FREE(aparam,SCTP_M_ASC_ADDR);
|
||||
}
|
||||
TAILQ_FOREACH_SAFE(aack, &asoc->asconf_ack_sent, next, naack) {
|
||||
TAILQ_REMOVE(&asoc->asconf_ack_sent, aack, next);
|
||||
if (aack->data != NULL) {
|
||||
sctp_m_freem(aack->data);
|
||||
}
|
||||
SCTP_ZONE_FREE(SCTP_BASE_INFO(ipi_zone_asconf_ack), aack);
|
||||
}
|
||||
|
||||
|
||||
/* process the INIT-ACK info (my info) */
|
||||
asoc->my_vtag = ntohl(initack_cp->init.initiate_tag);
|
||||
asoc->my_rwnd = ntohl(initack_cp->init.a_rwnd);
|
||||
@ -2159,10 +2217,6 @@ sctp_process_cookie_new(struct mbuf *m, int iphlen, int offset,
|
||||
vrf_id, port);
|
||||
return (NULL);
|
||||
}
|
||||
/* get the correct sctp_nets */
|
||||
if (netp)
|
||||
*netp = sctp_findnet(stcb, init_src);
|
||||
|
||||
asoc = &stcb->asoc;
|
||||
/* get scope variables out of cookie */
|
||||
asoc->scope.ipv4_local_scope = cookie->ipv4_scope;
|
||||
@ -2209,7 +2263,6 @@ sctp_process_cookie_new(struct mbuf *m, int iphlen, int offset,
|
||||
/* process the INIT-ACK info (my info) */
|
||||
asoc->my_vtag = ntohl(initack_cp->init.initiate_tag);
|
||||
asoc->my_rwnd = ntohl(initack_cp->init.a_rwnd);
|
||||
asoc->pre_open_streams = ntohs(initack_cp->init.num_outbound_streams);
|
||||
asoc->init_seq_number = ntohl(initack_cp->init.initial_tsn);
|
||||
asoc->sending_seq = asoc->asconf_seq_out = asoc->str_reset_seq_out = asoc->init_seq_number;
|
||||
asoc->asconf_seq_out_acked = asoc->asconf_seq_out - 1;
|
||||
@ -2219,10 +2272,7 @@ sctp_process_cookie_new(struct mbuf *m, int iphlen, int offset,
|
||||
asoc->advanced_peer_ack_point = asoc->last_acked_seq;
|
||||
|
||||
/* process the INIT info (peer's info) */
|
||||
if (netp)
|
||||
retval = sctp_process_init(init_cp, stcb);
|
||||
else
|
||||
retval = 0;
|
||||
retval = sctp_process_init(init_cp, stcb);
|
||||
if (retval < 0) {
|
||||
atomic_add_int(&stcb->asoc.refcnt, 1);
|
||||
#if defined(__APPLE__) || defined(SCTP_SO_LOCK_TESTING)
|
||||
@ -2401,17 +2451,20 @@ sctp_process_cookie_new(struct mbuf *m, int iphlen, int offset,
|
||||
*/
|
||||
;
|
||||
}
|
||||
/* since we did not send a HB make sure we don't double things */
|
||||
if ((netp) && (*netp))
|
||||
(*netp)->hb_responded = 1;
|
||||
|
||||
if (stcb->asoc.sctp_autoclose_ticks &&
|
||||
sctp_is_feature_on(inp, SCTP_PCB_FLAGS_AUTOCLOSE)) {
|
||||
sctp_timer_start(SCTP_TIMER_TYPE_AUTOCLOSE, inp, stcb, NULL);
|
||||
}
|
||||
/* calculate the RTT */
|
||||
(void)SCTP_GETTIME_TIMEVAL(&stcb->asoc.time_entered);
|
||||
if ((netp) && (*netp)) {
|
||||
*netp = sctp_findnet(stcb, init_src);
|
||||
if (*netp != NULL) {
|
||||
/*
|
||||
* Since we did not send a HB, make sure we don't double
|
||||
* things.
|
||||
*/
|
||||
(*netp)->hb_responded = 1;
|
||||
/* Calculate the RTT. */
|
||||
(*netp)->RTO = sctp_calculate_rto(stcb, asoc, *netp,
|
||||
&cookie->time_entered, sctp_align_unsafe_makecopy,
|
||||
SCTP_RTT_FROM_NON_DATA);
|
||||
|
@ -4995,7 +4995,15 @@ sctp_aloc_assoc(struct sctp_inpcb *inp, struct sockaddr *firstaddr,
|
||||
if ((ntohs(sin->sin_port) == 0) ||
|
||||
(sin->sin_addr.s_addr == INADDR_ANY) ||
|
||||
(sin->sin_addr.s_addr == INADDR_BROADCAST) ||
|
||||
IN_MULTICAST(ntohl(sin->sin_addr.s_addr))) {
|
||||
IN_MULTICAST(ntohl(sin->sin_addr.s_addr)) ||
|
||||
#if defined(__Userspace__)
|
||||
(((inp->sctp_flags & SCTP_PCB_FLAGS_BOUND_CONN) != 0) ||
|
||||
(((inp->sctp_flags & SCTP_PCB_FLAGS_BOUND_V6) != 0) &&
|
||||
(SCTP_IPV6_V6ONLY(inp) != 0)))) {
|
||||
#else
|
||||
(((inp->sctp_flags & SCTP_PCB_FLAGS_BOUND_V6) != 0) &&
|
||||
(SCTP_IPV6_V6ONLY(inp) != 0))) {
|
||||
#endif
|
||||
/* Invalid address */
|
||||
SCTP_INP_RUNLOCK(inp);
|
||||
SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTP_PCB, EINVAL);
|
||||
@ -5014,7 +5022,8 @@ sctp_aloc_assoc(struct sctp_inpcb *inp, struct sockaddr *firstaddr,
|
||||
sin6 = (struct sockaddr_in6 *)firstaddr;
|
||||
if ((ntohs(sin6->sin6_port) == 0) ||
|
||||
IN6_IS_ADDR_UNSPECIFIED(&sin6->sin6_addr) ||
|
||||
IN6_IS_ADDR_MULTICAST(&sin6->sin6_addr)) {
|
||||
IN6_IS_ADDR_MULTICAST(&sin6->sin6_addr) ||
|
||||
((inp->sctp_flags & SCTP_PCB_FLAGS_BOUND_V6) == 0)) {
|
||||
/* Invalid address */
|
||||
SCTP_INP_RUNLOCK(inp);
|
||||
SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTP_PCB, EINVAL);
|
||||
@ -5032,7 +5041,8 @@ sctp_aloc_assoc(struct sctp_inpcb *inp, struct sockaddr *firstaddr,
|
||||
|
||||
sconn = (struct sockaddr_conn *)firstaddr;
|
||||
if ((ntohs(sconn->sconn_port) == 0) ||
|
||||
(sconn->sconn_addr == NULL)) {
|
||||
(sconn->sconn_addr == NULL) ||
|
||||
((inp->sctp_flags & SCTP_PCB_FLAGS_BOUND_CONN) == 0)) {
|
||||
/* Invalid address */
|
||||
SCTP_INP_RUNLOCK(inp);
|
||||
SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTP_PCB, EINVAL);
|
||||
|
Loading…
x
Reference in New Issue
Block a user