diff -r 133ee2b48e52 Lib/tarfile.py --- a/Lib/tarfile.py Fri Aug 01 23:51:51 2014 -0700 +++ b/Lib/tarfile.py Sat Aug 02 08:52:20 2014 +0000 @@ -1297,7 +1297,7 @@ # the longname information. next.offset = self.offset if self.type == GNUTYPE_LONGNAME: - next.name = nts(buf) + next.name = nts(buf).rstrip("/") elif self.type == GNUTYPE_LONGLINK: next.linkname = nts(buf) diff -r 133ee2b48e52 Lib/test/test_tarfile.py --- a/Lib/test/test_tarfile.py Fri Aug 01 23:51:51 2014 -0700 +++ b/Lib/test/test_tarfile.py Sat Aug 02 08:52:20 2014 +0000 @@ -759,6 +759,26 @@ "failed to store 100 char filename") 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)