Releases: ATropichev/WinPublicIP-cpp
v1.0.3
English
What's fixed
-
Configuration repair — if
%APPDATA%\WinPublicIP\config.jsonis malformed, the app now saves the original file asconfig.invalid.YYYYMMDD-HHMMSS.jsonand writes a fresh default configuration. -
Configuration normalization backup — if
config.jsonis valid JSON but contains values that must be normalized, the original file is also backed up before the repaired config is written. -
HTTP response validation — WinHTTP responses must now return a successful
2xxstatus code, oversized response bodies are rejected, and diagnostic errors include the HTTP status code. -
Public IP validation — IP provider responses are accepted only if they parse as valid IPv4 or IPv6 addresses.
-
Geolocation validation — the default
ip-api.comprovider now requestsstatus,messageand requiresstatus: "success"before applying geolocation data.
Documentation
- README now documents HTTP/geolocation response validation.
- README now documents automatic
config.jsonbackup and repair behavior in English and Russian.
Download
| File | Size | Requirements |
|---|---|---|
WinPublicIP.exe |
~545 KB | No prerequisites — statically linked, no VC++ Redistributable needed |
SHA256 checksum:
| File | SHA256 |
|---|---|
WinPublicIP.exe |
01EC1CEB5C1E1269EECB1176405DA467B2E5E8C0F0D9D45DB15A0E986E706155 |
Requirements
Windows 10 / 11 / Server 2019+, x64
Русский
Что исправлено
-
Восстановление конфигурации — если
%APPDATA%\WinPublicIP\config.jsonповреждён, приложение теперь сохраняет исходный файл какconfig.invalid.YYYYMMDD-HHMMSS.jsonи записывает новый конфиг с настройками по умолчанию. -
Backup при нормализации конфигурации — если
config.jsonявляется валидным JSON, но содержит значения, которые нужно нормализовать, исходный файл также сохраняется в backup перед записью исправленного конфига. -
Проверка HTTP-ответов — WinHTTP-ответы теперь должны иметь успешный статус
2xx, слишком большие тела ответов отклоняются, а диагностические ошибки содержат HTTP status code. -
Проверка внешнего IP — ответы IP-провайдеров принимаются только если они являются валидными IPv4 или IPv6 адресами.
-
Проверка геолокации — дефолтный провайдер
ip-api.comтеперь запрашиваетstatus,messageи требуетstatus: "success"перед применением геоданных.
Документация
- README теперь описывает проверку HTTP-ответов и ответов геолокации.
- README теперь описывает автоматический backup и восстановление
config.jsonна английском и русском языках.
Скачать
| Файл | Размер | Требования |
|---|---|---|
WinPublicIP.exe |
~545 КБ | Без зависимостей — статическая линковка, VC++ Redistributable не нужен |
Контрольная сумма SHA256:
| Файл | SHA256 |
|---|---|
WinPublicIP.exe |
01EC1CEB5C1E1269EECB1176405DA467B2E5E8C0F0D9D45DB15A0E986E706155 |
Системные требования
Windows 10 / 11 / Server 2019+, x64
v1.0.2
English
What's fixed
-
Refresh thread lifetime — background refresh work no longer uses detached threads that could outlive the tray application object. Refresh shutdown is now coordinated, and pending refresh messages are cleaned up safely.
-
Stale refresh results — manual and timer refreshes are protected from overlapping updates. Only the current refresh result is applied to the tray state.
-
Settings dialog message loop — the settings dialog no longer exits via
PostQuitMessage. It now uses a local modal loop and disables the parent window while open. -
HTTP request handling — query strings are now preserved in WinHTTP requests, response status codes are checked, and response reads are validated.
-
IP and configuration validation — external IP responses are validated as IPv4/IPv6 before use. JSON settings are normalized and invalid values fall back to safe defaults.
-
WinAPI hardening — clipboard and embedded resource loading paths now check allocation/API failures and avoid leaking memory on error paths.
Documentation
- Added a bilingual code review document with findings and remediation notes.
- Removed the unused
homeCountrysetting from the documented configuration.
Download
| File | Size | Requirements |
|---|---|---|
WinPublicIP.exe |
~482 KB | No prerequisites — statically linked, no VC++ Redistributable needed |
SHA256 checksum:
| File | SHA256 |
|---|---|
WinPublicIP.exe |
FD0727BA9669A8A23BBA839C11CA141A16BE26BAFCC5363238B047FC6B865D81 |
Requirements
Windows 10 / 11 / Server 2019+, x64
Русский
Что исправлено
-
Жизненный цикл потоков обновления — фоновые обновления больше не используют detached-потоки, которые могли пережить объект приложения в трее. Завершение refresh-потока теперь координируется, а ожидающие сообщения обновления очищаются безопасно.
-
Устаревшие результаты обновления — ручное обновление и обновление по таймеру защищены от пересечения. К состоянию трея применяется только актуальный результат refresh-запроса.
-
Message loop диалога настроек — диалог настроек больше не завершается через
PostQuitMessage. Теперь используется локальный modal loop, а родительское окно отключается на время открытия диалога. -
Обработка HTTP-запросов — query string теперь сохраняется в WinHTTP-запросах, HTTP status code проверяется, чтение ответа валидируется.
-
Валидация IP и конфигурации — ответы провайдеров внешнего IP проверяются как IPv4/IPv6 перед использованием. JSON-настройки нормализуются, некорректные значения заменяются безопасными значениями по умолчанию.
-
Усиление WinAPI-путей — копирование в clipboard и загрузка встроенных ресурсов теперь проверяют ошибки выделения памяти/API и не протекают на ошибочных путях.
Документация
- Добавлен двуязычный документ code review с найденными проблемами и рекомендациями по устранению.
- Неиспользуемая настройка
homeCountryудалена из документированной конфигурации.
Скачать
| Файл | Размер | Требования |
|---|---|---|
WinPublicIP.exe |
~482 КБ | Без зависимостей — статическая линковка, VC++ Redistributable не нужен |
Контрольная сумма SHA256:
| Файл | SHA256 |
|---|---|
WinPublicIP.exe |
FD0727BA9669A8A23BBA839C11CA141A16BE26BAFCC5363238B047FC6B865D81 |
Системные требования
Windows 10 / 11 / Server 2019+, x64
v1.0.1
English
What's fixed
-
GDI handle leak —
CreateCompatibleBitmap(GetDC(nullptr), ...)was called on every refresh without releasing the DC, causing progressive exhaustion of USER/GDI resources. After prolonged use this resulted in the tray icon disappearing and context menu items not rendering. Fixed by usingCreateBitmap(32, 32, 1, 1, nullptr)which requires no DC. -
WinHTTP handle leak on exception —
hSession,hConnect, andhRequestwere not guaranteed to close if an exception was thrown mid-request. Replaced manualWinHttpCloseHandlecalls with a RAIIWinHttpHandlewrapper struct. Also fixedToWide()to passs.size()instead of-1toMultiByteToWideChar, preventing an embedded null terminator in the resultingwstring.
Download
| File | Size | Requirements |
|---|---|---|
WinPublicIP.exe |
~477 KB | No prerequisites — statically linked, no VC++ Redistributable needed |
SHA256 checksum:
| File | SHA256 |
|---|---|
WinPublicIP.exe |
DC83D7D779F6D441CC4B140468E21BD6770DD7B73ABF1ED4F0469952C31BBC4A |
Requirements
Windows 10 / 11 / Server 2019+, x64
Русский
Что исправлено
-
Утечка GDI-хэндлов — при каждом обновлении вызывался
CreateCompatibleBitmap(GetDC(nullptr), ...)без освобождения DC, что со временем исчерпывало USER/GDI-ресурсы системы. После длительной работы это приводило к исчезновению иконки в трее и пропаданию пунктов контекстного меню. Исправлено заменой наCreateBitmap(32, 32, 1, 1, nullptr), не требующий DC. -
Утечка WinHTTP-хэндлов при исключении —
hSession,hConnectиhRequestне гарантированно закрывались при возникновении исключения в процессе запроса. Ручные вызовыWinHttpCloseHandleзаменены RAII-обёрткойWinHttpHandle. Также исправлена функцияToWide(): теперь передаётсяs.size()вместо-1вMultiByteToWideChar, что предотвращало появление нулевого символа внутри результирующейwstring.
Скачать
| Файл | Размер | Требования |
|---|---|---|
WinPublicIP.exe |
~477 КБ | Без зависимостей — статическая линковка, VC++ Redistributable не нужен |
Контрольная сумма SHA256:
| Файл | SHA256 |
|---|---|
WinPublicIP.exe |
DC83D7D779F6D441CC4B140468E21BD6770DD7B73ABF1ED4F0469952C31BBC4A |
Системные требования
Windows 10 / 11 / Server 2019+, x64
v1.0.0
English
Windows tray application showing public IP, country flag and VPN status.
Native C++17 / Win32 — single .exe, no runtime required.
Features
- Country flag (60+ countries, embedded)
- Public IP in tooltip; copy to clipboard in one click
- VPN indicator: green shield (on) / grey (off)
- Auto-detection: TAP, tun, WireGuard, OpenVPN, Tailscale, ZeroTier, PPP, IKEv2
- Configurable refresh interval (Settings dialog, 10–3600 sec)
- Balloon notification on IP change
- Start with Windows option
Download
| File | Size | Requirements |
|---|---|---|
WinPublicIP.exe |
~477 KB | No prerequisites — statically linked, no VC++ Redistributable needed |
SHA256 checksum:
| File | SHA256 |
|---|---|
WinPublicIP.exe |
A5B14B07592047ABF23209327C2E42243892BC5F8806DDF9D2DFDAC5C10584CD |
Requirements
Windows 10 / 11 / Server 2019+, x64
Русский
Приложение для системного трея Windows: публичный IP, флаг страны, статус VPN.
Нативный C++17 / Win32 — один .exe, рантайм не требуется.
Возможности
- Флаг страны (60+ стран, встроены в файл)
- Внешний IP в tooltip; копирование в буфер одним кликом
- Индикатор VPN: зелёный щит (включён) / серый (выключен)
- Авто-определение: TAP, tun, WireGuard, OpenVPN, Tailscale, ZeroTier, PPP, IKEv2
- Настраиваемый интервал обновления (диалог, 10–3600 сек)
- Уведомление при смене IP
- Автозапуск с Windows
Скачать
| Файл | Размер | Требования |
|---|---|---|
WinPublicIP.exe |
~477 КБ | Без зависимостей — статическая линковка, VC++ Redistributable не нужен |
Контрольная сумма SHA256:
| Файл | SHA256 |
|---|---|
WinPublicIP.exe |
A5B14B07592047ABF23209327C2E42243892BC5F8806DDF9D2DFDAC5C10584CD |
Системные требования
Windows 10 / 11 / Server 2019+, x64