Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGrant Gayed2011-08-08 18:20:16 +0000
committerGrant Gayed2011-08-08 18:20:16 +0000
commit186676f1d2971f22d8b4e8719af64e820e2bf3a4 (patch)
tree3235693c01138c5cb3406ad27d865921fe22d4ce
parent15c44de917581dd8d95cec9b081ec7ed327edf65 (diff)
downloadeclipse.platform.swt-186676f1d2971f22d8b4e8719af64e820e2bf3a4.tar.gz
eclipse.platform.swt-186676f1d2971f22d8b4e8719af64e820e2bf3a4.tar.xz
eclipse.platform.swt-186676f1d2971f22d8b4e8719af64e820e2bf3a4.zip
Bug 352383 - increase BrowserFunction security token to 128 bits
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/BrowserFunction.java11
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/WebBrowser.java4
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/WebSite.java6
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/External.java6
-rw-r--r--[-rwxr-xr-x]bundles/org.eclipse.swt/Eclipse SWT WebKit/carbon/org/eclipse/swt/browser/WebKit.java9
-rw-r--r--[-rwxr-xr-x]bundles/org.eclipse.swt/Eclipse SWT WebKit/cocoa/org/eclipse/swt/browser/WebKit.java6
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/browser/WebKit.java6
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/browser/WebKit.java6
8 files changed, 31 insertions, 23 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/BrowserFunction.java b/bundles/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/BrowserFunction.java
index b77ed222bf..8871856845 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/BrowserFunction.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/BrowserFunction.java
@@ -48,7 +48,7 @@ public class BrowserFunction {
String functionString;
int index;
boolean isEvaluate;
- long token;
+ String token;
/**
* Constructs a new instance of this class, which will be invokable
@@ -88,8 +88,13 @@ BrowserFunction (Browser browser, String name, boolean create) {
this.name = name;
Random random = new Random ();
- long value = random.nextLong ();
- token = ((value & 0xFFE0000000000000L) >>> 11) ^ (value & 0x1FFFFFFFFFFFFFL);
+ byte[] bytes = new byte[16];
+ random.nextBytes (bytes);
+ StringBuffer buffer = new StringBuffer ();
+ for (int i = 0; i < bytes.length; i++) {
+ buffer.append (Integer.toHexString (bytes[i] & 0xff));
+ }
+ token = buffer.toString ();
if (create) browser.webBrowser.createFunction (this);
}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/WebBrowser.java b/bundles/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/WebBrowser.java
index 31dd96b6ed..1c828e4eb0 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/WebBrowser.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/WebBrowser.java
@@ -339,9 +339,9 @@ public void createFunction (BrowserFunction function) {
buffer.append (function.name);
buffer.append ("() {var result = window.external.callJava("); //$NON-NLS-1$
buffer.append (function.index);
- buffer.append (',');
+ buffer.append (",'"); //$NON-NLS-1$
buffer.append (function.token);
- buffer.append (",Array.prototype.slice.call(arguments)); if (typeof result == 'string' && result.indexOf('"); //$NON-NLS-1$
+ buffer.append ("',Array.prototype.slice.call(arguments)); if (typeof result == 'string' && result.indexOf('"); //$NON-NLS-1$
buffer.append (ERROR_ID);
buffer.append ("') == 0) {var error = new Error(result.substring("); //$NON-NLS-1$
buffer.append (ERROR_ID.length ());
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/WebSite.java b/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/WebSite.java
index 81413c1093..ed5703ea07 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/WebSite.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/WebSite.java
@@ -740,21 +740,21 @@ int Invoke (int dispIdMember, int /*long*/ riid, int lcid, int dwFlags, int /*lo
ptr = dispParams.rgvarg + Variant.sizeof;
variant = Variant.win32_new (ptr);
int type = variant.getType ();
- if (type != COM.VT_I4 && type != COM.VT_R8) {
+ if (type != COM.VT_BSTR) {
variant.dispose ();
if (pVarResult != 0) {
COM.MoveMemory (pVarResult, new int /*long*/[] {0}, C.PTR_SIZEOF);
}
return COM.S_OK;
}
- long token = variant.getLong ();
+ String token = variant.getString ();
variant.dispose ();
variant = Variant.win32_new (dispParams.rgvarg);
Object key = new Integer (index);
BrowserFunction function = (BrowserFunction)functions.get (key);
Object returnValue = null;
- if (function != null && token == function.token) {
+ if (function != null && token.equals (function.token)) {
try {
Object temp = convertToJava (variant);
if (temp instanceof Object[]) {
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/External.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/External.java
index f971969a1a..cd195fc2e1 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/External.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/External.java
@@ -554,9 +554,9 @@ int callJava (int functionId, int /*long*/ tokenVariant, int /*long*/ args, int
if (rc != XPCOM.NS_OK) Mozilla.error (rc);
Object temp = convertToJava (variant, type[0]);
type[0] = 0;
- if (temp instanceof Number) {
- long token = ((Number)temp).longValue ();
- if (token == function.token) {
+ if (temp instanceof String) {
+ String token = (String)temp;
+ if (token.equals (function.token)) {
variant = new nsIVariant (args);
rc = variant.GetDataType (type);
if (rc != XPCOM.NS_OK) Mozilla.error (rc);
diff --git a/bundles/org.eclipse.swt/Eclipse SWT WebKit/carbon/org/eclipse/swt/browser/WebKit.java b/bundles/org.eclipse.swt/Eclipse SWT WebKit/carbon/org/eclipse/swt/browser/WebKit.java
index 3d223835a3..b824c7b503 100755..100644
--- a/bundles/org.eclipse.swt/Eclipse SWT WebKit/carbon/org/eclipse/swt/browser/WebKit.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT WebKit/carbon/org/eclipse/swt/browser/WebKit.java
@@ -2169,11 +2169,14 @@ int /*long*/ callJava (int /*long*/ index, int /*long*/ token, int /*long*/ args
Object returnValue = null;
if (Cocoa.objc_msgSend (index, Cocoa.S_isKindOfClass, Cocoa.C_NSNumber) != 0) {
int functionIndex = Cocoa.objc_msgSend (index, Cocoa.S_intValue);
- if (Cocoa.objc_msgSend (token, Cocoa.S_isKindOfClass, Cocoa.C_NSNumber) != 0) {
- long tokenValue = (long)Cocoa.objc_msgSend_fpret (token, Cocoa.S_doubleValue);
+ if (Cocoa.objc_msgSend (token, Cocoa.S_isKindOfClass, Cocoa.C_NSString) != 0) {
+ int length = Cocoa.objc_msgSend (token, Cocoa.S_length);
+ char[] buffer = new char[length];
+ Cocoa.objc_msgSend (token, Cocoa.S_getCharacters_, buffer);
+ String tokenString = new String (buffer);
Object key = new Integer (functionIndex);
BrowserFunction function = (BrowserFunction)functions.get (key);
- if (function != null && tokenValue == function.token) {
+ if (function != null && tokenString.equals (function.token)) {
try {
Object temp = convertToJava (args);
if (temp instanceof Object[]) {
diff --git a/bundles/org.eclipse.swt/Eclipse SWT WebKit/cocoa/org/eclipse/swt/browser/WebKit.java b/bundles/org.eclipse.swt/Eclipse SWT WebKit/cocoa/org/eclipse/swt/browser/WebKit.java
index 032bdb2120..6da746ac1d 100755..100644
--- a/bundles/org.eclipse.swt/Eclipse SWT WebKit/cocoa/org/eclipse/swt/browser/WebKit.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT WebKit/cocoa/org/eclipse/swt/browser/WebKit.java
@@ -1765,11 +1765,11 @@ NSObject callJava (int /*long*/ index, int /*long*/ token, int /*long*/ args, in
NSNumber number = new NSNumber (index);
Object key = new Integer (number.intValue ());
object = new NSObject (token);
+ clazz = OS.objc_lookUpClass ("NSString"); //$NON-NLS-1$
if (object.isKindOfClass (clazz)) {
- number = new NSNumber (token);
- long tokenValue = (long)number.doubleValue ();
+ NSString tokenString = new NSString (token);
BrowserFunction function = (BrowserFunction)functions.get (key);
- if (function != null && tokenValue == function.token) {
+ if (function != null && tokenString.getString ().equals (function.token)) {
try {
Object temp = convertToJava (args);
if (temp instanceof Object[]) {
diff --git a/bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/browser/WebKit.java b/bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/browser/WebKit.java
index 727a9ed451..087bd2247f 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/browser/WebKit.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT WebKit/gtk/org/eclipse/swt/browser/WebKit.java
@@ -1751,10 +1751,10 @@ int /*long*/ callJava (int /*long*/ ctx, int /*long*/ func, int /*long*/ thisObj
Object key = new Integer (index);
C.memmove (result, arguments + C.PTR_SIZEOF, C.PTR_SIZEOF);
type = WebKitGTK.JSValueGetType (ctx, result[0]);
- if (type == WebKitGTK.kJSTypeNumber) {
- long token = ((Double)convertToJava (ctx, result[0])).longValue ();
+ if (type == WebKitGTK.kJSTypeString) {
+ String token = (String)convertToJava (ctx, result[0]);
BrowserFunction function = (BrowserFunction)functions.get (key);
- if (function != null && token == function.token) {
+ if (function != null && token.equals (function.token)) {
try {
C.memmove (result, arguments + 2 * C.PTR_SIZEOF, C.PTR_SIZEOF);
Object temp = convertToJava (ctx, result[0]);
diff --git a/bundles/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/browser/WebKit.java b/bundles/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/browser/WebKit.java
index a68b060a22..1bc1a4e3ba 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/browser/WebKit.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/browser/WebKit.java
@@ -385,10 +385,10 @@ int /*long*/ callJava (int /*long*/ ctx, int /*long*/ func, int /*long*/ thisObj
Object key = new Integer (index);
C.memmove (result, arguments + C.PTR_SIZEOF, C.PTR_SIZEOF);
type = WebKit_win32.JSValueGetType (ctx, result[0]);
- if (type == WebKit_win32.kJSTypeNumber) {
- long token = ((Double)convertToJava (ctx, result[0])).longValue ();
+ if (type == WebKit_win32.kJSTypeString) {
+ String token = (String)convertToJava (ctx, result[0]);
BrowserFunction function = (BrowserFunction)functions.get (key);
- if (function != null && token == function.token) {
+ if (function != null && token.equals (function.token)) {
try {
C.memmove (result, arguments + 2 * C.PTR_SIZEOF, C.PTR_SIZEOF);
Object temp = convertToJava (ctx, result[0]);

Back to the top