Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src/sugar
diff options
context:
space:
mode:
authorMartin Dengler <martin@martindengler.com>2011-01-17 02:20:17 (GMT)
committer Sascha Silbe <sascha-pgp@silbe.org>2011-02-05 15:30:03 (GMT)
commit45fc0b6186d6162c99eb63c728e9ed30153334c8 (patch)
tree5d154ef9187d80144410858e8e3b20af00232e3b /src/sugar
parent924e2e62bf9e2dbc7a15c412def076a0194370a3 (diff)
Throw MalformedBundleException on broken zip files
sugar.bundle.bundle.Bundle users (e.g. jarabe.model.bundleregistry.BundleRegistry._add_bundle) only expect MalformedBundleException to be thrown, not exceptions of zipfile. This patch solves the most severe issue in #1876: filling up the filesystem with temporary files that won't be deleted afterwards. Before we can consider this bug completely fixed, we still need to do something for the remaining issues: 1) Unpacking shouldn't be attempted if there isn't a safety margin 2) System becomes unresponsive during unpacking 3) No progress indication for the operation, so users are tempted to click multiple times 4) No error messages displayed for unpacking errors, which is a common Sugar nuisance. http://bugs.sugarlabs.org/ticket/1876#comment:5 offers possible strategies for (1) and (2). Signed-off-by: Martin Dengler <martin@martindengler.com> Signed-off-by: Bernie Innocenti <bernie@codewiz.org> [style fixes, adjusted description] Signed-off-by: Sascha Silbe <silbe@activitycentral.com> Reviewed-by: Aleksey Lim <alsroot@activitycentral.org>
Diffstat (limited to 'src/sugar')
-rw-r--r--src/sugar/bundle/bundle.py6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/sugar/bundle/bundle.py b/src/sugar/bundle/bundle.py
index 8200d49..aae3a09 100644
--- a/src/sugar/bundle/bundle.py
+++ b/src/sugar/bundle/bundle.py
@@ -71,7 +71,11 @@ class Bundle(object):
self._zip_file = None
if not os.path.isdir(self._path):
- self._zip_file = zipfile.ZipFile(self._path)
+ try:
+ self._zip_file = zipfile.ZipFile(self._path)
+ except zipfile.error, exception:
+ raise MalformedBundleException('Error accessing zip file %r: '
+ '%s' % (self._path, exception))
self._check_zip_bundle()
# manifest = self._get_file(self._infodir + '/contents')