Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions .release-notes/next-release.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,3 +69,19 @@ let creds = Credentials(auth, token)

Authorization headers now use `Bearer` format (`Authorization: Bearer <token>`) instead of the legacy `token` format. GitHub accepts both.

## Fix programs hanging on shutdown when the remote peer didn't cleanly close connections

Closing an HTTP connection could hang indefinitely on POSIX when the remote peer's FIN notification was missed in a narrow timing window. The connection would get stuck in CLOSE_WAIT, preventing the Pony runtime from exiting. This is now handled correctly and connections close promptly.

## Fix HTTPS connections staying open longer than expected when idle

Idle timeouts didn't fire reliably on HTTPS connections, meaning connections could stay open well past their intended lifetime. Idle timeouts now work correctly for both plain and SSL connections.

## Fix internal resource leak when a connection was closed during establishment

Closing a connection while it was still being established (during TCP or TLS handshake) could leak internal resources. Early close is now handled cleanly.

## Fix SSL certificate validation accepting certificates with empty name entries

X.509 hostname verification could incorrectly accept certificates with empty name entries. Certificates must now have non-empty name fields to pass validation.

4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ All notable changes to this project will be documented in this file. This projec

### Fixed

- Fix programs hanging on shutdown when the remote peer didn't cleanly close connections ([PR #112](https://github.com/ponylang/github_rest_api/pull/NNN))
- Fix HTTPS connections staying open longer than expected when idle ([PR #112](https://github.com/ponylang/github_rest_api/pull/NNN))
- Fix internal resource leak when a connection was closed during establishment ([PR #112](https://github.com/ponylang/github_rest_api/pull/NNN))
- Fix SSL certificate validation accepting certificates with empty name entries ([PR #112](https://github.com/ponylang/github_rest_api/pull/NNN))

### Added

Expand Down
2 changes: 1 addition & 1 deletion corral.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
},
{
"locator": "github.com/ponylang/courier.git",
"version": "0.1.0"
"version": "0.1.2"
},
{
"locator": "github.com/ponylang/uri.git",
Expand Down
1 change: 1 addition & 0 deletions github_rest_api/paginated_list.pony
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,7 @@ actor LinkedJsonRequester is courier.HTTPClientConnectionActor
| courier.ConnectionFailedDNS => "DNS resolution failed"
| courier.ConnectionFailedTCP => "Unable to connect"
| courier.ConnectionFailedSSL => "SSL handshake failed"
| courier.ConnectionFailedTimeout => "Connection timed out"
end
_receiver.failure(0, "", consume msg)

Expand Down
1 change: 1 addition & 0 deletions github_rest_api/request/check_requester.pony
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ actor CheckRequester is courier.HTTPClientConnectionActor
| courier.ConnectionFailedDNS => "DNS resolution failed"
| courier.ConnectionFailedTCP => "Unable to connect"
| courier.ConnectionFailedSSL => "SSL handshake failed"
| courier.ConnectionFailedTimeout => "Connection timed out"
end
_receiver.failure(0, "", consume msg)

Expand Down
1 change: 1 addition & 0 deletions github_rest_api/request/json_requester.pony
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,7 @@ actor JsonRequester is courier.HTTPClientConnectionActor
| courier.ConnectionFailedDNS => "DNS resolution failed"
| courier.ConnectionFailedTCP => "Unable to connect"
| courier.ConnectionFailedSSL => "SSL handshake failed"
| courier.ConnectionFailedTimeout => "Connection timed out"
end
_receiver.failure(0, "", consume msg)

Expand Down
1 change: 1 addition & 0 deletions github_rest_api/request/no_content_requester.pony
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,7 @@ actor NoContentRequester is courier.HTTPClientConnectionActor
| courier.ConnectionFailedDNS => "DNS resolution failed"
| courier.ConnectionFailedTCP => "Unable to connect"
| courier.ConnectionFailedSSL => "SSL handshake failed"
| courier.ConnectionFailedTimeout => "Connection timed out"
end
_receiver.failure(0, "", consume msg)

Expand Down
Loading