-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix bug where directory name cannot be nonalphanumeric
- Loading branch information
Wiley Yu
committed
Dec 13, 2023
1 parent
b6fcb30
commit 55f2c5e
Showing
5 changed files
with
61 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
/** | ||
* Modified from https://github.com/parshap/node-sanitize-filename | ||
* Replaces characters in strings that are illegal/unsafe for filenames. | ||
* Unsafe characters are either removed or replaced by a substitute set | ||
* in the optional `options` object. | ||
* | ||
* Illegal Characters on Various Operating Systems | ||
* / ? < > \ : * | " | ||
* https://kb.acronis.com/content/39790 | ||
* | ||
* Unicode Control codes | ||
* C0 0x00-0x1f & C1 (0x80-0x9f) | ||
* http://en.wikipedia.org/wiki/C0_and_C1_control_codes | ||
* | ||
* Reserved filenames on Unix-based systems (".", "..") | ||
* Reserved filenames in Windows ("CON", "PRN", "AUX", "NUL", "COM1", | ||
* "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9", | ||
* "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", and | ||
* "LPT9") case-insesitively and with or without filename extensions. | ||
* | ||
* Capped at 255 characters in length. | ||
* http://unix.stackexchange.com/questions/32795/what-is-the-maximum-allowed-filename-and-folder-size-with-ecryptfs | ||
*/ | ||
|
||
Zotero.ZotMoov.Sanitize = | ||
{ | ||
_truncate(str, nchars) | ||
{ | ||
let enc = new TextEncoder(); | ||
let dec = new TextDecoder('utf-8'); | ||
let uint8 = enc.encode(str) | ||
let section = uint8.slice(0,nchars) | ||
let result = dec.decode(section); | ||
return result.replace(/\uFFFD/g, ''); | ||
|
||
}, | ||
|
||
sanitize(input, replacement) { | ||
const illegalRe = /[\/\?<>\\:\*\|"]/g; | ||
const controlRe = /[\x00-\x1f\x80-\x9f]/g; | ||
const reservedRe = /^\.+$/; | ||
const windowsReservedRe = /^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i; | ||
const windowsTrailingRe = /[\. ]+$/; | ||
|
||
if (typeof input !== 'string') { | ||
throw new Error('Input must be string'); | ||
} | ||
var sanitized = input | ||
.replace(illegalRe, replacement) | ||
.replace(controlRe, replacement) | ||
.replace(reservedRe, replacement) | ||
.replace(windowsReservedRe, replacement) | ||
.replace(windowsTrailingRe, replacement); | ||
return Zotero.ZotMoov.Sanitize._truncate(sanitized, 255); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters