From a60cdec058fda7bad3e4d53397b11732895f753c Mon Sep 17 00:00:00 2001 From: Daniel Krupp Date: Tue, 21 Jan 2025 17:21:40 +0100 Subject: [PATCH] Fix the execution environment initialization : The execution environment must be package internal for internal binaries and original for external binaries --- .../analyzers/analyzer_base.py | 15 +++++++++++---- analyzer/tests/unit/test_env_var.py | 8 ++++++++ .../f59dfe4623fa_clear_legacy_web_sessions.py | 2 +- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/analyzer/codechecker_analyzer/analyzers/analyzer_base.py b/analyzer/codechecker_analyzer/analyzers/analyzer_base.py index 473b908338..8d0eb4358f 100644 --- a/analyzer/codechecker_analyzer/analyzers/analyzer_base.py +++ b/analyzer/codechecker_analyzer/analyzers/analyzer_base.py @@ -105,16 +105,15 @@ def construct_result_handler(self, buildaction, report_output, def analyze(self, analyzer_cmd, res_handler, proc_callback=None, env=None): """ Run the analyzer. + Don't specify the env unless really needed! + The package internal or original env will be selected + based on the location of the called binary. """ LOG.debug('Running analyzer ...') LOG.debug_analyzer('\n%s', ' '.join([shlex.quote(x) for x in analyzer_cmd])) - if not env: - env = analyzer_context.get_context().get_env_for_bin( - analyzer_cmd[0]) - res_handler.analyzer_cmd = analyzer_cmd try: ret_code, stdout, stderr \ @@ -149,6 +148,10 @@ def run_proc(command, cwd=None, proc_callback=None, env=None): """ Just run the given command and return the return code and the stdout and stderr outputs of the process. + + Don't specify the env unless really needed! + The package internal or original env will be selected + based on the location of the called binary. """ def signal_handler(signum, _): @@ -161,6 +164,10 @@ def signal_handler(signum, _): signal.signal(signal.SIGINT, signal_handler) + if not env: + env = analyzer_context.get_context().get_env_for_bin( + command[0]) + LOG.debug('\nexecuting:%s\n', command) LOG.debug('\nENV:\n') LOG.debug(env) diff --git a/analyzer/tests/unit/test_env_var.py b/analyzer/tests/unit/test_env_var.py index ebf24c4477..3967da3f3e 100644 --- a/analyzer/tests/unit/test_env_var.py +++ b/analyzer/tests/unit/test_env_var.py @@ -17,6 +17,7 @@ from codechecker_analyzer import analyzer_context from codechecker_analyzer.analyzers.gcc.analyzer import Gcc +from codechecker_analyzer.analyzers.analyzer_base import SourceAnalyzer from codechecker_analyzer.buildlog import log_parser @@ -156,6 +157,13 @@ def test_cc_analyzer_internal_env(self): env_txt = str(clang_env) self.assertTrue(env_txt.find("internal_package_lib") == -1) + # env is an external binary (/usr/bin/env), + # so the internal_package_lib must not be in the + # LD_LIBRARY_PATH. + (_, out_txt, _) = SourceAnalyzer.run_proc("env") + self.assertTrue(out_txt.find("internal_package_lib") == -1) + self.assertTrue(out_txt.find("usr/bin") != -1) + os.remove(layout_cfg_file) os.remove(packaged_clang_file) os.rmdir(cc_bin_dir) diff --git a/web/server/codechecker_server/migrations/config/versions/f59dfe4623fa_clear_legacy_web_sessions.py b/web/server/codechecker_server/migrations/config/versions/f59dfe4623fa_clear_legacy_web_sessions.py index 65cb28714f..e4a0785b46 100644 --- a/web/server/codechecker_server/migrations/config/versions/f59dfe4623fa_clear_legacy_web_sessions.py +++ b/web/server/codechecker_server/migrations/config/versions/f59dfe4623fa_clear_legacy_web_sessions.py @@ -12,7 +12,6 @@ import sqlalchemy as sa - # Revision identifiers, used by Alembic. revision = 'f59dfe4623fa' down_revision = '00099e8bc212' @@ -23,5 +22,6 @@ def upgrade(): op.execute("DELETE FROM auth_sessions WHERE can_expire") + def downgrade(): pass