summaryrefslogtreecommitdiff
path: root/waterfox/mozilla-1436242.patch
diff options
context:
space:
mode:
authorB Stack <bgstack15@gmail.com>2018-09-14 11:39:42 -0400
committerB Stack <bgstack15@gmail.com>2018-09-14 11:39:42 -0400
commit4ecb6db04ce862ec1b8a88db5daef0eda7c7a05d (patch)
tree512b8eae0c2ef46e9debfe96af748b308deb27c4 /waterfox/mozilla-1436242.patch
parentMerge branch 'add-ublock' into 'master' (diff)
downloadstackrpms-4ecb6db04ce862ec1b8a88db5daef0eda7c7a05d.tar.gz
stackrpms-4ecb6db04ce862ec1b8a88db5daef0eda7c7a05d.tar.bz2
stackrpms-4ecb6db04ce862ec1b8a88db5daef0eda7c7a05d.zip
bring in chinforpms/waterfox
Diffstat (limited to 'waterfox/mozilla-1436242.patch')
-rw-r--r--waterfox/mozilla-1436242.patch56
1 files changed, 56 insertions, 0 deletions
diff --git a/waterfox/mozilla-1436242.patch b/waterfox/mozilla-1436242.patch
new file mode 100644
index 0000000..570b7c5
--- /dev/null
+++ b/waterfox/mozilla-1436242.patch
@@ -0,0 +1,56 @@
+
+# HG changeset patch
+# User Jed Davis <jld@mozilla.com>
+# Date 1526943705 21600
+# Node ID 6bb3adfa15c6877f7874429462dad88f8c978c4f
+# Parent 4c71c8454879c841871ecf3afb7dbdc96bad97fc
+Bug 1436242 - Avoid undefined behavior in IPC fd-passing code. r=froydnj
+
+MozReview-Commit-ID: 3szIPUssgF5
+
+diff --git a/ipc/chromium/src/chrome/common/ipc_channel_posix.cc b/ipc/chromium/src/chrome/common/ipc_channel_posix.cc
+--- a/ipc/chromium/src/chrome/common/ipc_channel_posix.cc
++++ b/ipc/chromium/src/chrome/common/ipc_channel_posix.cc
+@@ -418,20 +418,37 @@ bool Channel::ChannelImpl::ProcessIncomi
+ const int* fds;
+ unsigned num_fds;
+ unsigned fds_i = 0; // the index of the first unused descriptor
+
+ if (input_overflow_fds_.empty()) {
+ fds = wire_fds;
+ num_fds = num_wire_fds;
+ } else {
+- const size_t prev_size = input_overflow_fds_.size();
+- input_overflow_fds_.resize(prev_size + num_wire_fds);
+- memcpy(&input_overflow_fds_[prev_size], wire_fds,
+- num_wire_fds * sizeof(int));
++ // This code may look like a no-op in the case where
++ // num_wire_fds == 0, but in fact:
++ //
++ // 1. wire_fds will be nullptr, so passing it to memcpy is
++ // undefined behavior according to the C standard, even though
++ // the memcpy length is 0.
++ //
++ // 2. prev_size will be an out-of-bounds index for
++ // input_overflow_fds_; this is undefined behavior according to
++ // the C++ standard, even though the element only has its
++ // pointer taken and isn't accessed (and the corresponding
++ // operation on a C array would be defined).
++ //
++ // UBSan makes #1 a fatal error, and assertions in libstdc++ do
++ // the same for #2 if enabled.
++ if (num_wire_fds > 0) {
++ const size_t prev_size = input_overflow_fds_.size();
++ input_overflow_fds_.resize(prev_size + num_wire_fds);
++ memcpy(&input_overflow_fds_[prev_size], wire_fds,
++ num_wire_fds * sizeof(int));
++ }
+ fds = &input_overflow_fds_[0];
+ num_fds = input_overflow_fds_.size();
+ }
+
+ // The data for the message we're currently reading consists of any data
+ // stored in incoming_message_ followed by data in input_buf_ (followed by
+ // other messages).
+
+
bgstack15