Commit Graph
3662 Commits
Author SHA1 Message Date
Adrien Beraud 1db8abb7fc c: align hash structs with native types 2026-10-26 23:57:50 -04:00
Adrien Beraud 3f7b1bc3f5 tests: cover unaligned C hash storage 2026-10-26 23:56:59 -04:00
Adrien Beraud 019c25633e tests: initialize GnuTLS for MSVC C bindings 2026-10-26 23:56:43 -04:00
Adrien Beraud 8193f43593 tests: cover Node runner collection cancellation and queue overflow 2026-10-26 23:54:00 -04:00
Adrien Beraud 39564f14c1 tests: define Node-API binding lifecycle and loopback contracts 2026-10-26 23:54:00 -04:00
Adrien Beraud 83778d84fe rust: update edition to 2024
Update the Rust edition to 2024 and mark the FFI extern block as unsafe.
2026-10-26 09:57:02 -04:00
Adrien Beraud b61ee620e4 dht: schedule projected gets with matching reuse rules 2026-10-26 09:21:10 -04:00
Adrien Beraud 0d120eb5d4 tests: cover projected query request scheduling 2026-10-26 09:21:10 -04:00
Cyrille BéraudandCopilot 9b9056c0c8 dht: do not report unfiltered answers to filtered queries
Query::isSatisfiedBy() considers an unfiltered answer sufficient for a
filtered query, which is true for a vanilla get: onGetValuesDone() applies
the operation filter to the values before calling back.

A projected query is different. It receives the fields another query selected
and can no longer evaluate its own filters on them, all the more so as those
filters may target fields that were not selected at all. Two concurrent
queries such as "SELECT id" and "SELECT id WHERE value_type=1" therefore made
the filtered callback report identifiers whose type does not match, and
searchNodeGetDone() additionally cancelled its own request so it never got a
correctly filtered answer.

Add Query::isProjectionSatisfiedBy(), which additionally requires both queries
to apply the same filters, and use it for operations with a query callback.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-10-26 09:21:10 -04:00
Cyrille BéraudandCopilot bf8e3ea251 value: compare field values in FieldValueIndex::containedIn
containedIn() only checked that the other index declared the same field
keys, never that they held the same values, contradicting its documented
contract of containment "with the same value".

Dht::query() uses containedIn() to deduplicate projected results. Because
every result of a given query shares the same projection schema, any two
results compared equal: the first one suppressed all the later ones, and the
"lesser" branch even erased the already reported result. A query selecting a
field therefore reported a single value regardless of how many matched.

Compare the FieldValue as well, and add a regression covering distinct
values, equal indexes and a narrower projection contained in a wider one.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-10-26 09:21:10 -04:00
Adrien Beraud 34eb86a119 value: support sequence numbers in wire filters 2026-10-26 09:19:57 -04:00
Adrien Beraud 75c789ceb2 rust: cover sequence filters across loopback nodes 2026-10-26 09:15:36 -04:00
Adrien Beraud da438d1bd2 value: reproduce sequence filter serialization failure 2026-10-26 09:12:12 -04:00
Adrien Beraud 44e67e1389 rust: parse hexadecimal hashes with string length checks 2026-10-26 09:11:42 -04:00
Adrien Beraud 7f9126b3b0 rust: cover empty and short hexadecimal hashes 2026-10-26 09:10:39 -04:00
Adrien Beraud 574674d3a2 rust: own native pointers in movable handle wrappers 2026-10-26 09:10:16 -04:00
Adrien Beraud c60703bfc3 rust: cover moves across native handle types 2026-10-26 09:10:16 -04:00
Adrien Beraud a0220827cd rust: reproduce moving native values out of boxes 2026-10-26 09:08:03 -04:00
Adrien Beraud fb90211157 python: expose value state and harden runner operations 2026-10-26 01:10:34 -04:00
Adrien Beraud 9501465293 python: cover value state and binding safety regressions 2026-10-26 01:06:48 -04:00
Adrien Beraud 95bd26c3be rust: bump version to 0.2.0 and add author 2026-10-26 00:51:27 -04:00
Adrien Beraud 87463c2d6c rust: own callbacks and expose safe native binding APIs 2026-10-26 00:51:27 -04:00
Adrien Beraud baf413dd0d c: expose lifecycle queries crypto and callback ownership 2026-10-26 00:51:27 -04:00
Adrien Beraud 6bf01f3b6d runner: release status callback captures on join 2026-10-26 00:51:27 -04:00
Adrien Beraud 852403fbeb crypto: verify signatures using the public key algorithm 2026-10-26 00:51:27 -04:00
Adrien Beraud 5f6d5c769e rust: reject certificate registration on stopped runners 2026-10-26 00:51:27 -04:00
Adrien Beraud 42e4419b75 bindings: verify retained values and queued push delivery 2026-10-26 00:51:27 -04:00
Adrien Beraud 4e94d123b2 rust: cover threaded crypto and native callback teardown 2026-10-26 00:51:27 -04:00
Adrien Beraud 7f3f1b4ec4 rust: cover filtered queries and extension hooks 2026-10-26 00:51:27 -04:00
Adrien Beraud 6d462c0dbf rust: cover callback ownership and binding error paths 2026-10-26 00:51:27 -04:00
Adrien Beraud 0285acc766 c: cover lifecycle progress and crypto persistence APIs 2026-10-26 00:51:27 -04:00
Adrien Beraud 0626e82f4a c: contain crypto generation failures and run binding regressions 2026-10-26 00:51:27 -04:00
Adrien Beraud aa01f68cb5 c: cover binding ownership and invalid crypto input 2026-10-26 00:51:27 -04:00
Adrien Beraud af3fd618bf python: expose observability and projected query APIs 2026-10-26 00:51:27 -04:00
Adrien Beraud b96bdfbf04 python: cover observability and querying APIs 2026-10-26 00:51:27 -04:00
Adrien Beraud 60ca85f782 python: release native resources and guard callback cleanup 2026-10-26 00:51:27 -04:00
Adrien Beraud e4966aa457 python: cover native resource and callback cleanup regressions 2026-10-26 00:51:27 -04:00
Adrien Beraud aa9d23870b python: guard native errors, iterator lifetimes, and hash bounds 2026-10-26 00:51:27 -04:00
Adrien Beraud ac68db84eb python: cover binding exception and memory safety regressions 2026-10-26 00:51:27 -04:00
Adrien Beraud bbbd9122af python: use loopback addresses in bootstrap test 2026-10-26 00:51:27 -04:00
Adrien Beraud cf58d66282 python: expose node state persistence configuration 2026-10-26 00:51:27 -04:00
Adrien Beraud 2ddf1e5ec5 python: await shutdown before checking persisted state 2026-10-26 00:51:27 -04:00
Adrien Beraud e48bfd578a python: cover node state persistence configuration 2026-10-26 00:51:27 -04:00
Adrien Beraud 1c3fc22c31 meson: install Python bindings as opendht package 2026-10-26 00:51:27 -04:00
Adrien Beraud b6cf2fd246 python: expose key persistence and value metadata 2026-10-26 00:51:27 -04:00
Adrien Beraud 91c3f62c0c python: validate restored keys through certificate chains 2026-10-26 00:51:27 -04:00
Adrien Beraud 2703cf129d python: cover key persistence and value metadata 2026-10-26 00:51:27 -04:00
Adrien Beraud 51c2aadd4e python: handle cancelled and repeated async completions 2026-10-26 00:51:27 -04:00
Adrien Beraud 8b20e912d6 docker: use alpine 3.24 runtime 2026-10-26 00:51:27 -04:00
Adrien Beraud b66ff83fe2 python: preserve permanence in blocking puts 2026-10-26 00:51:27 -04:00