diff -r a86a0cb0dd57 -r 1570351bf863 scripts/x --- a/scripts/x Sun Oct 29 19:34:46 2006 -0500 +++ b/scripts/x Sun Oct 29 20:03:12 2006 -0500 @@ -116,7 +116,7 @@ filenames = self.get_filenames() try: first_part = filenames.next().split('/', 1)[0] + '/' - except IndexError: + except StopIteration: filenames.stop() return EMPTY for filename in filenames: @@ -130,7 +130,13 @@ def basename(self): pieces = self.filename.split('.') - if mimetypes.encodings_map.has_key('.' + pieces.pop()): + extension = '.' + pieces[-1] + if mimetypes.encodings_map.has_key(extension): + pieces.pop() + extension = '.' + pieces[-1] + if (mimetypes.types_map.has_key(extension) or + mimetypes.common_types.has_key(extension) or + mimetypes.suffix_map.has_key(extension)): pieces.pop() return '.'.join(pieces) @@ -177,7 +183,17 @@ self.pipe(['rpm2cpio', '-'], "rpm2cpio") def basename(self): - return self.filename.rsplit('.', 2)[0] + pieces = self.filename.rsplit('.', 2) + if len(pieces) == 1: + return pieces[0] + elif pieces[-1] != 'rpm': + return BaseExtractor.basename(self) + pieces.pop() + if len(pieces) == 1: + return pieces[0] + elif len(pieces[-1]) < 6: + pieces.pop() + return '.'.join(pieces) def check_contents(self): return BOMB @@ -191,7 +207,12 @@ self.pipe(['zcat'], "data.tar.gz decompression") def basename(self): - return self.filename.rsplit('_', 1)[0] + pieces = self.filename.rsplit('_', 1) + if len(pieces) == 1: + return pieces[0] + elif (len(pieces[-1]) > 10) or (not pieces[-1].endswith('.deb')): + return BaseExtractor.basename(self) + return pieces[0] def check_contents(self): return BOMB @@ -199,6 +220,7 @@ extractor_map = {'application/x-tar': TarExtractor, 'application/zip': ZipExtractor, + 'application/x-msdos-program': ZipExtractor, 'application/x-debian-package': DebExtractor, 'application/x-redhat-package-manager': RPMExtractor, 'application/x-shar': None,