@@ -432,7 +432,7 @@ class ZipInfo:
432432 """Class with attributes describing each file in the ZIP archive."""
433433
434434 __slots__ = (
435- 'orig_filename ' ,
435+ '_orig_filename ' ,
436436 'filename' ,
437437 'date_time' ,
438438 'compress_type' ,
@@ -456,7 +456,7 @@ class ZipInfo:
456456 )
457457
458458 def __init__ (self , filename = "NoName" , date_time = (1980 ,1 ,1 ,0 ,0 ,0 )):
459- self .orig_filename = filename # Original file name in archive
459+ self .orig_filename = None # Original file name in archive
460460
461461 # Terminate the file name at the first null byte and
462462 # ensure paths always use forward slashes as the directory separator.
@@ -492,6 +492,16 @@ def __init__(self, filename="NoName", date_time=(1980,1,1,0,0,0)):
492492 # header_offset Byte offset to the file header
493493 # CRC CRC-32 of the uncompressed file
494494
495+ @property
496+ def orig_filename (self ):
497+ return (self ._orig_filename if self ._orig_filename is not None
498+ else self .filename )
499+
500+ # Maintain backward compatibility in case someone sets it.
501+ @orig_filename .setter
502+ def orig_filename (self , value ):
503+ self ._orig_filename = value
504+
495505 # Maintain backward compatibility with the old protected attribute name.
496506 @property
497507 def _compresslevel (self ):
@@ -579,9 +589,9 @@ def _encodeFilenameFlags(self):
579589 else :
580590 encoding = 'cp437'
581591 try :
582- return self .filename .encode (encoding ), self .flag_bits & ~ _MASK_UTF_FILENAME
592+ return self .orig_filename .encode (encoding ), self .flag_bits & ~ _MASK_UTF_FILENAME
583593 except UnicodeEncodeError :
584- return self .filename .encode ('utf-8' ), self .flag_bits | _MASK_UTF_FILENAME
594+ return self .orig_filename .encode ('utf-8' ), self .flag_bits | _MASK_UTF_FILENAME
585595
586596 def _decodeExtra (self , filename_crc ):
587597 # Try to decode the extra field.
@@ -2056,6 +2066,7 @@ def _RealGetContents(self):
20562066 filename = filename .decode (self .metadata_encoding or 'cp437' )
20572067 # Create ZipInfo instance to store file information
20582068 x = ZipInfo (filename )
2069+ x ._orig_filename = filename
20592070 x .extra = fp .read (centdir [_CD_EXTRA_FIELD_LENGTH ])
20602071 x .comment = fp .read (centdir [_CD_COMMENT_LENGTH ])
20612072 x .header_offset = centdir [_CD_LOCAL_HEADER_OFFSET ]
0 commit comments