diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index 9c2ae9c..663607f 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@v2 - with: + with: fetch-depth: 0 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v2 @@ -29,7 +29,7 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip - pip install darker + pip install darker black==21.12b0 - name: Lint with darker run: | darker -r 60625f241f298b5039cb2debc365db38aa7bb522 --check --diff . || ( diff --git a/IPython/tests/cve.py b/IPython/tests/cve.py index 026415a..9e0f6df 100644 --- a/IPython/tests/cve.py +++ b/IPython/tests/cve.py @@ -11,46 +11,55 @@ import string import subprocess import time + def test_cve_2022_21699(): """ Here we test CVE-2022-21699. - We create a temporary directory, cd into it. - Make a profile file that should not be executed and start IPython in a subprocess, + We create a temporary directory, cd into it. + Make a profile file that should not be executed and start IPython in a subprocess, checking for the value. """ - dangerous_profile_dir = Path('profile_default') + dangerous_profile_dir = Path("profile_default") - dangerous_startup_dir = dangerous_profile_dir / 'startup' - dangerous_expected = 'CVE-2022-21699-'+''.join([random.choice(string.ascii_letters) for i in range(10)]) + dangerous_startup_dir = dangerous_profile_dir / "startup" + dangerous_expected = "CVE-2022-21699-" + "".join( + [random.choice(string.ascii_letters) for i in range(10)] + ) with TemporaryWorkingDirectory() as t: dangerous_startup_dir.mkdir(parents=True) - (dangerous_startup_dir/ 'foo.py').write_text(f'print("{dangerous_expected}")') + (dangerous_startup_dir / "foo.py").write_text(f'print("{dangerous_expected}")') # 1 sec to make sure FS is flushed. - #time.sleep(1) - cmd = [sys.executable,'-m', 'IPython'] + # time.sleep(1) + cmd = [sys.executable, "-m", "IPython"] env = os.environ.copy() - env['IPY_TEST_SIMPLE_PROMPT'] = '1' - + env["IPY_TEST_SIMPLE_PROMPT"] = "1" # First we fake old behavior, making sure the profile is/was actually dangerous - p_dangerous = subprocess.Popen(cmd + [f'--profile-dir={dangerous_profile_dir}'], env=env, stdin=subprocess.PIPE, - stdout=subprocess.PIPE, stderr=subprocess.PIPE) + p_dangerous = subprocess.Popen( + cmd + [f"--profile-dir={dangerous_profile_dir}"], + env=env, + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) out_dangerous, err_dangerouns = p_dangerous.communicate(b"exit\r") assert dangerous_expected in out_dangerous.decode() # Now that we know it _would_ have been dangerous, we test it's not loaded - p = subprocess.Popen(cmd, env=env, stdin=subprocess.PIPE, - stdout=subprocess.PIPE, stderr=subprocess.PIPE) + p = subprocess.Popen( + cmd, + env=env, + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) out, err = p.communicate(b"exit\r") - assert b'IPython' in out + assert b"IPython" in out assert dangerous_expected not in out.decode() - assert err == b'' - - - + assert err == b""