Fast and robust atproto CAR file processing in rust
14
fork

Configure Feed

Select the types of activity you want to include in your feed.

verify max node entries

phil 3c5ed8d3 58e54858

+12 -1
+12 -1
src/mst.rs
··· 136 136 137 137 let mut prefix: Vec<u8> = vec![]; 138 138 139 - for entry in map.next_value::<Vec<Entry>>()? { 139 + let entries = map.next_value::<Vec<Entry>>()?; 140 + if entries.len() > MAX_MST_NODE_ENTRIES { 141 + return Err(de::Error::invalid_length( 142 + entries.len(), 143 + &"at most 200 entries per MST node", 144 + )); 145 + } 146 + for entry in entries { 140 147 let mut key_bytes: Vec<u8> = vec![]; 141 148 let pre_checked = 142 149 prefix.get(..entry.prefix_len).ok_or_else(|| { ··· 204 211 deserializer.deserialize_struct("MstNode", NODE_FIELDS, NodeVisitor) 205 212 } 206 213 } 214 + 215 + /// Maximum number of record entries (keys/record links, not counting child-node 216 + /// pointers) allowed in a single MST node. 217 + pub const MAX_MST_NODE_ENTRIES: usize = 200; 207 218 208 219 impl MstNode { 209 220 pub(crate) fn is_empty(&self) -> bool {