diff -r 253c31930b32 Lib/tarfile.py --- a/Lib/tarfile.py Sat Jul 26 00:58:55 2014 +0200 +++ b/Lib/tarfile.py Fri Jul 25 20:02:50 2014 -0400 @@ -1141,7 +1141,7 @@ # the longname information. next.offset = self.offset if self.type == GNUTYPE_LONGNAME: - next.name = nts(buf, tarfile.encoding, tarfile.errors) + next.name = nts(buf, tarfile.encoding, tarfile.errors).rstrip('/') elif self.type == GNUTYPE_LONGLINK: next.linkname = nts(buf, tarfile.encoding, tarfile.errors) diff -r 253c31930b32 Lib/test/test_tarfile.py --- a/Lib/test/test_tarfile.py Sat Jul 26 00:58:55 2014 +0200 +++ b/Lib/test/test_tarfile.py Fri Jul 25 20:02:50 2014 -0400 @@ -992,6 +992,26 @@ finally: tar.close() + def test_101_char_dir(self): + # Test for bug #21987. + name = "x" * 101 + tar = tarfile.open(tmpname, self.mode) + cwd = os.getcwd() + try: + os.chdir(TEMPDIR) + os.mkdir(name) + tar.add(name) + finally: + os.rmdir(name) + os.chdir(cwd) + tar.close() + + tar = tarfile.open(tmpname) + try: + tar.getmember(name) + finally: + tar.close() + def test_tar_size(self): # Test for bug #1013882. tar = tarfile.open(tmpname, self.mode)