Page MenuHomePhorge

D25114.1737254933.diff
No OneTemporary

D25114.1737254933.diff

diff --git a/support/startup/__tests__/PreambleUtilsTestCase.php b/support/startup/__tests__/PreambleUtilsTestCase.php
new file mode 100755
--- /dev/null
+++ b/support/startup/__tests__/PreambleUtilsTestCase.php
@@ -0,0 +1,123 @@
+#!/usr/bin/env php
+<?php
+
+/**
+ * /startup/ is not a Phutil library, so it can't use the phutil test fixture.
+ * This script will just run the tests directly.
+ *
+ * NOTE: This test file will not run as part of `arc unit` run!
+ */
+
+
+final class PreambleUtilsTestCase {
+
+
+ public function testTrustXForwardValues() {
+ // For specific values of `$_SERVER['HTTP_X_FORWARDED_FOR']`,
+ // `$_SERVER['REMOTE_ADDR']` will be updated with the result.
+
+
+ $undefined = 'SPECIAL::UNDEFINED';
+ $null_value = 'SPECIAL::NULL';
+
+ $test_cases = array(
+ 'abc' => 'abc',
+ $null_value => $undefined,
+ '' => $undefined,
+
+ // Strange, unexpected cases:
+ 144 => '144',
+ );
+
+ foreach ($test_cases as $input => $expected) {
+ switch ($input) {
+ case $undefined:
+ unset($_SERVER['HTTP_X_FORWARDED_FOR']);
+ break;
+
+ case $null_value:
+ $_SERVER['HTTP_X_FORWARDED_FOR'] = null;
+ break;
+
+ default:
+ $_SERVER['HTTP_X_FORWARDED_FOR'] = $input;
+ break;
+ }
+
+ unset($_SERVER['REMOTE_ADDR']);
+
+ preamble_trust_x_forwarded_for_header();
+
+ if (!isset($_SERVER['REMOTE_ADDR'])) {
+ if ($expected === $undefined) {
+ // test pass
+ continue;
+ } else {
+ $this->failTest("Failed for input {$input} - result is not defined!");
+ }
+ }
+
+ $actual = $_SERVER['REMOTE_ADDR'];
+
+ if ($actual !== $expected) {
+ var_dump($actual);
+
+ $this->failTest(
+ "Failed for input {$input} - actual output is {$actual}");
+ }
+
+ }
+
+ }
+
+
+ private function failTest($message = null) {
+ echo $message;
+ echo "\n";
+ throw new Exception();
+ }
+
+ /**
+ * Run all tests in this class.
+ *
+ * Return: True if all tests passed; False if any test failed.
+ */
+ final public function run() {
+ $reflection = new ReflectionClass($this);
+ $methods = $reflection->getMethods();
+
+ $any_fail = false;
+
+ // Try to ensure that poorly-written tests which depend on execution order
+ // (and are thus not properly isolated) will fail.
+ shuffle($methods);
+
+ foreach ($methods as $method) {
+ $name = $method->getName();
+ if (!preg_match('/^test/', $name)) {
+ continue;
+ }
+
+ try {
+ call_user_func_array(
+ array($this, $name),
+ array());
+ echo "Test passed: {$name}\n";
+ } catch (Throwable $ex) {
+ $any_fail = true;
+ echo "Failed test: {$name}\n";
+ }
+ }
+ return !$any_fail;
+ }
+
+}
+
+require_once dirname(__DIR__).'/preamble-utils.php';
+
+$test_case = new PreambleUtilsTestCase();
+$good = $test_case->run();
+
+if (!$good) {
+ exit(3);
+}
diff --git a/support/startup/preamble-utils.php b/support/startup/preamble-utils.php
--- a/support/startup/preamble-utils.php
+++ b/support/startup/preamble-utils.php
@@ -21,7 +21,7 @@
}
$forwarded_for = $_SERVER['HTTP_X_FORWARDED_FOR'];
- if (!phutil_nonempty_string($forwarded_for)) {
+ if (!strlen($forwarded_for)) {
return;
}

File Metadata

Mime Type
text/plain
Expires
Sun, Jan 19, 02:48 (20 h, 57 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1108697
Default Alt Text
D25114.1737254933.diff (3 KB)

Event Timeline