TapTap
4e918a1b69
test(config): pin wire bytes and round-trip every field
...
test_config_wire_golden() serializes a fully-populated Config through
config_send_wire_block() and pins the exact frame to len=633 and FNV-1a
hash 6163263374908258816, captured from the pre-X-macro implementation.
Any field reorder, resize or codec change fails the test.
test_config_wire_roundtrip_all_fields() serializes/deserializes a defaults
Config and a fully-populated Config over a socketpair and compares every
serialized field. The comparison is itself generated from
CONFIG_WIRE_FIELDS (one CONFIG_CMP_<KIND> per table entry), so a new table
entry automatically extends coverage; it cannot fall out of sync. It
normalizes the receiver's NULL/"" canonicalization, the max_alloc server
clamp and the derived use_delta/use_xattrs bits.
2026-09-13 10:28:31 +02:00
TapTap
87f6cb0243
refactor(config): single X-macro table for serialized fields
...
Every Config field that crosses the wire was declared in up to six places
(struct member, config_set_defaults, send_*, receive_*, and the two CLI
option tables) and could drift silently. Add CONFIG_WIRE_FIELDS in
config.h: one ordered per-segment table where each serialized field is
declared once with its C type, default and wire codec (KIND).
config.h now expands the table to declare the struct members;
config_set_defaults() expands it to assign the defaults; and
config_send_wire_block()/config_receive() expand the per-segment lists to
emit/consume the frame. The per-segment function names, call order and
segment boundaries are preserved exactly.
Fields with genuinely custom logic keep dedicated helpers but are still
declared once in the table: the protocol-version handshake (HEADER), daemon
SCRAM auth (STR_REDACTED_AUTH), the daemon module name (STR_MODULE), the
repeated count+array blocks (BLOCK_SKIP_SUFFIXES/BLOCK_BASIS/BLOCK_IDMAP),
--copy-as presence/ids (COPY_AS_*), and the derived --delta / use_xattrs
bits (DERIVED_DELTA, BOOL_XATTR_DERIVE). The version field remains a
special header (validated before any other field is parsed) and is sent by
config_send_wire_block() explicitly.
No public field is renamed and PROTOCOL_VERSION stays "2.20.0". Because
the struct declaration order is no longer the wire order, the wire order is
now enforced solely by the table and by a byte-exact golden test
(follow-up commit). Add config_send_wire_block() so that test can hash the
frame body without the STATUS_OK handshake.
2026-09-13 10:28:26 +02:00
TapTap
9242e86772
Merge Wave 7: fix shared/server layering and explicit CMake targets
CI / lint (push) Successful in 1m30s
CI / sanitizers (undefined) (push) Successful in 56s
CI / sanitizers (address) (push) Successful in 1m3s
CI / fuzz-build (push) Successful in 34s
CI / coverage (push) Successful in 52s
CI / valgrind (push) Successful in 3m14s
CI / build-and-test (push) Successful in 5m33s
2026-09-13 07:30:33 +02:00
TapTap
0155902d95
docs: update stale PipelineContextReceiver reference
2026-09-13 07:30:28 +02:00
TapTap
3499baf80b
build: explicit CMake targets; move receiver pipeline out of shared
2026-09-13 07:20:28 +02:00
TapTap
83eacf3151
Merge Wave 6: client features (--port, --threads=N, abort, keepalive) and test coverage
CI / lint (push) Successful in 1m30s
CI / sanitizers (undefined) (push) Successful in 1m4s
CI / sanitizers (address) (push) Successful in 1m9s
CI / fuzz-build (push) Successful in 36s
CI / coverage (push) Successful in 51s
CI / valgrind (push) Successful in 3m14s
CI / build-and-test (push) Successful in 5m37s
2026-09-13 06:59:08 +02:00
TapTap
c2df0347ef
fix(client,protocol): EINTR-safe sends, armed abort, keepalive drain grace, TLS WANT_WRITE
2026-09-13 06:59:02 +02:00
TapTap
dd44537b44
Merge branch 'fix/w6-tests' into fix/w6-integration
2026-09-13 06:25:05 +02:00
TapTap
2854a9d149
test: fuzz manifest/protocol/xattr, hardlink unit, fault injection
2026-09-13 06:24:46 +02:00
TapTap
1fa2fbd266
feat(client): --port alias, --threads=N, graceful abort, keepalive
2026-09-13 06:22:28 +02:00
TapTap
10b18ab2d2
Merge Wave 5a: dead-code removal, scanner options embed, shared config invariants, bounded metadata API
CI / lint (push) Successful in 1m31s
CI / sanitizers (undefined) (push) Successful in 1m0s
CI / sanitizers (address) (push) Successful in 1m7s
CI / fuzz-build (push) Successful in 30s
CI / coverage (push) Successful in 51s
CI / valgrind (push) Successful in 3m12s
CI / build-and-test (push) Successful in 5m32s
2026-09-13 05:48:32 +02:00
TapTap
dcc78c14c5
docs,fuzz: fix ownership/alloc comments; fuzz chunk metadata path
2026-09-13 05:48:27 +02:00
TapTap
5a829adb85
Merge branch 'fix/w5-scanner' into fix/w5-integration
2026-09-13 05:28:50 +02:00
TapTap
42c72030fb
Merge branch 'fix/w5-config' into fix/w5-integration
2026-09-13 05:28:50 +02:00
TapTap
99f8045105
refactor(scanner,send): embed scanner options; unify stats and config ownership
2026-09-13 05:28:32 +02:00
TapTap
eea66a7848
refactor(config,metadata): shared invariants; length-bounded metadata parser
2026-09-13 05:24:23 +02:00
TapTap
c944787e03
refactor: remove dead file_store subsystem and unused wrappers
2026-09-13 05:19:18 +02:00
TapTap
57ce6d04f0
Merge Wave 4: performance (packed metadata 2.20.0, indexed lookups, zstd reuse, byte-bounded queues)
CI / lint (push) Successful in 1m30s
CI / sanitizers (undefined) (push) Successful in 1m1s
CI / sanitizers (address) (push) Successful in 1m7s
CI / fuzz-build (push) Successful in 29s
CI / coverage (push) Successful in 50s
CI / valgrind (push) Successful in 3m12s
CI / build-and-test (push) Successful in 5m22s
2026-09-13 05:01:21 +02:00
TapTap
3cf2e2c91f
docs(version): align 2.20.0 artifacts; fix protocol-bump rationale
2026-09-13 05:01:15 +02:00
TapTap
301cb0dbaf
fix(utils,file-list): bound keep/files-from indexes to O(M) memory
2026-09-13 04:52:10 +02:00
TapTap
a4f4110397
Merge branch 'fix/w4-queue' into fix/w4-integration
2026-09-13 04:19:12 +02:00
TapTap
24fe8c5583
Merge branch 'fix/w4-compress' into fix/w4-integration
2026-09-13 04:19:12 +02:00
TapTap
d274bdff4e
Merge branch 'fix/w4-hash' into fix/w4-integration
2026-09-13 04:19:12 +02:00
TapTap
6c636a19e6
perf(compression,tcp): reuse zstd contexts; enable TCP_NODELAY
2026-09-13 04:18:55 +02:00
TapTap
1a83e284c4
perf(utils,file-list): index delete keep-set and --files-from lookups
2026-09-13 04:16:28 +02:00
TapTap
317d5d081a
perf(protocol): pack metadata into one frame (PROTOCOL 2.20.0)
2026-09-13 04:08:36 +02:00
TapTap
69fe7f3c9f
perf(send,scanner): byte-bound sender queues; drop redundant stat
2026-09-13 04:06:30 +02:00
TapTap
ddc71a7df5
Merge Wave 3b: configurable protocol timeout and idle/session bounds
CI / lint (push) Successful in 1m31s
CI / sanitizers (undefined) (push) Successful in 1m1s
CI / sanitizers (address) (push) Successful in 1m8s
CI / fuzz-build (push) Successful in 30s
CI / coverage (push) Successful in 50s
CI / build-and-test (push) Successful in 4m37s
CI / valgrind (push) Successful in 3m12s
2026-09-13 03:46:25 +02:00
TapTap
ffa1d24625
fix(receiver): harden idle-progress definition, single error frame, sendfile timeout
2026-09-13 03:46:20 +02:00
TapTap
b16349b81e
fix(protocol): honor --timeout for protocol I/O; bound idle/session time
2026-09-13 03:29:01 +02:00
TapTap
4bc84fe954
Merge Wave 3a: daemon host ACL, configurable max connections, peer audit, auth-failure delay
CI / lint (push) Successful in 1m31s
CI / sanitizers (undefined) (push) Successful in 57s
CI / sanitizers (address) (push) Successful in 1m5s
CI / fuzz-build (push) Successful in 29s
CI / coverage (push) Successful in 49s
CI / build-and-test (push) Successful in 4m35s
CI / valgrind (push) Successful in 3m10s
2026-09-13 02:51:11 +02:00
TapTap
fc560246c1
fix(daemon): close ACL fail-opens (v4-mapped peers, invalid patterns) and cap auth delay
2026-09-13 02:51:07 +02:00
TapTap
dff6609976
feat(daemon): host ACL, configurable max connections, peer audit, auth-failure delay
2026-09-13 02:36:15 +02:00
TapTap
1acb66628d
Merge Wave 2: thread-safety fixes (signals, fd ownership, handler epilogue, logging, scanner leak)
CI / lint (push) Successful in 1m30s
CI / sanitizers (undefined) (push) Successful in 59s
CI / sanitizers (address) (push) Successful in 1m6s
CI / fuzz-build (push) Successful in 28s
CI / coverage (push) Successful in 49s
CI / build-and-test (push) Successful in 4m31s
CI / valgrind (push) Successful in 3m10s
2026-09-13 02:13:27 +02:00
TapTap
ba1c7a369f
fix(server,log): non-socket shutdown fallback, drop redundant delay cleanup, unlock logging I/O
2026-09-13 02:13:22 +02:00
TapTap
d28489d83c
Merge branch 'fix/w2-scan' into fix/w2-integration
2026-09-13 01:49:44 +02:00
TapTap
312ed05170
Merge branch 'fix/w2-log' into fix/w2-integration
2026-09-13 01:49:44 +02:00
TapTap
fecbe2c90c
fix(server): child-safe signals, single fd owner, handler cleanup epilogue
2026-09-13 01:49:27 +02:00
TapTap
c8f5d80fcb
fix(log): serialize message emission; clear log_fp before close; use logger
2026-09-13 01:44:59 +02:00
TapTap
8147ff7b50
fix(scanner): free chunk_data on chunk-create failure
2026-09-13 01:36:51 +02:00
TapTap
b7fbb56289
test(file): silence cppcheck constVariablePointer in empty-path test
CI / lint (push) Successful in 1m32s
CI / sanitizers (undefined) (push) Successful in 57s
CI / sanitizers (address) (push) Successful in 1m4s
CI / fuzz-build (push) Successful in 30s
CI / coverage (push) Successful in 49s
CI / build-and-test (push) Successful in 4m28s
CI / valgrind (push) Successful in 3m10s
2026-09-13 01:25:29 +02:00
TapTap
08063b6d73
Merge Wave 1: critical/High fixes (UAF, DoS caps, leaks, hardening)
CI / lint (push) Failing after 1m32s
CI / build-and-test (push) Skipped
CI / sanitizers (address) (push) Skipped
CI / sanitizers (undefined) (push) Skipped
CI / fuzz-build (push) Skipped
CI / coverage (push) Skipped
CI / valgrind (push) Skipped
2026-09-13 01:18:58 +02:00
TapTap
ea2f76cd7a
fix(receiver): charge per-entry DirTimeList cost; cap client --skip-compress
2026-09-13 01:18:54 +02:00
TapTap
76eeba1773
Merge branch 'fix/w1d-hardening' into fix/w1-integration
2026-09-13 00:59:35 +02:00
TapTap
b72ab298ab
Merge branch 'fix/w1c-wire' into fix/w1-integration
2026-09-13 00:59:35 +02:00
TapTap
446a714ef8
Merge branch 'fix/w1b-receiver' into fix/w1-integration
2026-09-13 00:59:35 +02:00
TapTap
a90e234eb3
harden: overflow guards, auth-user validation, TLS1.3 policy, build hardening
2026-09-13 00:59:21 +02:00
TapTap
f8252cf3e7
fix(protocol): bound pre-auth config string memory
2026-09-13 00:57:32 +02:00
TapTap
4557924972
fix(receiver): cap DirTimeList growth and fix placeholder Data leaks
2026-09-13 00:57:32 +02:00
TapTap
59ce174d22
fix(client-send): UAF in basis preflight and missing_args leak
2026-09-13 00:57:09 +02:00