Skip to content

winrt: fix crash on access to deleted shared complete handler #461

winrt: fix crash on access to deleted shared complete handler

winrt: fix crash on access to deleted shared complete handler #461

Workflow file for this run

name: Build - Windows
on: [workflow_dispatch, push, pull_request]
env:
TERM: xterm-256color
jobs:
build:
name: ${{ matrix.name }}
runs-on: ${{ matrix.runs-on }}
strategy:
fail-fast: false
matrix:
include:
- name: Build - Windows Win32
runs-on: windows-latest
cmake-args: -A Win32
- name: Build - Windows Win64
runs-on: windows-latest
- name: Build - Windows GCC
runs-on: windows-latest
cmake-args: -G Ninja -D PROXYRES_CODE_COVERAGE=ON
compiler: gcc
cxx-compiler: g++
codecov: windows
binary-dir: build/test
steps:
- name: Install dependencies
run: choco install curl
- name: Install gcc dependencies
if: matrix.compiler == 'gcc'
run: |
# strawberryperl installs incompatible libraries so remove it
choco uninstall --no-progress strawberryperl
choco install ninja --no-progress
- name: Checkout repository
uses: actions/checkout@v3
- name: Generate project
shell: bash
run: |
cmake -S . -B build ${{ matrix.cmake-args }} \
-D CMAKE_BUILD_TYPE=RelWithDebInfo \
-D CMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded \
-D BUILD_SHARED_LIBS=OFF
env:
CC: ${{ matrix.compiler }}
CXX: ${{ matrix.cxx-compiler }}
- name: Build project
run: cmake --build build --config RelWithDebInfo
- name: Setup node version
uses: actions/setup-node@v3
with:
node-version: 18.18.0
- name: Install test dependencies
run: |
corepack enable
yarn install
working-directory: test
- name: Run test http server
shell: bash
run: |
npx pm2 start http_server_cmd.js
sleep 15
working-directory: test
- name: Run test dhcp server
# Used by wpad.dhcp googletest
run: |
npx pm2 start dhcp_server_cmd.js --output dhcp_server.log
sleep 15
working-directory: test
- name: Run tests
run: ctest --verbose -C RelWithDebInfo
working-directory: build
env:
WPAD: true
- name: Download pac from http server
run: curl -v http://127.0.0.1:8080/pac.js
working-directory: test
- name: Dump proxy info
run: netsh winhttp show proxy
- name: Set proxy settings (IE)
run: |
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v AutoConfigURL /t REG_SZ /d "http://wpad/wpad2.dat" /f
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v AutoDetect /t REG_DWORD /d 1 /f
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 1 /f
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /t REG_SZ /d "http=myproxy;https=sproxy:88" /f
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyOverride /t REG_SZ /d "*.foo.com;<local>" /f
- name: Check proxy settings (IE)
shell: bash
run: |
out=$(./proxycli config auto_discover)
echo "Auto discovery: $out"
if [ "$out" = "enabled" ]; then
echo "Auto discovery set successfully"
else
echo "Auto discovery set failed"
exit 1
fi
out=$(./proxycli config auto_config_url)
echo "Auto config url: $out"
if [ "$out" = "http://wpad/wpad2.dat" ]; then
echo "Auto config url set successfully"
else
echo "Auto config url set failed"
exit 1
fi
out=$(./proxycli config proxy http)
echo "Proxy (http): $out"
if [ "$out" = "myproxy" ]; then
echo "Proxy (http) set successfully"
else
echo "Proxy (http) set failed"
exit 1
fi
out=$(./proxycli config proxy https)
echo "Proxy (https): $out"
if [ "$out" = "sproxy:88" ]; then
echo "Proxy (https) set successfully"
else
echo "Proxy (https) set failed"
exit 1
fi
out=$(./proxycli config bypass_list)
echo "Proxy bypass: $out"
if [ "$out" = "*.foo.com,<local>" ]; then
echo "Proxy bypass set successfully"
else
echo "Proxy bypass set failed"
exit 1
fi
working-directory: ${{ matrix.binary-dir || 'build/test/RelWithDebInfo' }}
- name: Turn off proxy settings (IE)
run: |
reg delete "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v AutoConfigURL /f
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /f
- name: Set proxy auto config setting (IE)
run: |
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v AutoConfigURL /t REG_SZ /d "http://127.0.0.1:8080/pac.js" /f
- name: Check proxy resolution (IE)
shell: bash
run: |
out=$(./proxycli resolve https://google.com/)
echo "Proxy for https://google.com/: $out"
if [ "$out" = "direct://" ]; then
echo "Proxy for https://google.com/ set successfully"
else
echo "Proxy for https://google.com/ set failed"
exit 1
fi
out=$(./proxycli resolve https://simple.com/)
echo "Proxy for https://simple.com/: $out"
if [ "$out" = "http://no-such-proxy:80" ]; then
echo "Proxy for https://simple.com/ set successfully"
else
echo "Proxy for https://simple.com/ set failed"
exit 1
fi
out=$(./proxycli resolve https://multi.com/)
echo "Proxy for https://multi.com/: $out"
if [ "$out" = "https://some-such-proxy:443,https://any-such-proxy:41" ]; then
echo "Proxy for https://multi.com/ set successfully"
else
echo "Proxy for https://multi.com/ set failed"
exit 1
fi
working-directory: ${{ matrix.binary-dir || 'build/test/RelWithDebInfo' }}
- name: Reset proxy settings (IE)
run: |
reg delete "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v AutoConfigURL /f
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /f
- name: Generate coverage report
shell: bash
if: always() && matrix.codecov
run: |
python3 -u -m pip install --user gcovr
python3 -m gcovr \
--exclude-unreachable-branches \
--gcov-ignore-parse-errors \
--root . \
--xml \
--output coverage.xml \
--verbose
- name: Upload coverage report
uses: codecov/codecov-action@v2
if: always() && matrix.codecov && env.CODECOV_TOKEN != ''
with:
token: ${{ secrets.CODECOV_TOKEN }}
flags: ${{ matrix.codecov }}
name: ${{ matrix.name }}
verbose: false
fail_ci_if_error: true
env:
CODECOV_TOKEN: "${{ secrets.CODECOV_TOKEN }}"
- name: Upload build errors
uses: actions/upload-artifact@v2
if: failure()
with:
name: Build Errors - ${{ matrix.name }}
path: |
**/CMakeFiles/CMakeOutput.log
**/CMakeFiles/CMakeError.log
**/Testing/Temporary/LastTest.log
**/*.log
retention-days: 3