XXXalice/EngineSSL

werkzeug.utilsnosecure_filenameで2バイト文字が全て消えて謎のファイルが生成される

XXXalice opened this issue · 1 comments

日本語ファイルはランダム文字列でその場で命名してuploadする

なおった

    def __jis_check(self, fname):
        """
        fnameに2バイト文字が含まれているならtrue、英数字オンリーならfalse
        :param fname: string
        :return: bool
        """
        codex = ['shift_jis', 'utf-8']
        code_dict = dict(zip(codex, [None for _ in codex]))
        for code in list(code_dict.keys()):
            code_dict[code] = len(fname.encode(encoding=code, errors='replace'))
        tmp = 0
        res = False
        for byte_num in list(code_dict.values()):
            if tmp != 0:
                if tmp == byte_num:
                    continue
                else:
                    res = True
            tmp = byte_num
        return res

こんなん
str.encode()のerrors引数は強い
'ignore'では動かなかった