Skip to content

Fixed memory leak when failing to get proxies for urls. #773

Fixed memory leak when failing to get proxies for urls.

Fixed memory leak when failing to get proxies for urls. #773

Workflow file for this run

name: Build - Ubuntu
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 - Ubuntu Clang
runs-on: ubuntu-latest
compiler: clang
cxx-compiler: clang++
cmake-args: -G Ninja -D PROXYRES_CODE_COVERAGE=ON
gcov-exec: llvm-cov-14 gcov
codecov: ubuntu
- name: Build - Ubuntu Clang (curl)
runs-on: ubuntu-latest
compiler: clang
cxx-compiler: clang++
cmake-args: -G Ninja -D PROXYRES_CODE_COVERAGE=ON -D PROXYRES_CURL=ON
gcov-exec: llvm-cov-14 gcov
codecov: ubuntu_curl
steps:
- name: Install dependencies
run: |
sudo apt update
sudo apt install -y llvm-14 ninja-build libgconf2-dev libjavascriptcoregtk-4.0-dev
- name: Checkout repository
uses: actions/checkout@v3
- name: Generate project
run: |
cmake -S . -B build ${{ matrix.cmake-args }} \
-D CMAKE_BUILD_TYPE=RelWithDebInfo \
-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
run: |
npx pm2 start http_server_cmd.js --output http_server.log
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
# Run as sudo to be able to bind to DHCP client port, then reset
# permissions to code coverage files if necessary
- name: Run tests
run: |
sudo ctest --verbose -C RelWithDebInfo
sudo chmod -R a+rw .
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 (gsettings)
run: |
gsettings get org.gnome.system.proxy autoconfig-url
gsettings get org.gnome.system.proxy mode
gsettings get org.gnome.system.proxy.http host
gsettings get org.gnome.system.proxy.http port
gsettings get org.gnome.system.proxy.https host
gsettings get org.gnome.system.proxy.https port
gsettings get org.gnome.system.proxy ignore-hosts
- name: Set auto proxy settings (gsettings)
run: |
gsettings set org.gnome.system.proxy autoconfig-url 'http://127.0.0.1:8080/pac.js'
gsettings set org.gnome.system.proxy mode 'auto'
- name: Check auto proxy settings (gsettings)
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://127.0.0.1:8080/pac.js" ]; then
echo "Auto config url set successfully"
else
echo "Auto config url set failed"
exit 1
fi
working-directory: build/test
env:
XDG_CURRENT_DESKTOP: GNOME
- name: Check auto proxy resolution (gsettings)
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 http://simple.com/)
echo "Proxy for http://simple.com/: $out"
if [ "$out" = "http://no-such-proxy:80" ]; then
echo "Proxy for http://simple.com/ set successfully"
else
echo "Proxy for http://simple.com/ set failed"
exit 1
fi
out=$(./proxycli resolve https://simple.com/)
echo "Proxy for https://simple.com/: $out"
if [ "$out" = "https://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: build/test
env:
XDG_CURRENT_DESKTOP: GNOME
- name: Set manual proxy settings (gsettings)
run: |
gsettings set org.gnome.system.proxy mode 'manual'
gsettings set org.gnome.system.proxy.http host 'my.proxy1.com'
gsettings set org.gnome.system.proxy.http port 8001
gsettings set org.gnome.system.proxy.https host 'my.proxy2.com'
gsettings set org.gnome.system.proxy.https port 8002
gsettings set org.gnome.system.proxy ignore-hosts "['localhost', '127.0.0.0/8']"
gsettings set org.gnome.system.proxy use-same-proxy false
- name: Check manual proxy settings (gsettings)
shell: bash
run: |
out=$(./proxycli config proxy http)
echo "Proxy (http): $out"
if [ "$out" = "my.proxy1.com:8001" ]; 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" = "my.proxy2.com:8002" ]; 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" = "localhost,127.0.0.0/8" ]; then
echo "Proxy bypass set successfully"
else
echo "Proxy bypass set failed"
exit 1
fi
working-directory: build/test
env:
XDG_CURRENT_DESKTOP: GNOME
- name: Reset proxy settings (gsettings)
run: gsettings set org.gnome.system.proxy mode 'none'
# Run env tests after gsettings since environment variables are set for all
# subsequent steps.
- name: Set proxy settings (env)
run: |
echo "http_proxy=my.proxy3.com:8003" >> $GITHUB_ENV
echo "https_proxy=my.proxy4.com:8004" >> $GITHUB_ENV
echo "no_proxy=localhost,127.0.0.0/8" >> $GITHUB_ENV
- name: Check proxy settings (env)
shell: bash
run: |
out=$(./proxycli config proxy http)
echo "Proxy (http): $out"
if [ "$out" = "my.proxy3.com:8003" ]; 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" = "my.proxy4.com:8004" ]; 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" = "localhost,127.0.0.0/8" ]; then
echo "Proxy bypass set successfully"
else
echo "Proxy bypass set failed"
exit 1
fi
working-directory: build/test
- name: Reset proxy settings (env)
run: |
echo "http_proxy=" >> $GITHUB_ENV
echo "https_proxy=" >> $GITHUB_ENV
echo "no_proxy=" >> $GITHUB_ENV
- name: Generate coverage report
if: always() && matrix.codecov
run: |
python3 -u -m pip install --user gcovr
python3 -m gcovr \
--exclude-unreachable-branches \
--gcov-ignore-parse-errors \
--gcov-executable "${{ matrix.gcov-exec || 'gcov' }}" \
--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