Skip to content

Commit bb76352

Browse files
authored
Merge pull request #301 from EnRaiha/fix/fuzz-wasm-builds
fix(build): repair fuzz target and wasm decoder after upstream refactors
2 parents 9998320 + e2e1d6c commit bb76352

4 files changed

Lines changed: 43 additions & 24 deletions

File tree

‎fuzz/Cargo.lock‎

Lines changed: 15 additions & 22 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎fuzz/Cargo.toml‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ libfuzzer-sys = { version = "0.4", optional = true }
1616
tempfile = "3"
1717
nodedb-codec = { path = "../nodedb-codec" }
1818
nodedb-columnar = { path = "../nodedb-columnar" }
19+
nodedb-mem = { path = "../nodedb-mem" }
1920
nodedb-strict = { path = "../nodedb-strict" }
2021
nodedb-types = { path = "../nodedb-types" }
2122
nodedb-wal = { path = "../nodedb-wal" }

‎fuzz/src/targets/columnar_segment.rs‎

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
1+
use std::sync::Arc;
2+
13
use nodedb_columnar::memtable::ColumnData;
4+
use nodedb_columnar::writer::PROFILE_PLAIN;
25
use nodedb_columnar::{
36
DeleteBitmap, OwnedSegmentReader, ScanPredicate, SegmentReader, SegmentWriter,
47
};
8+
use nodedb_mem::{EngineId, EngineLimits, GovernorConfig, MemoryGovernor, ScopedMemory};
59
use nodedb_types::columnar::{ColumnDef, ColumnType, ColumnarSchema};
10+
use nodedb_types::{DatabaseId, TenantId};
611
use nodedb_wal::crypto::WalEncryptionKey;
712

813
const INPUT_PREFIX_BYTES: usize = 64;
@@ -17,6 +22,26 @@ const COLUMN_COUNT: usize = 5;
1722
const FUZZ_KEK_BYTES: [u8; 32] = [0x5a; 32];
1823
const FUZZ_KEK_EPOCH: [u8; 4] = [0; 4];
1924

25+
/// A memory scope whose governor ceiling covers every engine's limit — the
26+
/// same shape the integration tests use. Segment writes now take mandatory
27+
/// ScopedMemory (refactor(mem): make ScopedMemory budgeting mandatory).
28+
fn fuzz_memory() -> ScopedMemory {
29+
let per_engine = usize::MAX / EngineId::ALL.len();
30+
let governor = Arc::new(
31+
MemoryGovernor::new(GovernorConfig {
32+
global_ceiling: per_engine * EngineId::ALL.len(),
33+
engine_limits: EngineLimits::uniform(per_engine),
34+
})
35+
.expect("fuzz governor"),
36+
);
37+
ScopedMemory::new(
38+
governor,
39+
DatabaseId::DEFAULT,
40+
TenantId::new(0),
41+
EngineId::Columnar,
42+
)
43+
}
44+
2045
fn exercise_reader(reader: &SegmentReader<'_>) {
2146
let count = reader.column_count().min(COLUMN_COUNT);
2247
for index in 0..count {
@@ -169,7 +194,7 @@ fn generated_segment(seed: &[u8], kek: Option<&WalEncryptionKey>) -> Option<Vec<
169194
},
170195
];
171196

172-
SegmentWriter::plain()
197+
SegmentWriter::new(PROFILE_PLAIN, fuzz_memory())
173198
.write_segment(&schema, &columns, ROW_COUNT, kek)
174199
.ok()
175200
}

‎nodedb-codec/src/zstd_codec.rs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,7 @@ fn compress_native(_data: &[u8], _level: i32) -> Result<Vec<u8>, CodecError> {
321321

322322
#[cfg(target_arch = "wasm32")]
323323
fn decompress_native(frame: &[u8], expected_size: usize) -> Result<Vec<u8>, CodecError> {
324-
use ruzstd::StreamingDecoder;
324+
use ruzstd::decoding::StreamingDecoder;
325325

326326
let mut decoder = StreamingDecoder::new(std::io::Cursor::new(frame)).map_err(|e| {
327327
CodecError::DecompressFailed {

0 commit comments

Comments
 (0)