diff options
author | Grant Gayed | 2011-08-08 18:20:16 +0000 |
---|---|---|
committer | Grant Gayed | 2011-08-08 18:20:16 +0000 |
commit | 186676f1d2971f22d8b4e8719af64e820e2bf3a4 (patch) | |
tree | 3235693c01138c5cb3406ad27d865921fe22d4ce | |
parent | 15c44de917581dd8d95cec9b081ec7ed327edf65 (diff) | |
download | eclipse.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
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]); |