Skip to content

Add .NET 10 support#15

Open
okramarenko wants to merge 15 commits intomasterfrom
add10support
Open

Add .NET 10 support#15
okramarenko wants to merge 15 commits intomasterfrom
add10support

Conversation

@okramarenko
Copy link
Copy Markdown
Collaborator

@okramarenko okramarenko commented Apr 6, 2026

Note

High Risk
High risk because it changes connection handshake/authentication flows (including caching_sha2_password, fingerprint validation, and new parsec plugin) and adds new protocol/parameter behaviors (streaming prepared-statement data, VECTOR type) that affect core connectivity and data serialization.

Overview
Adds .NET 10 support across CI/build tooling (updates GitHub Actions triggers, runners, setup-dotnet, target frameworks, and dependency versions) and replaces the legacy .sln with a new .slnx solution.

Extends the connector with new capabilities: support for VECTOR columns (type mapping, protocol enum, reader, parameter/bulk-copy float serialization) and improved stored-procedure out-parameter handling for GUID formats.

Reworks parts of the protocol/auth pipeline: introduces IAuthenticationPlugin3 to return both auth response and password hash, adds parsec authentication plugin, adds caching_sha2_password handshake handling, and strengthens SSL fingerprint validation based on stored password hashes; also adds streaming COM_STMT_SEND_LONG_DATA prologue for prepared statements with Stream parameters.

Adds configurable OpenTelemetry tracing options via SingleStoreDataSourceBuilder.ConfigureTracing, plus several robustness tweaks (payload-cache trimming on pool return, connection state set to Broken on session failure, expanded proxy detection, and XA rollback edge-case handling).

Reviewed by Cursor Bugbot for commit a007803. Bugbot is set up for automated code reviews on this repo. Configure here.

signature.CopyTo(authenticationResponse.AsSpan(clientScramble.Length));

// "password hash" for parsec is the extended salt followed by the public key
passwordHash = [(byte) 'P', (byte) iterationCount, .. salt, .. publicKey];
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Iteration count byte truncation corrupts password hash

High Severity

(byte) iterationCount always evaluates to 0 because iterationCount is 1024 << extendedSalt[1], producing values 1024, 2048, 4096, or 8192 — all multiples of 256. The second byte of passwordHash will always be 0 regardless of the actual iteration exponent. The intent is to store the original exponent byte (extendedSalt[1]), not the computed iterationCount cast to byte.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit dfb6ad7. Configure here.

Copy link
Copy Markdown

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

There are 2 total unresolved issues (including 1 from previous review).

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 5ef8f81. Configure here.

Comment thread Directory.Build.props Outdated
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant