summaryrefslogtreecommitdiffstats
path: root/bundles/org.eclipse.swt/Eclipse SWT Browser
diff options
context:
space:
mode:
authorGrant Gayed <grant_gayed@ca.ibm.com>2011-08-08 14:20:16 -0400
committerGrant Gayed <grant_gayed@ca.ibm.com>2011-08-08 14:20:16 -0400
commit186676f1d2971f22d8b4e8719af64e820e2bf3a4 (patch)
tree3235693c01138c5cb3406ad27d865921fe22d4ce /bundles/org.eclipse.swt/Eclipse SWT Browser
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
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT Browser')
-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
3 files changed, 13 insertions, 8 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[]) {