From 98e7b2dbe32b1791084a37b2562ff5ae08be75dd Mon Sep 17 00:00:00 2001 From: Dave Townsend Date: Tue, 3 Jun 2008 11:42:16 +0100 Subject: [PATCH] Bug 433248: nsIZipWriter crashes FF3 on access to nsIZipWriter.file. r=jst --- modules/libjar/zipwriter/src/nsZipWriter.cpp | 3 + .../zipwriter/test/unit/test_bug433248.js | 106 ++++++++++++++++++ 2 files changed, 109 insertions(+) create mode 100644 modules/libjar/zipwriter/test/unit/test_bug433248.js diff --git a/modules/libjar/zipwriter/src/nsZipWriter.cpp b/modules/libjar/zipwriter/src/nsZipWriter.cpp index 6c367dbec61b..64604d34a728 100644 --- a/modules/libjar/zipwriter/src/nsZipWriter.cpp +++ b/modules/libjar/zipwriter/src/nsZipWriter.cpp @@ -119,6 +119,9 @@ NS_IMETHODIMP nsZipWriter::GetInQueue(PRBool *aInQueue) /* readonly attribute nsIFile file; */ NS_IMETHODIMP nsZipWriter::GetFile(nsIFile **aFile) { + if (!mFile) + return NS_ERROR_NOT_INITIALIZED; + nsCOMPtr file; nsresult rv = mFile->Clone(getter_AddRefs(file)); NS_ENSURE_SUCCESS(rv, rv); diff --git a/modules/libjar/zipwriter/test/unit/test_bug433248.js b/modules/libjar/zipwriter/test/unit/test_bug433248.js new file mode 100644 index 000000000000..f43003dfc56e --- /dev/null +++ b/modules/libjar/zipwriter/test/unit/test_bug433248.js @@ -0,0 +1,106 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Zip Writer Component. + * + * The Initial Developer of the Original Code is + * Dave Townsend . + * + * Portions created by the Initial Developer are Copyright (C) 2008 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** + */ + +function run_test() +{ + var test; + // zipW is an uninitialised zipwriter at this point. + try { + test = zipW.file; + do_throw("Should have thrown unitialised error."); + } + catch (e) { + do_check_eq(e.result, Components.results.NS_ERROR_NOT_INITIALIZED); + } + + try { + test = zipW.comment; + do_throw("Should have thrown unitialised error."); + } + catch (e) { + do_check_eq(e.result, Components.results.NS_ERROR_NOT_INITIALIZED); + } + + try { + zipW.comment = "test"; + do_throw("Should have thrown unitialised error."); + } + catch (e) { + do_check_eq(e.result, Components.results.NS_ERROR_NOT_INITIALIZED); + } + + try { + zipW.addEntryDirectory("test", 0, false); + do_throw("Should have thrown unitialised error."); + } + catch (e) { + do_check_eq(e.result, Components.results.NS_ERROR_NOT_INITIALIZED); + } + + try { + zipW.addEntryFile("test", Ci.nsIZipWriter.COMPRESSION_DEFAULT, tmpDir, false); + do_throw("Should have thrown unitialised error."); + } + catch (e) { + do_check_eq(e.result, Components.results.NS_ERROR_NOT_INITIALIZED); + } + + try { + zipW.removeEntry("test", false); + do_throw("Should have thrown unitialised error."); + } + catch (e) { + do_check_eq(e.result, Components.results.NS_ERROR_NOT_INITIALIZED); + } + + try { + zipW.processQueue(null, null); + do_throw("Should have thrown unitialised error."); + } + catch (e) { + do_check_eq(e.result, Components.results.NS_ERROR_NOT_INITIALIZED); + } + + try { + zipW.close(); + do_throw("Should have thrown unitialised error."); + } + catch (e) { + do_check_eq(e.result, Components.results.NS_ERROR_NOT_INITIALIZED); + } +}