Bug 673301, crash using non-string data with text/plain drags, r=josh

This commit is contained in:
Neil Deakin 2011-08-18 09:22:52 -04:00
Родитель 38ac18531e
Коммит 29b125897b
4 изменённых файлов: 39 добавлений и 3 удалений

Просмотреть файл

@ -53,8 +53,8 @@ function testCopyPaste () {
function copySelectionToClipboard() { function copySelectionToClipboard() {
documentViewer.copySelection(); documentViewer.copySelection();
is(clipboard.hasDataMatchingFlavors(["text/unicode"], 1,1), true); ok(clipboard.hasDataMatchingFlavors(["text/unicode"], 1,1), "check text/unicode");
is(clipboard.hasDataMatchingFlavors(["text/html"], 1,1), true); ok(clipboard.hasDataMatchingFlavors(["text/html"], 1,1), "check text/html");
} }
function copyToClipboard(node) { function copyToClipboard(node) {
textarea.blur(); textarea.blur();

Просмотреть файл

@ -428,8 +428,13 @@ nsClipboard::PasteboardDictFromTransferable(nsITransferable* aTransferable)
nsCOMPtr<nsISupports> genericDataWrapper; nsCOMPtr<nsISupports> genericDataWrapper;
rv = aTransferable->GetTransferData(flavorStr, getter_AddRefs(genericDataWrapper), &dataSize); rv = aTransferable->GetTransferData(flavorStr, getter_AddRefs(genericDataWrapper), &dataSize);
nsPrimitiveHelpers::CreateDataFromPrimitive(flavorStr, genericDataWrapper, &data, dataSize); nsPrimitiveHelpers::CreateDataFromPrimitive(flavorStr, genericDataWrapper, &data, dataSize);
NSString* nativeString;
if (data)
nativeString = [NSString stringWithCharacters:(const unichar*)data length:(dataSize / sizeof(PRUnichar))];
else
nativeString = [NSString string];
NSString* nativeString = [NSString stringWithCharacters:(const unichar*)data length:(dataSize / sizeof(PRUnichar))];
// be nice to Carbon apps, normalize the receiver's contents using Form C. // be nice to Carbon apps, normalize the receiver's contents using Form C.
nativeString = [nativeString precomposedStringWithCanonicalMapping]; nativeString = [nativeString precomposedStringWithCanonicalMapping];

Просмотреть файл

@ -110,6 +110,7 @@ _CHROME_FILES += native_menus_window.xul \
test_key_event_counts.xul \ test_key_event_counts.xul \
test_bug596600.xul \ test_bug596600.xul \
window_bug596600.xul \ window_bug596600.xul \
test_bug673301.xul \
$(NULL) $(NULL)
endif endif

Просмотреть файл

@ -0,0 +1,30 @@
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css"
type="text/css"?>
<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="application/javascript" src="chrome://mochikit/content/MochiKit/packed.js"/>
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>
<body xmlns="http://www.w3.org/1999/xhtml">
<p id="display"></p>
<div id="content" style="display: none"/>
</body>
<script type="application/javascript">
var clipboard = Components.classes["@mozilla.org/widget/clipboard;1"]
.getService(Components.interfaces.nsIClipboard);
var transferable = Components.classes['@mozilla.org/widget/transferable;1']
.createInstance(Components.interfaces.nsITransferable);
transferable.addDataFlavor("text/unicode");
transferable.setTransferData("text/unicode", document, 4);
clipboard.setData(transferable, null, Components.interfaces.nsIClipboard.kGlobalClipboard);
SimpleTest.ok(true, "Didn't crash setting non-text data for text/unicode type");
</script>
</window>