From 45fc0b6186d6162c99eb63c728e9ed30153334c8 Mon Sep 17 00:00:00 2001 From: Martin Dengler Date: Mon, 17 Jan 2011 02:20:17 +0000 Subject: [PATCH] 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 Signed-off-by: Bernie Innocenti [style fixes, adjusted description] Signed-off-by: Sascha Silbe Reviewed-by: Aleksey Lim --- src/sugar/bundle/bundle.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/sugar/bundle/bundle.py b/src/sugar/bundle/bundle.py index 8200d490..aae3a09a 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')