aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jesse Hallett <jesse@galois.com>2013-12-18 13:53:51 -0800
committerGravatar Jesse Hallett <jesse@galois.com>2013-12-18 13:59:07 -0800
commit7ead4cef0a6f9621d76997fbced49dab3df51cfb (patch)
tree526c89b149565c11ae0654049fec2bab6d902c85
parent6c8db8b9bd08a24b099b5061385b095c3d51b9b2 (diff)
Avoids traversing frames from different origins
Attempting to access the document of a frame loaded from an different origin than the page was loaded from results in an exception.
-rw-r--r--src/js/fiveui/injected/prelude.js20
1 files changed, 16 insertions, 4 deletions
diff --git a/src/js/fiveui/injected/prelude.js b/src/js/fiveui/injected/prelude.js
index 250488f..af98341 100644
--- a/src/js/fiveui/injected/prelude.js
+++ b/src/js/fiveui/injected/prelude.js
@@ -19,6 +19,8 @@
* limitations under the License.
*/
+/*global $5: true */
+
/**
* The FiveUI Prelude.
*
@@ -64,7 +66,9 @@ fiveui.query = function (sel, context) {
var ctx = context || document;
var $results = jQuery(sel, ctx);
- jQuery('iframe, frame', ctx).each(
+ jQuery('iframe, frame', ctx)
+ .filter(function(idx, frame) { return sameOrigin(frame); })
+ .each(
function(idx, elt) {
var $tempResults;
if (elt.contentDocument) {
@@ -89,6 +93,14 @@ fiveui.query = function (sel, context) {
fiveui.stats.numElts += $filteredResults.length;
return $filteredResults;
+
+ // Frames are considered to be from the same origin if their location
+ // hosts, ports, and schemes are the same.
+ function sameOrigin(frame) {
+ var src = frame.src;
+ var origin = window.location.origin;
+ return src.indexOf(origin) === 0 && src.charAt(origin.length) !== ':';
+ }
};
/**
@@ -287,7 +299,7 @@ fiveui.color.rgbToHex = function (r, g, b) {
};
/**
- * Convert a 3-byte hex value to base-10 RGB
+ * Convert a 3-byte hex value to base-10 RGB
*/
fiveui.color.hexToRGB = function (hex) {
var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
@@ -421,7 +433,7 @@ fiveui.color.contrast = function(lum1, lum2) {
/**
* Computationally determine the actual displayed background color for
- * an object. This accounts for parent colors that may appear when
+ * an object. This accounts for parent colors that may appear when
* a bg color is unspecified, or fully transparent.
*
* It does not account for elements that are shifted out of their
@@ -476,7 +488,7 @@ fiveui.color.findBGColor = function(obj) {
/**
* Combines two colors, accounting for alpha values less than 1.
- *
+ *
* @param {color} top The color "on top"
* @param {color} bot The color "on bottom"
* @return {color} the composite RGBA color.