HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux ip-172-31-42-149 5.15.0-1084-aws #91~20.04.1-Ubuntu SMP Fri May 2 07:00:04 UTC 2025 aarch64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //proc/self/cwd/wp-content/plugins/wp-sheet-editor-premium/modules/formulas/inc/math-calculator.php
<?php

/**
 * Math calculator. It handles the math operations.
 */
class VG_Math_Calculator {

	const PATTERN = '/(?:\-?\d+(?:\.?\d+)?[\+\-\*\/])+\-?\d+(?:\.?\d+)?/';
	const PARENTHESIS_DEPTH = 10;

	public function calculate($input) {
		if (strpos($input, '+') != null || strpos($input, '-') != null || strpos($input, '/') != null || strpos($input, '*') != null) {
			//  Remove white spaces and invalid math chars
			$input = str_replace(',', '.', $input);
			$input = preg_replace('[^0-9\.\+\-\*\/\(\)]', '', $input);

			//  Calculate each of the parenthesis from the top
			$i = 0;
			while (strpos($input, '(') || strpos($input, ')')) {
				$input = preg_replace_callback('/\(([^\(\)]+)\)/', 'self::callback', $input);

				$i++;
				if ($i > self::PARENTHESIS_DEPTH) {
					break;
				}
			}

			//  Calculate the result
			if (preg_match(self::PATTERN, $input, $match)) {
				return $this->compute($match[0]);
			}

			return 0;
		}

		return $input;
	}

	private function compute($input) {
		$compute = create_function('', 'return ' . $input . ';');

		return 0 + $compute();
	}

	private function callback($input) {
		if (is_numeric($input[1])) {
			return $input[1];
		} elseif (preg_match(self::PATTERN, $input[1], $match)) {
			return $this->compute($match[0]);
		}

		return 0;
	}

}