@@ -20,7 +20,7 @@ pub(super) struct MapsEntry {
20
20
/// x = execute
21
21
/// s = shared
22
22
/// p = private (copy on write)
23
- // perms: [u8 ; 4],
23
+ perms : [ char ; 4 ] ,
24
24
/// Offset into the file (or "whatever").
25
25
// offset: u64,
26
26
/// device (major, minor)
@@ -115,12 +115,14 @@ impl FromStr for MapsEntry {
115
115
} else {
116
116
return Err ( parse_err) ;
117
117
} ;
118
- let _perms = if let & [ r, w, x, p, ..] = perms_str. as_bytes ( ) {
119
- // If a system in the future adds a 5th field to the permission list,
120
- // there's no reason to assume previous fields were invalidated.
121
- [ r, w, x, p]
122
- } else {
123
- return Err ( parse_err) ;
118
+ let perms: [ char ; 4 ] = {
119
+ let mut chars = perms_str. chars ( ) ;
120
+ let mut c = || chars. next ( ) . ok_or ( "insufficient perms" ) ;
121
+ let perms = [ c ( ) ?, c ( ) ?, c ( ) ?, c ( ) ?] ;
122
+ if chars. next ( ) . is_some ( ) {
123
+ return Err ( "too many perms" ) ;
124
+ }
125
+ perms
124
126
} ;
125
127
let _offset = hex ( offset_str) ?;
126
128
let _dev = if let Some ( ( major, minor) ) = dev_str. split_once ( ':' ) {
@@ -133,7 +135,7 @@ impl FromStr for MapsEntry {
133
135
134
136
Ok ( MapsEntry {
135
137
address,
136
- // perms,
138
+ perms,
137
139
// offset,
138
140
// dev,
139
141
// inode,
@@ -153,7 +155,7 @@ fn check_maps_entry_parsing_64bit() {
153
155
. unwrap( ) ,
154
156
MapsEntry {
155
157
address: ( 0xffffffffff600000 , 0xffffffffff601000 ) ,
156
- // perms: *b"--xp" ,
158
+ perms: [ '-' , '-' , 'x' , 'p' ] ,
157
159
// offset: 0x00000000,
158
160
// dev: (0x00, 0x00),
159
161
// inode: 0x0,
@@ -168,7 +170,7 @@ fn check_maps_entry_parsing_64bit() {
168
170
. unwrap( ) ,
169
171
MapsEntry {
170
172
address: ( 0x7f5985f46000 , 0x7f5985f48000 ) ,
171
- // perms: *b"rw-p" ,
173
+ perms: [ 'r' , 'w' , '-' , 'p' ] ,
172
174
// offset: 0x00039000,
173
175
// dev: (0x103, 0x06),
174
176
// inode: 0x76021795,
@@ -181,7 +183,7 @@ fn check_maps_entry_parsing_64bit() {
181
183
. unwrap( ) ,
182
184
MapsEntry {
183
185
address: ( 0x35b1a21000 , 0x35b1a22000 ) ,
184
- // perms: *b"rw-p" ,
186
+ perms: [ 'r' , 'w' , '-' , 'p' ] ,
185
187
// offset: 0x00000000,
186
188
// dev: (0x00, 0x00),
187
189
// inode: 0x0,
@@ -205,7 +207,7 @@ fn check_maps_entry_parsing_32bit() {
205
207
. unwrap( ) ,
206
208
MapsEntry {
207
209
address: ( 0x08056000 , 0x08077000 ) ,
208
- // perms: *b"rw-p" ,
210
+ perms: [ 'r' , 'w' , '-' , 'p' ] ,
209
211
// offset: 0x00000000,
210
212
// dev: (0x00, 0x00),
211
213
// inode: 0x0,
@@ -220,7 +222,7 @@ fn check_maps_entry_parsing_32bit() {
220
222
. unwrap( ) ,
221
223
MapsEntry {
222
224
address: ( 0xb7c79000 , 0xb7e02000 ) ,
223
- // perms: *b"r--p" ,
225
+ perms: [ 'r' , '-' , '-' , 'p' ] ,
224
226
// offset: 0x00000000,
225
227
// dev: (0x08, 0x01),
226
228
// inode: 0x60662705,
@@ -233,7 +235,7 @@ fn check_maps_entry_parsing_32bit() {
233
235
. unwrap( ) ,
234
236
MapsEntry {
235
237
address: ( 0xb7e02000 , 0xb7e03000 ) ,
236
- // perms: *b"rw-p" ,
238
+ perms: [ 'r' , 'w' , '-' , 'p' ] ,
237
239
// offset: 0x00000000,
238
240
// dev: (0x00, 0x00),
239
241
// inode: 0x0,
0 commit comments