Skip to content
This repository was archived by the owner on Mar 25, 2024. It is now read-only.
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 007fc2d

Browse files
authoredDec 21, 2023
Merge pull request #401 from dtolnay/unsafeop
Turn on deny(unsafe_op_in_unsafe_fn)
2 parents 1b6e448 + 5bac247 commit 007fc2d

File tree

4 files changed

+35
-33
lines changed

4 files changed

+35
-33
lines changed
 

‎src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@
116116
//! ```
117117
118118
#![doc(html_root_url = "https://docs.rs/serde_yaml/0.9.28")]
119-
#![deny(missing_docs)]
119+
#![deny(missing_docs, unsafe_op_in_unsafe_fn)]
120120
// Suppressed clippy_pedantic lints
121121
#![allow(
122122
// buggy

‎src/libyaml/emitter.rs

+6-5
Original file line numberDiff line numberDiff line change
@@ -197,13 +197,14 @@ impl<'a> Emitter<'a> {
197197

198198
unsafe fn write_handler(data: *mut c_void, buffer: *mut u8, size: u64) -> i32 {
199199
let data = data.cast::<EmitterPinned>();
200-
match io::Write::write_all(
201-
&mut *(*data).write,
202-
slice::from_raw_parts(buffer, size as usize),
203-
) {
200+
match io::Write::write_all(unsafe { &mut *(*data).write }, unsafe {
201+
slice::from_raw_parts(buffer, size as usize)
202+
}) {
204203
Ok(()) => 1,
205204
Err(err) => {
206-
(*data).write_error = Some(err);
205+
unsafe {
206+
(*data).write_error = Some(err);
207+
}
207208
0
208209
}
209210
}

‎src/libyaml/error.rs

+13-13
Original file line numberDiff line numberDiff line change
@@ -18,41 +18,41 @@ pub(crate) struct Error {
1818
impl Error {
1919
pub unsafe fn parse_error(parser: *const sys::yaml_parser_t) -> Self {
2020
Error {
21-
kind: (*parser).error,
22-
problem: match NonNull::new((*parser).problem as *mut _) {
23-
Some(problem) => CStr::from_ptr(problem),
21+
kind: unsafe { (*parser).error },
22+
problem: match NonNull::new(unsafe { (*parser).problem as *mut _ }) {
23+
Some(problem) => unsafe { CStr::from_ptr(problem) },
2424
None => CStr::from_bytes_with_nul(b"libyaml parser failed but there is no error\0"),
2525
},
26-
problem_offset: (*parser).problem_offset,
26+
problem_offset: unsafe { (*parser).problem_offset },
2727
problem_mark: Mark {
28-
sys: (*parser).problem_mark,
28+
sys: unsafe { (*parser).problem_mark },
2929
},
30-
context: match NonNull::new((*parser).context as *mut _) {
31-
Some(context) => Some(CStr::from_ptr(context)),
30+
context: match NonNull::new(unsafe { (*parser).context as *mut _ }) {
31+
Some(context) => Some(unsafe { CStr::from_ptr(context) }),
3232
None => None,
3333
},
3434
context_mark: Mark {
35-
sys: (*parser).context_mark,
35+
sys: unsafe { (*parser).context_mark },
3636
},
3737
}
3838
}
3939

4040
pub unsafe fn emit_error(emitter: *const sys::yaml_emitter_t) -> Self {
4141
Error {
42-
kind: (*emitter).error,
43-
problem: match NonNull::new((*emitter).problem as *mut _) {
44-
Some(problem) => CStr::from_ptr(problem),
42+
kind: unsafe { (*emitter).error },
43+
problem: match NonNull::new(unsafe { (*emitter).problem as *mut _ }) {
44+
Some(problem) => unsafe { CStr::from_ptr(problem) },
4545
None => {
4646
CStr::from_bytes_with_nul(b"libyaml emitter failed but there is no error\0")
4747
}
4848
},
4949
problem_offset: 0,
5050
problem_mark: Mark {
51-
sys: MaybeUninit::<sys::yaml_mark_t>::zeroed().assume_init(),
51+
sys: unsafe { MaybeUninit::<sys::yaml_mark_t>::zeroed().assume_init() },
5252
},
5353
context: None,
5454
context_mark: Mark {
55-
sys: MaybeUninit::<sys::yaml_mark_t>::zeroed().assume_init(),
55+
sys: unsafe { MaybeUninit::<sys::yaml_mark_t>::zeroed().assume_init() },
5656
},
5757
}
5858
}

‎src/libyaml/parser.rs

+15-14
Original file line numberDiff line numberDiff line change
@@ -110,15 +110,16 @@ unsafe fn convert_event<'input>(
110110
sys::YAML_STREAM_END_EVENT => Event::StreamEnd,
111111
sys::YAML_DOCUMENT_START_EVENT => Event::DocumentStart,
112112
sys::YAML_DOCUMENT_END_EVENT => Event::DocumentEnd,
113-
sys::YAML_ALIAS_EVENT => Event::Alias(optional_anchor(sys.data.alias.anchor).unwrap()),
113+
sys::YAML_ALIAS_EVENT => {
114+
Event::Alias(unsafe { optional_anchor(sys.data.alias.anchor) }.unwrap())
115+
}
114116
sys::YAML_SCALAR_EVENT => Event::Scalar(Scalar {
115-
anchor: optional_anchor(sys.data.scalar.anchor),
116-
tag: optional_tag(sys.data.scalar.tag),
117-
value: Box::from(slice::from_raw_parts(
118-
sys.data.scalar.value,
119-
sys.data.scalar.length as usize,
120-
)),
121-
style: match sys.data.scalar.style {
117+
anchor: unsafe { optional_anchor(sys.data.scalar.anchor) },
118+
tag: unsafe { optional_tag(sys.data.scalar.tag) },
119+
value: Box::from(unsafe {
120+
slice::from_raw_parts(sys.data.scalar.value, sys.data.scalar.length as usize)
121+
}),
122+
style: match unsafe { sys.data.scalar.style } {
122123
sys::YAML_PLAIN_SCALAR_STYLE => ScalarStyle::Plain,
123124
sys::YAML_SINGLE_QUOTED_SCALAR_STYLE => ScalarStyle::SingleQuoted,
124125
sys::YAML_DOUBLE_QUOTED_SCALAR_STYLE => ScalarStyle::DoubleQuoted,
@@ -133,13 +134,13 @@ unsafe fn convert_event<'input>(
133134
},
134135
}),
135136
sys::YAML_SEQUENCE_START_EVENT => Event::SequenceStart(SequenceStart {
136-
anchor: optional_anchor(sys.data.sequence_start.anchor),
137-
tag: optional_tag(sys.data.sequence_start.tag),
137+
anchor: unsafe { optional_anchor(sys.data.sequence_start.anchor) },
138+
tag: unsafe { optional_tag(sys.data.sequence_start.tag) },
138139
}),
139140
sys::YAML_SEQUENCE_END_EVENT => Event::SequenceEnd,
140141
sys::YAML_MAPPING_START_EVENT => Event::MappingStart(MappingStart {
141-
anchor: optional_anchor(sys.data.mapping_start.anchor),
142-
tag: optional_tag(sys.data.mapping_start.tag),
142+
anchor: unsafe { optional_anchor(sys.data.mapping_start.anchor) },
143+
tag: unsafe { optional_tag(sys.data.mapping_start.tag) },
143144
}),
144145
sys::YAML_MAPPING_END_EVENT => Event::MappingEnd,
145146
sys::YAML_NO_EVENT => unreachable!(),
@@ -149,13 +150,13 @@ unsafe fn convert_event<'input>(
149150

150151
unsafe fn optional_anchor(anchor: *const u8) -> Option<Anchor> {
151152
let ptr = NonNull::new(anchor as *mut i8)?;
152-
let cstr = CStr::from_ptr(ptr);
153+
let cstr = unsafe { CStr::from_ptr(ptr) };
153154
Some(Anchor(Box::from(cstr.to_bytes())))
154155
}
155156

156157
unsafe fn optional_tag(tag: *const u8) -> Option<Tag> {
157158
let ptr = NonNull::new(tag as *mut i8)?;
158-
let cstr = CStr::from_ptr(ptr);
159+
let cstr = unsafe { CStr::from_ptr(ptr) };
159160
Some(Tag(Box::from(cstr.to_bytes())))
160161
}
161162

0 commit comments

Comments
 (0)
This repository has been archived.