Use hex-encoded MD5 of fileBaseName if it is in malformed URI sequence.

If the final component of URI can't be decoded with
decodeURIComponent(), Zotero fails to capture a web page,
because Zotero.Attachments._getFileNameFromURL() fails
with 'malformed URI sequence' error.

If we got 'malformed URI sequence' error,
try hex-encoded MD5 of URI's basename instead.

Signed-off-by: SASAKI Suguru <sss.sonik@gmail.com>
This commit is contained in:
SASAKI Suguru 2012-07-04 19:37:49 +09:00
parent 695cb47106
commit 37b65d70f8

View file

@ -1164,8 +1164,24 @@ Zotero.Attachments = new function(){
nsIURL.fileBaseName = nsIURL.fileBaseName + '.' + tld;
}
// Unencode fileBaseName
var decodedFileBaseName;
try {
decodedFileBaseName = decodeURIComponent(nsIURL.fileBaseName);
}
catch (e) {
if (e.name == 'URIError') {
// If we got a 'malformed URI sequence' while decoding,
// try MD5 (in hex string) of fileBaseName.
decodedFileBaseName = Zotero.Utilities.Internal.md5(nsIURL.fileBaseName, false);
}
else {
throw e;
}
}
// Pass unencoded name to getValidFileName() so that '%20' isn't stripped to '20'
nsIURL.fileBaseName = Zotero.File.getValidFileName(decodeURIComponent(nsIURL.fileBaseName));
nsIURL.fileBaseName = Zotero.File.getValidFileName(decodedFileBaseName);
return decodeURIComponent(nsIURL.fileName);
}