From 314ab847fd0b207e00cd3e82830ecc55f1dd51ac Mon Sep 17 00:00:00 2001 From: Patrik Lindberg Date: Tue, 13 Jan 2026 15:26:52 +0100 Subject: [PATCH 1/2] Fixed marshalling of size_t into nuint instead of int. --- src/LightningDB.Tests/TransactionTests.cs | 2 +- src/LightningDB/LightningCursor.cs | 6 ++++-- src/LightningDB/LightningTransaction.cs | 2 +- src/LightningDB/Native/Lmdb.cs | 8 ++++---- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/LightningDB.Tests/TransactionTests.cs b/src/LightningDB.Tests/TransactionTests.cs index 5fde364..c66fc72 100644 --- a/src/LightningDB.Tests/TransactionTests.cs +++ b/src/LightningDB.Tests/TransactionTests.cs @@ -294,7 +294,7 @@ public void can_get_transaction_id() env.RunTransactionScenario((tx, _) => { - tx.Id.ShouldBeGreaterThan(0); + tx.Id.ShouldBeGreaterThan((nuint)0); }); } diff --git a/src/LightningDB/LightningCursor.cs b/src/LightningDB/LightningCursor.cs index 20cd388..846b88d 100644 --- a/src/LightningDB/LightningCursor.cs +++ b/src/LightningDB/LightningCursor.cs @@ -521,9 +521,11 @@ public MDBResultCode Renew(LightningTransaction txn) /// /// Output parameter where the duplicate count will be stored. /// Returns - public MDBResultCode Count(out int value) + public MDBResultCode Count(out long value) { - return mdb_cursor_count(_handle, out value); + var result = mdb_cursor_count(_handle, out var count); + value = (long)count; + return result; } private bool ShouldCloseCursor() diff --git a/src/LightningDB/LightningTransaction.cs b/src/LightningDB/LightningTransaction.cs index 20afd6e..09fb122 100644 --- a/src/LightningDB/LightningTransaction.cs +++ b/src/LightningDB/LightningTransaction.cs @@ -422,7 +422,7 @@ public Stats GetStats(LightningDatabase db) /// /// Gets the transaction ID. /// - public int Id => mdb_txn_id(_handle); + public nuint Id => mdb_txn_id(_handle); /// /// Compares two data items according to the database's key comparison function. diff --git a/src/LightningDB/Native/Lmdb.cs b/src/LightningDB/Native/Lmdb.cs index 5278a3b..50d5d5a 100644 --- a/src/LightningDB/Native/Lmdb.cs +++ b/src/LightningDB/Native/Lmdb.cs @@ -229,7 +229,7 @@ public static partial class Lmdb /// The transaction ID [LibraryImport(MDB_DLL_NAME)] [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - public static partial int mdb_txn_id(nint txn); + public static partial nuint mdb_txn_id(nint txn); /// /// Commits all the operations of a transaction into the database. @@ -388,7 +388,7 @@ public static partial class Lmdb /// A result code indicating success or failure [LibraryImport(MDB_DLL_NAME)] [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - public static partial MDBResultCode mdb_cursor_count(nint cursor, out int countp); + public static partial MDBResultCode mdb_cursor_count(nint cursor, out nuint countp); /// /// Stores key/data pairs in a database. @@ -872,7 +872,7 @@ internal static MDBResultCode mdb_env_open(nint env, string path, EnvironmentOpe /// A transaction handle /// The transaction ID [DllImport(MDB_DLL_NAME, CallingConvention = CallingConvention.Cdecl)] - public static extern int mdb_txn_id(nint txn); + public static extern nuint mdb_txn_id(nint txn); /// /// Commits all the operations of a transaction into the database. @@ -1040,7 +1040,7 @@ public static MDBResultCode mdb_env_copy2(nint env, string path, EnvironmentCopy /// Address where the count will be stored /// A result code indicating success or failure [DllImport(MDB_DLL_NAME, CallingConvention = CallingConvention.Cdecl)] - public static extern MDBResultCode mdb_cursor_count(nint cursor, out int countp); + public static extern MDBResultCode mdb_cursor_count(nint cursor, out nuint countp); /// /// Stores key/data pairs in a database. From 1a5c92c13408778afbd3fd6eb4e4f15ccd88bbe2 Mon Sep 17 00:00:00 2001 From: Patrik Lindberg Date: Tue, 13 Jan 2026 17:41:33 +0100 Subject: [PATCH 2/2] Throw on overflow --- src/LightningDB/LightningCursor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/LightningDB/LightningCursor.cs b/src/LightningDB/LightningCursor.cs index 846b88d..6f8f8d6 100644 --- a/src/LightningDB/LightningCursor.cs +++ b/src/LightningDB/LightningCursor.cs @@ -524,7 +524,7 @@ public MDBResultCode Renew(LightningTransaction txn) public MDBResultCode Count(out long value) { var result = mdb_cursor_count(_handle, out var count); - value = (long)count; + value = checked((long)count); return result; }