-From 8c54519b32b2230293be60c5f9a8f514401171fc Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Elan=20Ruusam=C3=A4e?= <glen@delfi.ee>
-Date: Tue, 15 Jan 2013 14:53:45 +0200
-Subject: [PATCH] Minify_YUICompressor: add support for increasing stack size
-
----
- min/lib/Minify/YUICompressor.php | 14 +++++++---
- min_unit_tests/test_Minify_YuiCSS.php | 46 +++++++++++++++++++++++++++++++++
- min_unit_tests/test_all.php | 1 +
- 3 files changed, 58 insertions(+), 3 deletions(-)
- create mode 100644 min_unit_tests/test_Minify_YuiCSS.php
-
-diff --git a/min/lib/Minify/YUICompressor.php b/min/lib/Minify/YUICompressor.php
-index ef44629..8e6bfcb 100644
---- a/min/lib/Minify/YUICompressor.php
-+++ b/min/lib/Minify/YUICompressor.php
-@@ -13,14 +13,17 @@
- * Java environment.
- *
- * <code>
-- * Minify_YUICompressor::$jarFile = '/path/to/yuicompressor-2.3.5.jar';
-+ * Minify_YUICompressor::$jarFile = '/path/to/yuicompressor-2.4.6.jar';
- * Minify_YUICompressor::$tempDir = '/tmp';
- * $code = Minify_YUICompressor::minifyJs(
- * $code
- * ,array('nomunge' => true, 'line-break' => 1000)
- * );
- * </code>
-- *
-+ *
-+ * Note: In case you run out stack (default is 512k), you may increase stack size in $options:
-+ * array('stack-size' => '2048k')
-+ *
- * @todo unit tests, $options docs
- *
- * @package Minify
-@@ -108,10 +111,15 @@ private static function _getCmd($userOptions, $type, $tmpFile)
- ,'nomunge' => false
- ,'preserve-semi' => false
- ,'disable-optimizations' => false
-+ ,'stack-size' => ''
- )
- ,$userOptions
- );
-- $cmd = self::$javaExecutable . ' -jar ' . escapeshellarg(self::$jarFile)
-+ $cmd = self::$javaExecutable
-+ . (!empty($o['stack-size'])
-+ ? ' -Xss' . $o['stack-size']
-+ : '')
-+ . ' -jar ' . escapeshellarg(self::$jarFile)
- . " --type {$type}"
- . (preg_match('/^[\\da-zA-Z0-9\\-]+$/', $o['charset'])
- ? " --charset {$o['charset']}"
-diff --git a/min_unit_tests/test_Minify_YuiCSS.php b/min_unit_tests/test_Minify_YuiCSS.php
-new file mode 100644
-index 0000000..b0f33d0
---- /dev/null
-+++ b/min_unit_tests/test_Minify_YuiCSS.php
-@@ -0,0 +1,46 @@
-+<?php
-+require_once '_inc.php';
-+
-+function test_Minify_YuiCSS()
-+{
-+ // XXX this may need customizing
-+ Minify_YUICompressor::$jarFile = '/usr/share/java/yuicompressor.jar';
-+ Minify_YUICompressor::$tempDir = sys_get_temp_dir();
-+
-+ $src = "/* stack overflow test */
-+ div.image {
-+ width: 100px;
-+ height: 100px;
-+ background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAALCAYAAABGbhwYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1RDg4RDYwQzU2N0ExMUUyOUNCMEY5NzdDNzlGNzg3MSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1RDg4RDYwRDU2N0ExMUUyOUNCMEY5NzdDNzlGNzg3MSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkM0RjRBMkZGNTY3NzExRTI5Q0IwRjk3N0M3OUY3ODcxIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkM0RjRBMzAwNTY3NzExRTI5Q0IwRjk3N0M3OUY3ODcxIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+2Di36AAAALBJREFUeNpi+P//PwMQ60NpdMwIxAYgNogTBsQHgNgGi0IVIN4CxH4whSDwAk2xLBCvh8odhgmuRlNsCMSboWLHgDgE2Zp5SIrXQNlXgNgI5kZkh9+AKvgGpZWAmAUkz8SAADxAfAfK5oTS7ED8B8yCmqYOxOuA+AcQXwDiJVATn8I8CFIUCA0CmMNNoZqXILnZHiQQjeRwU7RwhCk+xAB17A4gdgFiNiyBDlKcBBBgAG/qVav+VuC1AAAAAElFTkSuQmCC');
-+ }
-+ ";
-+ $minExpected = "div.image{width:100px;height:100px;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAALCAYAAABGbhwYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1RDg4RDYwQzU2N0ExMUUyOUNCMEY5NzdDNzlGNzg3MSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1RDg4RDYwRDU2N0ExMUUyOUNCMEY5NzdDNzlGNzg3MSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkM0RjRBMkZGNTY3NzExRTI5Q0IwRjk3N0M3OUY3ODcxIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkM0RjRBMzAwNTY3NzExRTI5Q0IwRjk3N0M3OUY3ODcxIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+2Di36AAAALBJREFUeNpi+P//PwMQ60NpdMwIxAYgNogTBsQHgNgGi0IVIN4CxH4whSDwAk2xLBCvh8odhgmuRlNsCMSboWLHgDgE2Zp5SIrXQNlXgNgI5kZkh9+AKvgGpZWAmAUkz8SAADxAfAfK5oTS7ED8B8yCmqYOxOuA+AcQXwDiJVATn8I8CFIUCA0CmMNNoZqXILnZHiQQjeRwU7RwhCk+xAB17A4gdgFiNiyBDlKcBBBgAG/qVav+VuC1AAAAAElFTkSuQmCC')}";
-+
-+ // fails with java.lang.StackOverflowError as of Yui 2.4.6
-+ // unfortunately error output is not caught from yui, so have to guess
-+ try {
-+ $minOutput = Minify_YUICompressor::minifyCss($src);
-+ assertTrue(false, "Expected exception Not thrown");
-+ } catch (Exception $e) {
-+ assertTrue($e->getMessage() == 'Minify_YUICompressor : YUI compressor execution failed.', 'got expected Exception');
-+ }
-+
-+ try {
-+ $options = array(
-+ 'stack-size' => '2m',
-+ );
-+ $minOutput = Minify_YUICompressor::minifyCss($src, $options);
-+ } catch (Exception $e) {
-+ assertTrue(false, $e->getMessage());;
-+ $minOutput = false;
-+ }
-+
-+ $passed = assertTrue($minExpected == $minOutput, 'Minify_YUICompressor : Overall');
-+ if (__FILE__ === realpath($_SERVER['SCRIPT_FILENAME'])) {
-+ echo "\n---Output: " .countBytes($minOutput). " bytes\n\n{$minOutput}\n\n";
-+ echo "---Expected: " .countBytes($minExpected). " bytes\n\n{$minExpected}\n\n";
-+ echo "---Source: " .countBytes($src). " bytes\n\n{$src}\n\n\n";
-+ }
-+}
-+
-+test_Minify_YuiCSS();
-diff --git a/min_unit_tests/test_all.php b/min_unit_tests/test_all.php
-index ff26b51..caba028 100644
---- a/min_unit_tests/test_all.php
-+++ b/min_unit_tests/test_all.php
-@@ -10,6 +10,7 @@
- require 'test_Minify_CSS.php';
- require 'test_Minify_CSS_UriRewriter.php';
- require 'test_Minify_JS_ClosureCompiler.php';
-+require 'test_Minify_YuiCSS.php';
- require 'test_Minify_CommentPreserver.php';
- require 'test_Minify_HTML.php';
- require 'test_Minify_ImportProcessor.php';
---
-1.7.10
-