Skip to content

Commit

Permalink
Merge branch 'fix-fuzzer'
Browse files Browse the repository at this point in the history
  • Loading branch information
Byron committed Jan 5, 2024
2 parents 4017e69 + 6bb407f commit 17a81c7
Show file tree
Hide file tree
Showing 16 changed files with 187 additions and 154 deletions.
8 changes: 8 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion gix-config/src/file/init/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ impl<'a> File<'a> {

this.frontmatter_events = frontmatter;

this.sections.reserve(sections.len());
this.section_order.reserve(sections.len());
for section in sections {
this.push_section_internal(crate::file::Section {
header: section.header,
Expand All @@ -61,7 +63,6 @@ impl<'a> File<'a> {
id: Default::default(),
});
}

this
}
}
Expand Down
4 changes: 3 additions & 1 deletion gix-config/src/file/mutable/multi_value.rs
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,9 @@ impl<'borrow, 'lookup, 'event> MultiValueMut<'borrow, 'lookup, 'event> {
let key_sep_events = whitespace.key_value_separators();
MultiValueMut::set_offset(offsets, section_id, offset_index, 2 + key_sep_events.len());
section.insert(offset, Event::Value(escape_value(value).into()));
section.insert_many(offset, key_sep_events.into_iter().rev());
section
.splice(offset..offset, key_sep_events.into_iter().rev())
.for_each(|_| {});
section.insert(offset, Event::SectionKey(key.to_owned()));
}

Expand Down
5 changes: 3 additions & 2 deletions gix-config/src/file/mutable/section.rs
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,8 @@ impl<'a, 'event> SectionMut<'a, 'event> {

let sep_events = self.whitespace.key_value_separators();
size += sep_events.len();
body.insert_many(index.0, sep_events.into_iter().rev());
body.splice(index.0..index.0, sep_events.into_iter().rev())
.for_each(|_| {});

body.insert(index.0, Event::SectionKey(key));
size += 1;
Expand Down Expand Up @@ -310,7 +311,7 @@ impl<'event> Deref for SectionMut<'_, 'event> {
}

impl<'event> file::section::Body<'event> {
pub(crate) fn as_mut(&mut self) -> &mut parse::section::Events<'event> {
pub(crate) fn as_mut(&mut self) -> &mut Vec<Event<'event>> {
&mut self.0
}
}
4 changes: 2 additions & 2 deletions gix-config/src/file/section/body.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ use crate::{

/// A opaque type that represents a section body.
#[derive(PartialEq, Eq, Hash, PartialOrd, Ord, Clone, Debug, Default)]
pub struct Body<'event>(pub(crate) crate::parse::section::Events<'event>);
pub struct Body<'event>(pub(crate) Vec<Event<'event>>);

/// Access
impl<'event> Body<'event> {
Expand Down Expand Up @@ -163,7 +163,7 @@ impl<'event> Body<'event> {
/// An owning iterator of a section body. Created by [`Body::into_iter`], yielding
/// un-normalized (`key`, `value`) pairs.
// TODO: tests
pub struct BodyIter<'event>(smallvec::IntoIter<[Event<'event>; 64]>);
pub struct BodyIter<'event>(std::vec::IntoIter<Event<'event>>);

impl<'event> IntoIterator for Body<'event> {
type Item = (Key<'event>, Cow<'event, BStr>);
Expand Down
100 changes: 44 additions & 56 deletions gix-config/src/file/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -51,19 +51,16 @@ mod try_from {
let mut sections = HashMap::new();
sections.insert(
SectionId(0),
file::section::Body(
vec![
newline_event(),
name_event("a"),
Event::KeyValueSeparator,
value_event("b"),
newline_event(),
name_event("c"),
Event::KeyValueSeparator,
value_event("d"),
]
.into(),
),
file::section::Body(vec![
newline_event(),
name_event("a"),
Event::KeyValueSeparator,
value_event("b"),
newline_event(),
name_event("c"),
Event::KeyValueSeparator,
value_event("d"),
]),
);
sections
};
Expand Down Expand Up @@ -96,19 +93,16 @@ mod try_from {
let mut sections = HashMap::new();
sections.insert(
SectionId(0),
file::section::Body(
vec![
newline_event(),
name_event("a"),
Event::KeyValueSeparator,
value_event("b"),
newline_event(),
name_event("c"),
Event::KeyValueSeparator,
value_event("d"),
]
.into(),
),
file::section::Body(vec![
newline_event(),
name_event("a"),
Event::KeyValueSeparator,
value_event("b"),
newline_event(),
name_event("c"),
Event::KeyValueSeparator,
value_event("d"),
]),
);
sections
};
Expand Down Expand Up @@ -144,24 +138,21 @@ mod try_from {
let mut sections = HashMap::new();
sections.insert(
SectionId(0),
file::section::Body(
vec![
newline_event(),
name_event("a"),
Event::KeyValueSeparator,
value_event("b"),
newline_event(),
name_event("c"),
Event::KeyValueSeparator,
value_event("d"),
newline_event(),
]
.into(),
),
file::section::Body(vec![
newline_event(),
name_event("a"),
Event::KeyValueSeparator,
value_event("b"),
newline_event(),
name_event("c"),
Event::KeyValueSeparator,
value_event("d"),
newline_event(),
]),
);
sections.insert(
SectionId(1),
file::section::Body(vec![name_event("e"), Event::KeyValueSeparator, value_event("f")].into()),
file::section::Body(vec![name_event("e"), Event::KeyValueSeparator, value_event("f")]),
);
sections
};
Expand Down Expand Up @@ -193,24 +184,21 @@ mod try_from {
let mut sections = HashMap::new();
sections.insert(
SectionId(0),
file::section::Body(
vec![
newline_event(),
name_event("a"),
Event::KeyValueSeparator,
value_event("b"),
newline_event(),
name_event("c"),
Event::KeyValueSeparator,
value_event("d"),
newline_event(),
]
.into(),
),
file::section::Body(vec![
newline_event(),
name_event("a"),
Event::KeyValueSeparator,
value_event("b"),
newline_event(),
name_event("c"),
Event::KeyValueSeparator,
value_event("d"),
newline_event(),
]),
);
sections.insert(
SectionId(1),
file::section::Body(vec![name_event("e"), Event::KeyValueSeparator, value_event("f")].into()),
file::section::Body(vec![name_event("e"), Event::KeyValueSeparator, value_event("f")]),
);
sections
};
Expand Down
4 changes: 2 additions & 2 deletions gix-config/src/parse/events.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use smallvec::SmallVec;

use crate::{
parse,
parse::{section, Event, Section},
parse::{Event, Section},
};

/// A type store without allocation all events that are typically preceding the first section.
Expand Down Expand Up @@ -292,7 +292,7 @@ fn from_bytes<'a, 'b>(
filter: Option<fn(&Event<'a>) -> bool>,
) -> Result<Events<'b>, parse::Error> {
let mut header = None;
let mut events = section::Events::default();
let mut events = Vec::with_capacity(256);
let mut frontmatter = FrontMatterEvents::default();
let mut sections = Vec::new();
parse::from_bytes(input, &mut |e: Event<'_>| match e {
Expand Down
2 changes: 1 addition & 1 deletion gix-config/src/parse/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ pub struct Section<'a> {
/// The section name and subsection name, if any.
pub header: section::Header<'a>,
/// The syntactic events found in this section.
pub events: section::Events<'a>,
pub events: Vec<Event<'a>>,
}

/// A parsed comment containing the comment marker and comment.
Expand Down
Loading

0 comments on commit 17a81c7

Please sign in to comment.