diff options
author | martin <martin@pkgsrc.org> | 2015-02-14 07:59:24 +0000 |
---|---|---|
committer | martin <martin@pkgsrc.org> | 2015-02-14 07:59:24 +0000 |
commit | f03cb6f9c32cd683ac0d2bab821fcc7954851415 (patch) | |
tree | 2ca37aa33001feeecf72bbdccdf5d33683ae3ad1 /www | |
parent | 23aeed5922574c19ca7e0d64d8a1c6789db9f083 (diff) | |
download | pkgsrc-f03cb6f9c32cd683ac0d2bab821fcc7954851415.tar.gz |
Another try at proper alignment fixes for http2 sessions
Diffstat (limited to 'www')
-rw-r--r-- | www/firefox/Makefile | 4 | ||||
-rw-r--r-- | www/firefox/distinfo | 4 | ||||
-rw-r--r-- | www/firefox/patches/patch-netwerk_base_public_nsNetUtil.h | 42 | ||||
-rw-r--r-- | www/firefox/patches/patch-netwerk_protocol_http_Http2Session.cpp | 94 |
4 files changed, 141 insertions, 3 deletions
diff --git a/www/firefox/Makefile b/www/firefox/Makefile index 97b73942a84..f37668c47f1 100644 --- a/www/firefox/Makefile +++ b/www/firefox/Makefile @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.192 2015/02/12 13:50:22 wiz Exp $ +# $NetBSD: Makefile,v 1.193 2015/02/14 07:59:24 martin Exp $ FIREFOX_VER= ${MOZ_BRANCH}${MOZ_BRANCH_MINOR} MOZ_BRANCH= 35.0 @@ -6,7 +6,7 @@ MOZ_BRANCH_MINOR= .1 DISTNAME= firefox-${FIREFOX_VER}.source PKGNAME= firefox-${MOZ_BRANCH}${MOZ_BRANCH_MINOR:S/b/beta/:S/esr//} -PKGREVISION= 3 +PKGREVISION= 4 CATEGORIES= www MASTER_SITES= ${MASTER_SITE_MOZILLA:=firefox/releases/${FIREFOX_VER}/source/} MASTER_SITES+= ${MASTER_SITE_MOZILLA_ALL:=firefox/releases/${FIREFOX_VER}/source/} diff --git a/www/firefox/distinfo b/www/firefox/distinfo index afea72a94aa..da9d4a02dc3 100644 --- a/www/firefox/distinfo +++ b/www/firefox/distinfo @@ -1,4 +1,4 @@ -$NetBSD: distinfo,v 1.184 2015/02/12 13:50:22 wiz Exp $ +$NetBSD: distinfo,v 1.185 2015/02/14 07:59:24 martin Exp $ SHA1 (firefox-35.0.1.source.tar.bz2) = cf256ee1491ee502eb4432ade5a879104ebceede RMD160 (firefox-35.0.1.source.tar.bz2) = ca4dc6f6c5de1e6e69133de3b8b502991d519fa7 @@ -117,8 +117,10 @@ SHA1 (patch-mfbt_Alignment.h) = 9ebc9892fd11eba7105974979b54f4f8759b7749 SHA1 (patch-mfbt_Attributes.h) = 0cf62084c0220a3fa46226714cea5c30b1b155e9 SHA1 (patch-mfbt_Poison.cpp) = f502581db96b3e5eca25a9aa9035f436e9167503 SHA1 (patch-modules_libjar_nsZipArchive.cpp) = 6aff0f8ed42575d8ca36a524e12e9a1f7351004a +SHA1 (patch-netwerk_base_public_nsNetUtil.h) = 764c6b776f7f9b38d260fb866eddf15f38bd5050 SHA1 (patch-netwerk_dns_Makefile.in) = b6bd9814d909dd6f7cff10dbeac3bedd79c2508e SHA1 (patch-netwerk_dns_moz.build) = 01dd7d9094ddaeffbcd6cfa296e28fb56681b0e6 +SHA1 (patch-netwerk_protocol_http_Http2Session.cpp) = 3e8904ef4c7ac3ab8a821ed82e5ca55484ecfb55 SHA1 (patch-netwerk_wifi_moz.build) = 7c84003d442f698b030f3fef91fea2f5537b404c SHA1 (patch-netwerk_wifi_nsWifiScannerFreeBSD.cpp) = d43961a396bccc6bbe1dba2b4c1f97d5017c6d6d SHA1 (patch-pb) = 97c9b2e4cefd524dc6ba825f71c3da2a761aa1f4 diff --git a/www/firefox/patches/patch-netwerk_base_public_nsNetUtil.h b/www/firefox/patches/patch-netwerk_base_public_nsNetUtil.h new file mode 100644 index 00000000000..5c67b7aeb64 --- /dev/null +++ b/www/firefox/patches/patch-netwerk_base_public_nsNetUtil.h @@ -0,0 +1,42 @@ +$NetBSD: patch-netwerk_base_public_nsNetUtil.h,v 1.1 2015/02/14 07:59:24 martin Exp $ + +https://bugzilla.mozilla.org/show_bug.cgi?id=1130822 +Fix obivous alignment issues (causing crashes on some architectures). + +--- netwerk/base/public/nsNetUtil.h.orig 2015-01-23 07:00:06.000000000 +0100 ++++ netwerk/base/public/nsNetUtil.h 2015-02-13 08:51:18.000000000 +0100 +@@ -13,6 +13,7 @@ + #include "nsMemory.h" + #include "nsCOMPtr.h" + #include "prio.h" // for read/write flags, permissions, etc. ++#include "prnetdb.h" + #include "nsHashKeys.h" + + #include "plstr.h" +@@ -2717,6 +2718,26 @@ + bool NS_IsReasonableHTTPHeaderValue(const nsACString& aValue); + + /** ++ * Return a host endian value decoded from network byte order, ++ * accessed in an alignement safe way. ++ */ ++inline uint16_t NS_decodeN16(const void *bytes) ++{ ++ uint16_t tmp; ++ ++ memcpy(&tmp, bytes, sizeof tmp); ++ return PR_ntohs(tmp); ++} ++ ++inline uint32_t NS_decodeN32(const void *bytes) ++{ ++ uint32_t tmp; ++ ++ memcpy(&tmp, bytes, sizeof tmp); ++ return PR_ntohl(tmp); ++} ++ ++/** + * Return true if the given string is a valid HTTP token per RFC 2616 section + * 2.2. + */ diff --git a/www/firefox/patches/patch-netwerk_protocol_http_Http2Session.cpp b/www/firefox/patches/patch-netwerk_protocol_http_Http2Session.cpp new file mode 100644 index 00000000000..b65ecc4aad9 --- /dev/null +++ b/www/firefox/patches/patch-netwerk_protocol_http_Http2Session.cpp @@ -0,0 +1,94 @@ +$NetBSD: patch-netwerk_protocol_http_Http2Session.cpp,v 1.3 2015/02/14 07:59:24 martin Exp $ + +https://bugzilla.mozilla.org/show_bug.cgi?id=1130822 +Fix obivous alignment issues (causing crashes on some architectures). + +--- netwerk/protocol/http/Http2Session.cpp.orig 2015-01-23 07:00:06.000000000 +0100 ++++ netwerk/protocol/http/Http2Session.cpp 2015-02-13 08:50:19.000000000 +0100 +@@ -30,7 +30,6 @@ + #include "nsISSLStatusProvider.h" + #include "nsISupportsPriority.h" + #include "prprf.h" +-#include "prnetdb.h" + #include "sslt.h" + + #ifdef DEBUG +@@ -1289,7 +1288,7 @@ + return rv; + + uint32_t newPriorityDependency = +- PR_ntohl(*reinterpret_cast<uint32_t *>(self->mInputFrameBuffer.get() + kFrameHeaderBytes)); ++ NS_decodeN32(self->mInputFrameBuffer.get() + kFrameHeaderBytes); + bool exclusive = !!(newPriorityDependency & 0x80000000); + newPriorityDependency &= 0x7fffffff; + uint8_t newPriorityWeight = *(self->mInputFrameBuffer.get() + kFrameHeaderBytes + 4); +@@ -1320,7 +1319,7 @@ + } + + self->mDownstreamRstReason = +- PR_ntohl(*reinterpret_cast<uint32_t *>(self->mInputFrameBuffer.get() + kFrameHeaderBytes)); ++ NS_decodeN32(self->mInputFrameBuffer.get() + kFrameHeaderBytes); + + LOG3(("Http2Session::RecvRstStream %p RST_STREAM Reason Code %u ID %x\n", + self, self->mDownstreamRstReason, self->mInputFrameID)); +@@ -1381,8 +1380,8 @@ + uint8_t *setting = reinterpret_cast<uint8_t *> + (self->mInputFrameBuffer.get()) + kFrameHeaderBytes + index * 6; + +- uint16_t id = PR_ntohs(*reinterpret_cast<uint16_t *>(setting)); +- uint32_t value = PR_ntohl(*reinterpret_cast<uint32_t *>(setting + 2)); ++ uint16_t id = NS_decodeN16(setting); ++ uint32_t value = NS_decodeN32(setting + 2); + LOG3(("Settings ID %u, Value %u", id, value)); + + switch (id) +@@ -1467,7 +1466,7 @@ + } + promiseLen = 4; + promisedID = +- PR_ntohl(*reinterpret_cast<uint32_t *>(self->mInputFrameBuffer.get() + kFrameHeaderBytes + paddingControlBytes)); ++ NS_decodeN32(self->mInputFrameBuffer.get() + kFrameHeaderBytes + paddingControlBytes); + promisedID &= 0x7fffffff; + } + +@@ -1702,11 +1701,11 @@ + + self->mShouldGoAway = true; + self->mGoAwayID = +- PR_ntohl(*reinterpret_cast<uint32_t *>(self->mInputFrameBuffer.get() + kFrameHeaderBytes)); ++ NS_decodeN32(self->mInputFrameBuffer.get() + kFrameHeaderBytes); + self->mGoAwayID &= 0x7fffffff; + self->mCleanShutdown = true; + uint32_t statusCode = +- PR_ntohl(*reinterpret_cast<uint32_t *>(self->mInputFrameBuffer.get() + kFrameHeaderBytes + 4)); ++ NS_decodeN32(self->mInputFrameBuffer.get() + kFrameHeaderBytes + 4); + + // Find streams greater than the last-good ID and mark them for deletion + // in the mGoAwayStreamsToRestart queue with the GoAwayEnumerator. The +@@ -1772,7 +1771,7 @@ + } + + uint32_t delta = +- PR_ntohl(*reinterpret_cast<uint32_t *>(self->mInputFrameBuffer.get() + kFrameHeaderBytes)); ++ NS_decodeN32(self->mInputFrameBuffer.get() + kFrameHeaderBytes); + delta &= 0x7fffffff; + + LOG3(("Http2Session::RecvWindowUpdate %p len=%d Stream 0x%X.\n", +@@ -2416,7 +2415,7 @@ + + // 3 bytes of length, 1 type byte, 1 flag byte, 1 unused bit, 31 bits of ID + uint8_t totallyWastedByte = mInputFrameBuffer.get()[0]; +- mInputFrameDataSize = PR_ntohs(*reinterpret_cast<uint16_t *>(mInputFrameBuffer.get() + 1)); ++ mInputFrameDataSize = NS_decodeN16(mInputFrameBuffer.get() + 1); + if (totallyWastedByte || (mInputFrameDataSize > kMaxFrameData)) { + LOG3(("Got frame too large 0x%02X%04X", totallyWastedByte, mInputFrameDataSize)); + RETURN_SESSION_ERROR(this, PROTOCOL_ERROR); +@@ -2424,7 +2423,7 @@ + mInputFrameType = *reinterpret_cast<uint8_t *>(mInputFrameBuffer.get() + kFrameLengthBytes); + mInputFrameFlags = *reinterpret_cast<uint8_t *>(mInputFrameBuffer.get() + kFrameLengthBytes + kFrameTypeBytes); + mInputFrameID = +- PR_ntohl(*reinterpret_cast<uint32_t *>(mInputFrameBuffer.get() + kFrameLengthBytes + kFrameTypeBytes + kFrameFlagBytes)); ++ NS_decodeN32(mInputFrameBuffer.get() + kFrameLengthBytes + kFrameTypeBytes + kFrameFlagBytes); + mInputFrameID &= 0x7fffffff; + mInputFrameDataRead = 0; + |