summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjvoisin2014-01-18 21:30:01 +0000
committerjvoisin2014-01-18 21:30:01 +0000
commit068e7c5652947c4a6a367cdc107f1f1042013cd7 (patch)
treee0d6fd9dd6dbdd1b64b84fba9c572ae0b55d5a99
parentffb4e8895a4b89de1374d73c924aa2312493f6fc (diff)
Fix https://labs.riseup.net/code/issues/6604
-rw-r--r--MAT/archive.py6
-rw-r--r--test/libtest.py8
2 files changed, 13 insertions, 1 deletions
diff --git a/MAT/archive.py b/MAT/archive.py
index ed55319..ee5c936 100644
--- a/MAT/archive.py
+++ b/MAT/archive.py
@@ -5,6 +5,7 @@ import datetime
5import logging 5import logging
6import os 6import os
7import shutil 7import shutil
8import stat
8import tarfile 9import tarfile
9import tempfile 10import tempfile
10import zipfile 11import zipfile
@@ -160,7 +161,10 @@ class ZipStripper(GenericArchiveStripper):
160 if os.path.isfile(name) and not beginning and not ending: 161 if os.path.isfile(name) and not beginning and not ending:
161 cfile = mat.create_class_file(name, False, add2archive=self.add2archive) 162 cfile = mat.create_class_file(name, False, add2archive=self.add2archive)
162 if cfile is not None: 163 if cfile is not None:
164 old_stat = os.stat(name).st_mode
165 os.chmod(name, old_stat|stat.S_IWUSR)
163 cfile.remove_all() 166 cfile.remove_all()
167 os.chmod(name, old_stat)
164 logging.debug('Processing %s from %s' % (item.filename, self.filename)) 168 logging.debug('Processing %s from %s' % (item.filename, self.filename))
165 elif item.filename not in whitelist: 169 elif item.filename not in whitelist:
166 logging.info('%s\'s format is not supported or harmless' % item.filename) 170 logging.info('%s\'s format is not supported or harmless' % item.filename)
@@ -244,10 +248,10 @@ class TarStripper(GenericArchiveStripper):
244 class_file = mat.create_class_file(complete_name, 248 class_file = mat.create_class_file(complete_name,
245 False, add2archive=self.add2archive) 249 False, add2archive=self.add2archive)
246 if class_file: 250 if class_file:
247 # Nested archives are treated like unsupported ones
248 if not class_file.is_clean(): 251 if not class_file.is_clean():
249 if not list_unsupported: 252 if not list_unsupported:
250 return False 253 return False
254 # Nested archives are treated like unsupported files
251 elif isinstance(class_file, GenericArchiveStripper): 255 elif isinstance(class_file, GenericArchiveStripper):
252 ret_list.append(item.name) 256 ret_list.append(item.name)
253 else: 257 else:
diff --git a/test/libtest.py b/test/libtest.py
index f052b6e..cbc807f 100644
--- a/test/libtest.py
+++ b/test/libtest.py
@@ -7,6 +7,7 @@
7 7
8import os 8import os
9import sys 9import sys
10import shutil
10import tarfile 11import tarfile
11import tempfile 12import tempfile
12import test 13import test
@@ -157,6 +158,13 @@ class TestArchiveProcessing(test.MATTest):
157 unsupported_files = set(current_file.is_clean(list_unsupported=True)) 158 unsupported_files = set(current_file.is_clean(list_unsupported=True))
158 self.assertEqual(unsupported_files, set(('mat.desktop', 'README.security', 'setup.py'))) 159 self.assertEqual(unsupported_files, set(('mat.desktop', 'README.security', 'setup.py')))
159 160
161 def test_archive_unwritable_content(self):
162 path = os.path.join(self.tmpdir, './unwritable_content.zip')
163 shutil.copy2('./unwritable_content.zip', self.tmpdir)
164 current_file = MAT.mat.create_class_file(path, False, add2archive=False)
165 current_file.remove_all()
166 current_file = MAT.mat.create_class_file(path, False, add2archive=False)
167 self.assertTrue(current_file.is_clean())
160 168
161def get_tests(): 169def get_tests():
162 ''' Returns every libtests''' 170 ''' Returns every libtests'''