Index: src/wp-includes/class-wp-image-editor-gd.php
===================================================================
--- src/wp-includes/class-wp-image-editor-gd.php	(revision 27100)
+++ src/wp-includes/class-wp-image-editor-gd.php	(working copy)
@@ -205,9 +205,14 @@
 		$orig_size = $this->size;
 
 		foreach ( $sizes as $size => $size_data ) {
-			if ( ! ( isset( $size_data['width'] ) && isset( $size_data['height'] ) ) )
+			if ( ! isset( $size_data['width'] ) && ! isset( $size_data['height'] ) )
 				continue;
 
+			if ( ! isset( $size_data['width'] ) )
+				$size_data['width'] = 0;
+			if ( ! isset( $size_data['height'] ) )
+				$size_data['height'] = 0;
+
 			if ( ! isset( $size_data['crop'] ) )
 				$size_data['crop'] = false;
 
Index: src/wp-includes/class-wp-image-editor-imagick.php
===================================================================
--- src/wp-includes/class-wp-image-editor-imagick.php	(revision 27100)
+++ src/wp-includes/class-wp-image-editor-imagick.php	(working copy)
@@ -272,9 +272,15 @@
 			if ( ! $this->image )
 				$this->image = $orig_image->getImage();
 
-			if ( ! ( isset( $size_data['width'] ) && isset( $size_data['height'] ) ) )
+			if ( ! isset( $size_data['width'] ) && ! isset( $size_data['height'] ) )
 				continue;
 
+			if ( ! isset( $size_data['width'] ) )
+				$size_data['width'] = 0;
+			if ( ! isset( $size_data['height'] ) )
+				$size_data['height'] = 0;
+
+
 			if ( ! isset( $size_data['crop'] ) )
 				$size_data['crop'] = false;
 
Index: tests/phpunit/tests/image/editor_gd.php
===================================================================
--- tests/phpunit/tests/image/editor_gd.php	(revision 27100)
+++ tests/phpunit/tests/image/editor_gd.php	(working copy)
@@ -34,7 +34,7 @@
 	 */
 	public function test_resize() {
 
-		$file = DIR_TESTDATA . '/images/gradient-square.jpg';
+		$file = DIR_TESTDATA . '/images/waffles.jpg';
 
 		$gd_image_editor = new WP_Image_Editor_GD( $file );
 		$gd_image_editor->load();
@@ -41,10 +41,256 @@
 
 		$gd_image_editor->resize( 100, 50 );
 
-		$this->assertEquals( array( 'width' => 50, 'height' => 50 ), $gd_image_editor->get_size() );
+		$this->assertEquals( array( 'width' => 75, 'height' => 50 ), $gd_image_editor->get_size() );
 	}
 
 	/**
+	 * Test resizing an multi resizong image, not using crop
+	 * 
+	 */
+	public function test_multi_resize() {
+
+		$file = DIR_TESTDATA . '/images/waffles.jpg';
+
+		$gd_image_editor = new WP_Image_Editor_GD( $file );
+		$gd_image_editor->load();
+		$sizes_array =	array(
+                			array ('width' => 50, 'height' => 50 )
+        				);
+		$resized = $gd_image_editor->multi_resize( $sizes_array );
+
+		$expected_array = array( 
+					array (	'file' => 'waffles-50x33.jpg',
+							'width' => 50,
+							'height' => 33,
+							'mime-type' => 'image/jpeg') 
+					);
+
+		$this->assertEquals( $expected_array, $resized );
+	}
+
+	/**
+	 * Test resizing an multi resizong image, and then load the image to check size
+	 * 
+	 */
+	public function test_multi_resize_check_is_resized() {
+
+		$file = DIR_TESTDATA . '/images/waffles.jpg';
+
+		$gd_image_editor = new WP_Image_Editor_GD( $file );
+		$gd_image_editor->load();
+		$sizes_array =	array(
+                			array ('width' => 50, 'height' => 50 )
+        				);
+		$resized = $gd_image_editor->multi_resize( $sizes_array );
+
+	
+		$gd_image_output = new WP_Image_Editor_GD( DIR_TESTDATA . '/images/'. $resized[0]['file'] );
+		$gd_image_output->load();
+
+		$this->assertEquals( array( 'width' => 50, 'height' => 33  ), $gd_image_output->get_size() );
+	}
+
+	/**
+	 * Test resizing an multi resizong image array in array out
+	 * 
+	 */
+	public function test_multi_resize_array() {
+
+		$file = DIR_TESTDATA . '/images/waffles.jpg';
+
+		$gd_image_editor = new WP_Image_Editor_GD( $file );
+		$gd_image_editor->load();
+		$sizes_array =     array(
+	        // #1 - resizes to 100x100 pixel, square-cropped image
+	        array ('width' => 10, 'height' => 10, 'crop' => false),
+	        // #2 - resizes to 200 pixel max width/height, non-cropped image
+	        array ('width' => 75, 'height' => 50, 'crop' => true),
+	        // #3 - resizes to 200 pixel max height, non-cropped image
+	        array ('width' => 9999, 'height' => 20, 'crop' => false),
+	        // #3 - resizes to 450 pixel max width, non-cropped image
+	        array ('width' => 45, 'height' => 9999, 'crop' => true)
+	    );
+	 
+	    $resized = $gd_image_editor->multi_resize( $sizes_array );
+
+	    $expected_array = array(
+	        // #1 - resizes to 100x100 pixel, square-cropped image
+	        array (	'file' => 'waffles-10x6.jpg',
+	        		'width' => 10,
+	        		'height' => 6 ,
+	        		'mime-type' => 'image/jpeg'),
+	        // #2 - resizes to 200 pixel max width/height, square-cropped image
+	        array (	'file' => 'waffles-75x50.jpg',
+	        		'width' => 75,
+	        		'height' => 50,
+	        		'mime-type' => 'image/jpeg'),
+	        // #3 - resizes to 200 pixel max height, non-cropped image
+	        array (	'file' => 'waffles-30x20.jpg',
+	        		'width' => 30,
+	        		'height' => 20,
+	        		'mime-type' => 'image/jpeg'),
+	        // #3 - resizes to 450 pixel max width, non-cropped image
+	        array (	'file' => 'waffles-45x400.jpg',
+	        		'width' => 45,
+	        		'height' => 400,
+	        		'mime-type' => 'image/jpeg')
+	    );
+
+
+		$this->assertEquals( $expected_array, $resized );
+	}
+
+	/**
+	 * Test resizing an image, no height
+	 * 
+	 */
+	public function test_multi_resize_mising_height() {
+
+		$file = DIR_TESTDATA . '/images/waffles.jpg';
+
+		$gd_image_editor = new WP_Image_Editor_GD( $file );
+		$gd_image_editor->load();
+		$sizes_array =	array(
+                			array ('width' => 50)
+        				);
+		$resized =  $gd_image_editor->multi_resize( $sizes_array );
+
+		$expected_array = array( 
+					array (	'file' => 'waffles-50x33.jpg',
+							'width' => 50,
+							'height' => 33,
+							'mime-type' => 'image/jpeg') 
+					);
+
+		$this->assertEquals( $expected_array, $resized );
+	}
+	// /**
+	//  * Test resizing an multi resize image, no width
+	//  * 
+	//  */
+	public function test_multi_resize_mising_width() {
+
+		$file = DIR_TESTDATA . '/images/waffles.jpg';
+
+		$gd_image_editor = new WP_Image_Editor_GD( $file );
+		$gd_image_editor->load();
+		$sizes_array =	array(
+                			array ( 'height' => 50 )
+        				);
+		$resized =  $gd_image_editor->multi_resize( $sizes_array );
+
+		$expected_array = array( 
+					array (	'file' => 'waffles-75x50.jpg',
+							'width' => 75,
+							'height' => 50,
+							'mime-type' => 'image/jpeg') 
+					);
+
+		$this->assertEquals( $expected_array, $resized );
+	}
+	
+	// /**
+	//  * Test resizing an multi resize image, null input
+	//  * 
+	//  */
+	public function test_multi_resize_width_set_to_null() {
+
+		$file = DIR_TESTDATA . '/images/waffles.jpg';
+
+		$gd_image_editor = new WP_Image_Editor_GD( $file );
+		$gd_image_editor->load();
+		$sizes_array =	array(
+                			array ( 'height' => 50,'width' => null )
+        				);
+		$resized =  $gd_image_editor->multi_resize( $sizes_array );
+
+		$expected_array = array( 
+					array (	'file' => 'waffles-75x50.jpg',
+							'width' => 75,
+							'height' => 50,
+							'mime-type' => 'image/jpeg') 
+					);
+
+		$this->assertEquals( $expected_array, $resized );
+	}
+	// /**
+	//  * Test resizing an multi resize image, Null import
+	//  * 
+	//  */
+	public function test_multi_resize_height_set_to_null() {
+
+		$file = DIR_TESTDATA . '/images/waffles.jpg';
+
+		$gd_image_editor = new WP_Image_Editor_GD( $file );
+		$gd_image_editor->load();
+		$sizes_array =	array(
+                			array ( 'height' => null,'width' => 50 )
+        				);
+		$resized =  $gd_image_editor->multi_resize( $sizes_array );
+
+		$expected_array = array( 
+					array (	'file' => 'waffles-50x33.jpg',
+							'width' => 50,
+							'height' => 33,
+							'mime-type' => 'image/jpeg') 
+					);
+
+		$this->assertEquals( $expected_array, $resized );
+	}
+	
+	// /**
+	//  * Test resizing an multi resize image, missus value
+	//  * 
+	//  */
+	public function test_multi_resize_width_set_to_missus() {
+
+		$file = DIR_TESTDATA . '/images/waffles.jpg';
+
+		$gd_image_editor = new WP_Image_Editor_GD( $file );
+		$gd_image_editor->load();
+		$sizes_array =	array(
+                			array ( 'height' => 50,'width' => -50 )
+        				);
+		$resized =  $gd_image_editor->multi_resize( $sizes_array );
+
+		$expected_array = array( 
+					array (	'file' => 'waffles-75x50.jpg',
+							'width' => 75,
+							'height' => 50,
+							'mime-type' => 'image/jpeg') 
+					);
+
+		$this->assertEquals( $expected_array, $resized );
+	}
+	// /**
+	//  * Test resizing an multi resize image, missus value
+	//  * 
+	//  */
+	public function test_multi_resize_height_set_to_missus() {
+
+		$file = DIR_TESTDATA . '/images/waffles.jpg';
+
+		$gd_image_editor = new WP_Image_Editor_GD( $file );
+		$gd_image_editor->load();
+		$sizes_array =	array(
+                			array ( 'height' => -65119,'width' => 200 )
+        				);
+		$resized =  $gd_image_editor->multi_resize( $sizes_array );
+
+		$expected_array = array( 
+					array (	'file' => 'waffles-200x133.jpg',
+							'width' => 200,
+							'height' => 133,
+							'mime-type' => 'image/jpeg') 
+					);
+
+		$this->assertEquals( $expected_array, $resized );
+	}
+
+
+
+	/**
 	 * Test resizing an image including cropping
 	 * 
 	 */
Index: tests/phpunit/tests/image/editor_imagick.php
===================================================================
--- tests/phpunit/tests/image/editor_imagick.php	(revision 27100)
+++ tests/phpunit/tests/image/editor_imagick.php	(working copy)
@@ -51,8 +51,253 @@
 
 		$this->assertEquals( array( 'width' => 50, 'height' => 50 ), $imagick_image_editor->get_size() );
 	}
+/**
+	 * Test resizing an multi resizong image, not using crop
+	 * 
+	 */
+	public function test_multi_resize() {
 
+		$file = DIR_TESTDATA . '/images/waffles.jpg';
+
+		$gd_image_editor = new WP_Image_Editor_Imagick( $file );
+		$gd_image_editor->load();
+		$sizes_array =	array(
+                			array ('width' => 50, 'height' => 50 )
+        				);
+		$resized = $gd_image_editor->multi_resize( $sizes_array );
+
+		$expected_array = array( 
+					array (	'file' => 'waffles-50x33.jpg',
+							'width' => 50,
+							'height' => 33,
+							'mime-type' => 'image/jpeg') 
+					);
+
+		$this->assertEquals( $expected_array, $resized );
+	}
+
 	/**
+	 * Test resizing an multi resizong image, and then load the image to check size
+	 * 
+	 */
+	public function test_multi_resize_check_is_resized() {
+
+		$file = DIR_TESTDATA . '/images/waffles.jpg';
+
+		$gd_image_editor = new WP_Image_Editor_Imagick( $file );
+		$gd_image_editor->load();
+		$sizes_array =	array(
+                			array ('width' => 50, 'height' => 50 )
+        				);
+		$resized = $gd_image_editor->multi_resize( $sizes_array );
+
+	
+		$gd_image_output = new WP_Image_Editor_Imagick( DIR_TESTDATA . '/images/'. $resized[0]['file'] );
+		$gd_image_output->load();
+
+		$this->assertEquals( array( 'width' => 50, 'height' => 33  ), $gd_image_output->get_size() );
+	}
+
+	/**
+	 * Test resizing an multi resizong image array in array out
+	 * 
+	 */
+	public function test_multi_resize_array() {
+
+		$file = DIR_TESTDATA . '/images/waffles.jpg';
+
+		$gd_image_editor = new WP_Image_Editor_Imagick( $file );
+		$gd_image_editor->load();
+		$sizes_array =     array(
+	        // #1 - resizes to 100x100 pixel, square-cropped image
+	        array ('width' => 10, 'height' => 10, 'crop' => false),
+	        // #2 - resizes to 200 pixel max width/height, non-cropped image
+	        array ('width' => 75, 'height' => 50, 'crop' => true),
+	        // #3 - resizes to 200 pixel max height, non-cropped image
+	        array ('width' => 9999, 'height' => 20, 'crop' => false),
+	        // #3 - resizes to 450 pixel max width, non-cropped image
+	        array ('width' => 45, 'height' => 9999, 'crop' => true)
+	    );
+	 
+	    $resized = $gd_image_editor->multi_resize( $sizes_array );
+
+	    $expected_array = array(
+	        // #1 - resizes to 100x100 pixel, square-cropped image
+	        array (	'file' => 'waffles-10x6.jpg',
+	        		'width' => 10,
+	        		'height' => 6 ,
+	        		'mime-type' => 'image/jpeg'),
+	        // #2 - resizes to 200 pixel max width/height, square-cropped image
+	        array (	'file' => 'waffles-75x50.jpg',
+	        		'width' => 75,
+	        		'height' => 50,
+	        		'mime-type' => 'image/jpeg'),
+	        // #3 - resizes to 200 pixel max height, non-cropped image
+	        array (	'file' => 'waffles-30x20.jpg',
+	        		'width' => 30,
+	        		'height' => 20,
+	        		'mime-type' => 'image/jpeg'),
+	        // #3 - resizes to 450 pixel max width, non-cropped image
+	        array (	'file' => 'waffles-45x400.jpg',
+	        		'width' => 45,
+	        		'height' => 400,
+	        		'mime-type' => 'image/jpeg')
+	    );
+
+
+		$this->assertEquals( $expected_array, $resized );
+	}
+
+	/**
+	 * Test resizing an image, no height
+	 * 
+	 */
+	public function test_multi_resize_mising_height() {
+
+		$file = DIR_TESTDATA . '/images/waffles.jpg';
+
+		$gd_image_editor = new WP_Image_Editor_Imagick( $file );
+		$gd_image_editor->load();
+		$sizes_array =	array(
+                			array ('width' => 50)
+        				);
+		$resized =  $gd_image_editor->multi_resize( $sizes_array );
+
+		$expected_array = array( 
+					array (	'file' => 'waffles-50x33.jpg',
+							'width' => 50,
+							'height' => 33,
+							'mime-type' => 'image/jpeg') 
+					);
+
+		$this->assertEquals( $expected_array, $resized );
+	}
+	// /**
+	//  * Test resizing an multi resize image, no width
+	//  * 
+	//  */
+	public function test_multi_resize_mising_width() {
+
+		$file = DIR_TESTDATA . '/images/waffles.jpg';
+
+		$gd_image_editor = new WP_Image_Editor_Imagick( $file );
+		$gd_image_editor->load();
+		$sizes_array =	array(
+                			array ( 'height' => 50 )
+        				);
+		$resized =  $gd_image_editor->multi_resize( $sizes_array );
+
+		$expected_array = array( 
+					array (	'file' => 'waffles-75x50.jpg',
+							'width' => 75,
+							'height' => 50,
+							'mime-type' => 'image/jpeg') 
+					);
+
+		$this->assertEquals( $expected_array, $resized );
+	}
+	
+	// /**
+	//  * Test resizing an multi resize image, null input
+	//  * 
+	//  */
+	public function test_multi_resize_width_set_to_null() {
+
+		$file = DIR_TESTDATA . '/images/waffles.jpg';
+
+		$gd_image_editor = new WP_Image_Editor_Imagick( $file );
+		$gd_image_editor->load();
+		$sizes_array =	array(
+                			array ( 'height' => 50,'width' => null )
+        				);
+		$resized =  $gd_image_editor->multi_resize( $sizes_array );
+
+		$expected_array = array( 
+					array (	'file' => 'waffles-75x50.jpg',
+							'width' => 75,
+							'height' => 50,
+							'mime-type' => 'image/jpeg') 
+					);
+
+		$this->assertEquals( $expected_array, $resized );
+	}
+	// /**
+	//  * Test resizing an multi resize image, Null import
+	//  * 
+	//  */
+	public function test_multi_resize_height_set_to_null() {
+
+		$file = DIR_TESTDATA . '/images/waffles.jpg';
+
+		$gd_image_editor = new WP_Image_Editor_Imagick( $file );
+		$gd_image_editor->load();
+		$sizes_array =	array(
+                			array ( 'height' => null,'width' => 50 )
+        				);
+		$resized =  $gd_image_editor->multi_resize( $sizes_array );
+
+		$expected_array = array( 
+					array (	'file' => 'waffles-50x33.jpg',
+							'width' => 50,
+							'height' => 33,
+							'mime-type' => 'image/jpeg') 
+					);
+
+		$this->assertEquals( $expected_array, $resized );
+	}
+	
+	// /**
+	//  * Test resizing an multi resize image, missus value
+	//  * 
+	//  */
+	public function test_multi_resize_width_set_to_missus() {
+
+		$file = DIR_TESTDATA . '/images/waffles.jpg';
+
+		$gd_image_editor = new WP_Image_Editor_Imagick( $file );
+		$gd_image_editor->load();
+		$sizes_array =	array(
+                			array ( 'height' => 50,'width' => -50 )
+        				);
+		$resized =  $gd_image_editor->multi_resize( $sizes_array );
+
+		$expected_array = array( 
+					array (	'file' => 'waffles-75x50.jpg',
+							'width' => 75,
+							'height' => 50,
+							'mime-type' => 'image/jpeg') 
+					);
+
+		$this->assertEquals( $expected_array, $resized );
+	}
+	// /**
+	//  * Test resizing an multi resize image, missus value
+	//  * 
+	//  */
+	public function test_multi_resize_height_set_to_missus() {
+
+		$file = DIR_TESTDATA . '/images/waffles.jpg';
+
+		$gd_image_editor = new WP_Image_Editor_Imagick( $file );
+		$gd_image_editor->load();
+		$sizes_array =	array(
+                			array ( 'height' => -65119,'width' => 200 )
+        				);
+		$resized =  $gd_image_editor->multi_resize( $sizes_array );
+
+		$expected_array = array( 
+					array (	'file' => 'waffles-200x133.jpg',
+							'width' => 200,
+							'height' => 133,
+							'mime-type' => 'image/jpeg') 
+					);
+
+		$this->assertEquals( $expected_array, $resized );
+	}
+
+
+
+	/**
 	 * Test resizing an image including cropping
 	 * 
 	 */
