Fix getContentsAsync() with invalid characters

This commit is contained in:
Dan Stillman 2015-06-02 20:32:31 -04:00
parent 424cae173b
commit 20ca8edf87
4 changed files with 20 additions and 2 deletions

View file

@ -210,9 +210,9 @@ Zotero.File = new function(){
var options = {
charset: charset ? charset : "UTF-8",
// This doesn't seem to work -- reading an image file still throws NS_ERROR_ILLEGAL_INPUT
replacement: "\uFFFD"
replacement: 65533
};
var deferred = Zotero.Promise.defer();
NetUtil.asyncFetch(source, function(inputStream, status) {
if (!Components.isSuccessCode(status)) {

View file

@ -0,0 +1 @@
A®B

View file

@ -0,0 +1 @@
A犬B

View file

@ -4,6 +4,22 @@ describe("Zotero.File", function () {
var path = OS.Path.join(getTestDataDirectory().path, "empty");
assert.equal((yield Zotero.File.getContentsAsync(path)), "");
})
it("should handle an extended character", function* () {
var contents = yield Zotero.File.getContentsAsync(
OS.Path.join(getTestDataDirectory().path, "utf8Char.txt")
);
assert.lengthOf(contents, 3);
assert.equal(contents, "A\u72acB");
})
it("should handle an invalid character", function* () {
var contents = yield Zotero.File.getContentsAsync(
OS.Path.join(getTestDataDirectory().path, "invalidChar.txt")
);
assert.lengthOf(contents, 3);
assert.equal(contents, "A\uFFFDB");
})
})
describe("#copyDirectory()", function () {