Przeglądaj źródła

Fixes a condition where too much data on the local clipboard causes the client to exceed the max heap size and exit. Since the server will, by default, discard clipboard transfers greater than 256KB anyway, a parameter was added which sets the default max clipboard size that the client will hold to 256KB also.

git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@5138 3789f03b-4d11-0410-bbf8-ca57d06f2519
tags/v1.3.90
Brian Hinz 10 lat temu
rodzic
commit
fefa48d3c4

+ 9
- 15
java/com/tigervnc/vncviewer/ClipboardDialog.java Wyświetl plik

@@ -57,15 +57,12 @@ class ClipboardDialog extends Dialog implements ActionListener {
pack();
}

public void initDialog() {
textArea.setText(current);
textArea.selectAll();
}

public void setContents(String str) {
current = str;
textArea.setText(str);
textArea.selectAll();
}

public String getContents() {
return textArea.getText();
}

public void serverCutText(String str, int len) {
@@ -77,13 +74,13 @@ class ClipboardDialog extends Dialog implements ActionListener {
if (cb != null) {
StringSelection ss = new StringSelection(str);
try {
cb.setContents(ss, ss);
cb.setContents(ss, null);
} catch(Exception e) {
vlog.debug(e.toString());
vlog.debug(e.getMessage());
}
}
} catch(SecurityException e) {
System.err.println("Cannot access the system clipboard");
vlog.debug("Cannot access the system clipboard: "+e.getMessage());
}
}

@@ -94,11 +91,9 @@ class ClipboardDialog extends Dialog implements ActionListener {
public void actionPerformed(ActionEvent e) {
Object s = e.getSource();
if (s instanceof JButton && (JButton)s == clearButton) {
current = "";
textArea.setText(current);
serverCutText(new String(""), 0);
} else if (s instanceof JButton && (JButton)s == sendButton) {
current = textArea.getText();
cc.writeClientCutText(current, current.length());
cc.writeClientCutText(textArea.getText(), textArea.getText().length());
endDialog();
} else if (s instanceof JButton && (JButton)s == cancelButton) {
endDialog();
@@ -106,7 +101,6 @@ class ClipboardDialog extends Dialog implements ActionListener {
}

CConn cc;
String current;
JTextArea textArea;
JButton clearButton, sendButton, cancelButton;
static LogWriter vlog = new LogWriter("ClipboardDialog");

+ 17
- 14
java/com/tigervnc/vncviewer/DesktopWindow.java Wyświetl plik

@@ -357,30 +357,33 @@ class DesktopWindow extends JPanel implements Runnable, MouseListener,
g2.dispose();
}

String oldContents = "";

public synchronized void checkClipboard() {
SecurityManager sm = System.getSecurityManager();
try {
if (sm != null) sm.checkSystemClipboardAccess();
Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
if (cb != null && cc.viewer.sendClipboard.getValue()) {
Transferable t = cb.getContents(null);
if ((t != null) && t.isDataFlavorSupported(DataFlavor.stringFlavor)) {
try {
String newContents = (String)t.getTransferData(DataFlavor.stringFlavor);
if (newContents != null && !newContents.equals(oldContents)) {
if (cb == null) return;
Transferable t = cb.getContents(null);
if ((t != null) && t.isDataFlavorSupported(DataFlavor.stringFlavor)) {
try {
String newContents = new String("");
if (t.getTransferData(DataFlavor.stringFlavor) != null) {
int len = Math.min(cc.viewer.maxCutText.getValue(),
((String)t.getTransferData(DataFlavor.stringFlavor)).length());
newContents =
((String)t.getTransferData(DataFlavor.stringFlavor)).substring(0, len);
}
if (!newContents.equals(cc.clipboardDialog.getContents())) {
if (cc.viewer.sendClipboard.getValue())
cc.writeClientCutText(newContents, newContents.length());
oldContents = newContents;
cc.clipboardDialog.setContents(newContents);
}
} catch(java.lang.Exception e) {
System.out.println("Exception getting clipboard data: " + e.getMessage());
cc.clipboardDialog.setContents(newContents);
}
} catch(java.lang.Exception e) {
vlog.debug("Exception getting clipboard data: " + e.getMessage());
}
}
} catch(SecurityException e) {
System.err.println("Cannot access the system clipboard");
vlog.debug("Cannot access the system clipboard");
}
}


+ 4
- 0
java/com/tigervnc/vncviewer/VncViewer.java Wyświetl plik

@@ -460,6 +460,10 @@ public class VncViewer extends java.applet.Applet implements Runnable
= new BoolParameter("SendClipboard",
"Send clipboard changes to the server",
true);
IntParameter maxCutText
= new IntParameter("MaxCutText",
"Maximum permitted length of an outgoing clipboard update",
262144);
StringParameter menuKey
= new StringParameter("MenuKey",
"The key which brings up the popup menu",

Ładowanie…
Anuluj
Zapisz