#[cfg(feature = "build-fuzzing-corpus")] /// Helpers to write data to the fuzzing corpus. mod write_corpus { use neqo_transport::StreamId;
/// Write QPACK data to the fuzzing corpus. pubfn write_item_to_fuzzing_corpus(stream_id: StreamId, buf: &[u8]) { letmut data = Vec::with_capacity(size_of::<u64>() + buf.len());
data.extend_from_slice(&stream_id.as_u64().to_le_bytes());
data.extend_from_slice(buf);
neqo_common::write_item_to_fuzzing_corpus("qpack", &data);
}
}
#[cfg(fuzzing)] /// Helpers to support fuzzing. mod fuzzing { usecrate::{
Decoder, Error, Res,
reader::{ReadByte, Reader},
};
/// Buffer wrapper that implements `ReadByte` and `Reader` for a byte slice. /// Returns `NeedMoreData` when the buffer is exhausted. struct BufferReader<'a> {
buf: &'a [u8],
offset: usize,
}
impl ReadByte for BufferReader<'_> { fn read_byte(&mutself) -> Res<u8> { ifself.offset < self.buf.len() { let b = self.buf[self.offset]; self.offset += 1;
Ok(b)
} else {
Err(Error::NeedMoreData)
}
}
}
impl Reader for BufferReader<'_> { fn read(&mutself, buf: &mut [u8]) -> Res<usize> { let available = self.buf.len() - self.offset; let to_read = buf.len().min(available);
buf[..to_read].copy_from_slice(&self.buf[self.offset..self.offset + to_read]); self.offset += to_read;
Ok(to_read)
}
}
impl Decoder { /// Processes encoder stream data from a byte buffer. /// This populates the dynamic table with header entries from encoder instructions. /// /// # Errors /// /// May return `Error::EncoderStream` if the encoder instructions are malformed. pubfn receive_encoder_stream(&mutself, buf: &[u8]) -> Res<()> { letmut recv = BufferReader::new(buf); self.process_instructions(&mut recv).map_err(map_error)
}
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.