From 7acc828abff54296d7068d6ae5024bbf0190b2b3 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Mon, 1 Jul 2019 13:20:03 +0200 Subject: Skip perf-sensitive fileinfo tests --- ext/fileinfo/tests/cve-2014-3538-mb.phpt | 3 +++ ext/fileinfo/tests/cve-2014-3538.phpt | 3 +++ 2 files changed, 6 insertions(+) diff --git a/ext/fileinfo/tests/cve-2014-3538-mb.phpt b/ext/fileinfo/tests/cve-2014-3538-mb.phpt index e462093fb1..cc9084dc79 100644 --- a/ext/fileinfo/tests/cve-2014-3538-mb.phpt +++ b/ext/fileinfo/tests/cve-2014-3538-mb.phpt @@ -4,6 +4,9 @@ Bug #66731: file: extensive backtraking --FILE-- --FILE-- Date: Mon, 1 Jul 2019 16:25:28 +0200 Subject: Generate less code in compile time binary op test Don't generate try {} blocks for the operations that don't throw. --- Zend/tests/runtime_compile_time_binary_operands.phpt | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Zend/tests/runtime_compile_time_binary_operands.phpt b/Zend/tests/runtime_compile_time_binary_operands.phpt index 897ce3e1a5..afced7af0c 100644 --- a/Zend/tests/runtime_compile_time_binary_operands.phpt +++ b/Zend/tests/runtime_compile_time_binary_operands.phpt @@ -108,16 +108,16 @@ function prepareLine($op1, $op2, $cmp, $operator) { $error = "echo '" . addcslashes("$op1_p $operator $op2_p", "\\'") . '\', "\n"; $f++;'; $compare = "@($op1_p $operator $op2_p)"; - $line = "\$c++; try { "; + $line = "\$c++; "; try { $result = makeParam($cmp()); - $line .= "if (" . ($result === "(NAN)" ? "!is_nan($compare)" : "$compare !== $result") . ") { $error } } catch (Error \$e) { $error }"; + $line .= "if (" . ($result === "(NAN)" ? "!is_nan($compare)" : "$compare !== $result") . ") { $error }"; } catch (Error $e) { if (get_class($e) == "Error") { return "// exempt $op1_p $operator $op2_p from checking, it generates a compile time error"; } $msg = makeParam($e->getMessage()); - $line .= "$compare; $error } catch (Error \$e) { if (\$e->getMessage() !== $msg) { $error } }"; + $line .= "try { $compare; $error } catch (Error \$e) { if (\$e->getMessage() !== $msg) { $error } }"; } return $line; } @@ -130,7 +130,10 @@ fwrite($file, " Date: Mon, 1 Jul 2019 10:26:29 +0200 Subject: Setup msan on azure This uses a separate job template, because msan requires all used libraries (apart from glibc) to be instrumented, so we can't link any external libraries unless we recompile them. As such, we need a much more minimal configure. --- azure-pipelines.yml | 5 ++++ azure/apt.yml | 1 + azure/msan_job.yml | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++ azure/test.yml | 1 + 4 files changed, 83 insertions(+) create mode 100644 azure/msan_job.yml diff --git a/azure-pipelines.yml b/azure-pipelines.yml index c0be304b5e..c6f047145b 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -64,3 +64,8 @@ jobs: LDFLAGS='-fsanitize=undefined,address' runTestsParameters: --asan timeoutInMinutes: 120 + - template: azure/msan_job.yml + parameters: + configurationName: DEBUG_ZTS_MSAN + configurationParameters: '--enable-debug --enable-maintainer-zts' + runTestsParameters: --asan diff --git a/azure/apt.yml b/azure/apt.yml index 843ae1daf1..5c0a9a0c55 100644 --- a/azure/apt.yml +++ b/azure/apt.yml @@ -34,5 +34,6 @@ steps: libargon2-0-dev \ postgresql \ postgresql-contrib \ + llvm \ ${{ parameters.packages }} displayName: 'APT' diff --git a/azure/msan_job.yml b/azure/msan_job.yml new file mode 100644 index 0000000000..bae65e018e --- /dev/null +++ b/azure/msan_job.yml @@ -0,0 +1,76 @@ +parameters: + configurationName: '' + configurationParameters: '' + runTestsParameters: '' + timeoutInMinutes: 60 + +jobs: + - job: ${{ parameters.configurationName }} + timeoutInMinutes: ${{ parameters.timeoutInMinutes }} + pool: + vmImage: 'ubuntu-latest' + steps: + - template: apt.yml + - script: | + export CC=clang + export CXX=clang++ + export CFLAGS="-fsanitize=memory -DZEND_TRACK_ARENA_ALLOC" + export LDFLAGS="-fsanitize=memory" + ./buildconf --force + # msan requires all used libraries to be instrumented, + # so we should avoiding linking against anything but libc here + ./configure ${{ parameters.configurationParameters }} \ + --prefix=/usr \ + --without-sqlite3 \ + --without-pdo-sqlite \ + --without-libxml \ + --disable-dom \ + --disable-simplexml \ + --disable-xml \ + --disable-xmlreader \ + --disable-xmlwriter \ + --without-pcre-jit \ + --enable-phpdbg \ + --enable-fpm \ + --with-pdo-mysql=mysqlnd \ + --with-mysqli=mysqlnd \ + --without-pear \ + --enable-exif \ + --enable-sysvsem \ + --enable-sysvshm \ + --enable-shmop \ + --enable-pcntl \ + --enable-mbstring \ + --disable-mbregex \ + --enable-sockets \ + --enable-bcmath \ + --enable-calendar \ + --enable-ftp \ + --enable-zend-test \ + --enable-werror \ + --with-config-file-path=/etc \ + --with-config-file-scan-dir=/etc/php.d + displayName: 'Configure Build' + - script: make -j$(/usr/bin/nproc) >/dev/null + displayName: 'Make Build' + - script: | + sudo make install + sudo mkdir /etc/php.d + sudo chmod 777 /etc/php.d + echo mysqli.default_socket=/var/run/mysqld/mysqld.sock > /etc/php.d/mysqli.ini + echo pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock > /etc/php.d/pdo_mysql.ini + displayName: 'Install Build' + - script: | + mysql -uroot -proot -e "CREATE DATABASE IF NOT EXISTS test" + displayName: 'Setup' + - template: test.yml + parameters: + configurationName: ${{ parameters.configurationName }} + runTestsParameters: ${{ parameters.runTestsParameters }} + - template: test.yml + parameters: + configurationName: ${{ parameters.configurationName }} + runTestsName: 'OpCache' + runTestsParameters: >- + ${{ parameters.runTestsParameters }} + -d zend_extension=opcache.so -d opcache.enable_cli=1 diff --git a/azure/test.yml b/azure/test.yml index 9821010f11..3f6963c706 100644 --- a/azure/test.yml +++ b/azure/test.yml @@ -12,6 +12,7 @@ steps: export TEST_PHP_JUNIT=junit.xml export REPORT_EXIT_STATUS=no export SKIP_IO_CAPTURE_TESTS=1 + export MSAN_SYMBOLIZER_PATH=/usr/lib/llvm-3.8/bin/llvm-symbolizer rm -rf junit.xml | true php run-tests.php -P -q \ -j$(/usr/bin/nproc) \ -- cgit v1.2.1