mirror of
https://github.com/xroche/httrack.git
synced 2026-07-23 09:09:05 +03:00
* Strip only the scheme's own default port, not :80 on every scheme hts_strip_default_port treated 80 as the default for every scheme, so an explicit :80 on a non-http URL was dropped and the fetch silently moved to that scheme's real default: https://h:80/x became https://h/x (fetched on 443), ftp likewise. The reverse gap: a scheme's own default (443 https, 21 ftp) was never stripped, so https://h:443/x kept a redundant port and would not dedup against the portless form. Derive the default from lien's scheme (80 http, 443 https, 21 ftp; 80 when absent or unknown) and strip only when the port equals that. Same family as #627/#614. Closes #638 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Signed-off-by: Xavier Roche <roche@httrack.com> * Exclude the auth-bypass CodeQL query and pin case-insensitive scheme matching cpp/user-controlled-bypass models auth-bypass-by-spoofing, but httrack has no auth or access-control surface; its nearest downstream decision, the +/- crawl filter, is a mirror boundary, not a security one. Exclude it like the world-writable query. The stripport self-test's scheme detection is case-insensitive (strfield/streql) but nothing pinned it: a case-sensitive rewrite would strip :80 from HTTPS:// unnoticed. Replace the non-discriminating :8443 case (no scheme defaults to 8443, so it passes for any impl) with HTTPS://h:80, which must keep its port. Note at scheme_default_port that schemeless/protocol-relative links default to 80. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Signed-off-by: Xavier Roche <roche@httrack.com> * Tighten the #638 comments Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Signed-off-by: Xavier Roche <roche@httrack.com> --------- Signed-off-by: Xavier Roche <roche@httrack.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
73 lines
2.2 KiB
YAML
73 lines
2.2 KiB
YAML
# CodeQL static analysis (C). The security-extended suite covers the classes
|
|
# this codebase actually fights: overflows, tainted-size allocs, format bugs.
|
|
name: CodeQL
|
|
|
|
on:
|
|
push:
|
|
branches: [master]
|
|
pull_request:
|
|
schedule:
|
|
# Weekly re-scan of master so new/updated queries land without a push.
|
|
- cron: "17 4 * * 1"
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
concurrency:
|
|
group: codeql-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
analyze:
|
|
name: analyze (c-cpp)
|
|
runs-on: ubuntu-24.04
|
|
permissions:
|
|
contents: read
|
|
# Upload findings to the repo's code-scanning dashboard.
|
|
security-events: write
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
with:
|
|
submodules: recursive
|
|
|
|
- name: Install build dependencies
|
|
run: |
|
|
set -euo pipefail
|
|
sudo apt-get update
|
|
sudo apt-get install -y --no-install-recommends \
|
|
build-essential autoconf automake libtool autoconf-archive \
|
|
zlib1g-dev libssl-dev
|
|
|
|
- uses: github/codeql-action/init@v4
|
|
with:
|
|
languages: c-cpp
|
|
build-mode: manual
|
|
queries: security-extended
|
|
# fopen's umask-controlled 0666 is intended for mirror/cache/log
|
|
# output; the one credential file (cookies.txt) is kept 0600 on Unix.
|
|
config: |
|
|
paths-ignore:
|
|
# Demo callback samples, not part of libhttrack.
|
|
- libtest
|
|
# ProxyTrack: a separate legacy binary with no auth surface; its
|
|
# recv/cache-parse code trips taint queries by design.
|
|
- src/proxy
|
|
query-filters:
|
|
- exclude:
|
|
id: cpp/world-writable-file-creation
|
|
# Models auth-bypass-by-spoofing; httrack has no auth surface, its +/- crawl filter is a mirror boundary, not a security one.
|
|
- exclude:
|
|
id: cpp/user-controlled-bypass
|
|
|
|
# Manual build: CodeQL traces the compiler, so build exactly what ships.
|
|
- name: Build
|
|
run: |
|
|
set -euo pipefail
|
|
autoreconf -fi
|
|
./configure
|
|
make -j"$(nproc)"
|
|
|
|
- uses: github/codeql-action/analyze@v4
|
|
with:
|
|
category: "/language:c-cpp"
|