Detect obviously erroneous "memory_limit" configurations
Summary: See comment. ALSO: THIS DIFF IS AMAZING. Test Plan: Changed my memory limit to something absurd, got yelled at. Reviewed By: mroch Reviewers: colmdoyle, jungejason, aran, tuomaspelkonen, codeblock, tomo, mroch, hsb CC: aran, mroch, epriestley Differential Revision: 657
This commit is contained in:
		| @@ -19,6 +19,9 @@ | |||||||
| $__start__ = microtime(true); | $__start__ = microtime(true); | ||||||
|  |  | ||||||
| error_reporting(E_ALL | E_STRICT); | error_reporting(E_ALL | E_STRICT); | ||||||
|  |  | ||||||
|  | phabricator_detect_insane_memory_limit(); | ||||||
|  |  | ||||||
| ini_set('memory_limit', -1); | ini_set('memory_limit', -1); | ||||||
|  |  | ||||||
| $env = getenv('PHABRICATOR_ENV'); // Apache | $env = getenv('PHABRICATOR_ENV'); // Apache | ||||||
| @@ -206,3 +209,31 @@ function phabricator_fatal_config_error($msg) { | |||||||
|  |  | ||||||
|   die(); |   die(); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | function phabricator_detect_insane_memory_limit() { | ||||||
|  |   $memory_limit = ini_get('memory_limit'); | ||||||
|  |   $char_limit   = 12; | ||||||
|  |   if (strlen($memory_limit) <= $char_limit) { | ||||||
|  |     return; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   // colmdoyle ran into an issue on an Ubuntu box with Suhosin where his | ||||||
|  |   // 'memory_limit' was set to: | ||||||
|  |   // | ||||||
|  |   //   3232323232323232323232323232323232323232323232323232323232323232M | ||||||
|  |   // | ||||||
|  |   // Not a typo. A wizard did it. | ||||||
|  |   // | ||||||
|  |   // Anyway, with this 'memory_limit', the machine would immediately fatal | ||||||
|  |   // when executing the ini_set() later. I wasn't able to reproduce this on my | ||||||
|  |   // EC2 Ubuntu + Suhosin box, but verified that it caused the problem on his | ||||||
|  |   // machine and that setting it to a more sensible value fixed it. Since I | ||||||
|  |   // have no idea how to actually trigger the issue, we look for a coarse | ||||||
|  |   // approximation of it (a memory_limit setting more than 12 characters in | ||||||
|  |   // length). | ||||||
|  |  | ||||||
|  |   phabricator_fatal_config_error( | ||||||
|  |     "Your PHP 'memory_limit' is set to something ridiculous ". | ||||||
|  |     "(\"{$memory_limit}\"). Set it to a more reasonable value (it must be no ". | ||||||
|  |     "more than {$char_limit} characters long)."); | ||||||
|  | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 epriestley
					epriestley