@@ -20,7 +20,7 @@ pub(super) struct MapsEntry {
2020 /// x = execute
2121 /// s = shared
2222 /// p = private (copy on write)
23- // perms: [u8 ; 4],
23+ perms : [ char ; 4 ] ,
2424 /// Offset into the file (or "whatever").
2525 // offset: u64,
2626 /// device (major, minor)
@@ -115,12 +115,14 @@ impl FromStr for MapsEntry {
115115 } else {
116116 return Err ( parse_err) ;
117117 } ;
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
124126 } ;
125127 let _offset = hex ( offset_str) ?;
126128 let _dev = if let Some ( ( major, minor) ) = dev_str. split_once ( ':' ) {
@@ -133,7 +135,7 @@ impl FromStr for MapsEntry {
133135
134136 Ok ( MapsEntry {
135137 address,
136- // perms,
138+ perms,
137139 // offset,
138140 // dev,
139141 // inode,
@@ -153,7 +155,7 @@ fn check_maps_entry_parsing_64bit() {
153155 . unwrap( ) ,
154156 MapsEntry {
155157 address: ( 0xffffffffff600000 , 0xffffffffff601000 ) ,
156- // perms: *b"--xp" ,
158+ perms: [ '-' , '-' , 'x' , 'p' ] ,
157159 // offset: 0x00000000,
158160 // dev: (0x00, 0x00),
159161 // inode: 0x0,
@@ -168,7 +170,7 @@ fn check_maps_entry_parsing_64bit() {
168170 . unwrap( ) ,
169171 MapsEntry {
170172 address: ( 0x7f5985f46000 , 0x7f5985f48000 ) ,
171- // perms: *b"rw-p" ,
173+ perms: [ 'r' , 'w' , '-' , 'p' ] ,
172174 // offset: 0x00039000,
173175 // dev: (0x103, 0x06),
174176 // inode: 0x76021795,
@@ -181,7 +183,7 @@ fn check_maps_entry_parsing_64bit() {
181183 . unwrap( ) ,
182184 MapsEntry {
183185 address: ( 0x35b1a21000 , 0x35b1a22000 ) ,
184- // perms: *b"rw-p" ,
186+ perms: [ 'r' , 'w' , '-' , 'p' ] ,
185187 // offset: 0x00000000,
186188 // dev: (0x00, 0x00),
187189 // inode: 0x0,
@@ -205,7 +207,7 @@ fn check_maps_entry_parsing_32bit() {
205207 . unwrap( ) ,
206208 MapsEntry {
207209 address: ( 0x08056000 , 0x08077000 ) ,
208- // perms: *b"rw-p" ,
210+ perms: [ 'r' , 'w' , '-' , 'p' ] ,
209211 // offset: 0x00000000,
210212 // dev: (0x00, 0x00),
211213 // inode: 0x0,
@@ -220,7 +222,7 @@ fn check_maps_entry_parsing_32bit() {
220222 . unwrap( ) ,
221223 MapsEntry {
222224 address: ( 0xb7c79000 , 0xb7e02000 ) ,
223- // perms: *b"r--p" ,
225+ perms: [ 'r' , '-' , '-' , 'p' ] ,
224226 // offset: 0x00000000,
225227 // dev: (0x08, 0x01),
226228 // inode: 0x60662705,
@@ -233,7 +235,7 @@ fn check_maps_entry_parsing_32bit() {
233235 . unwrap( ) ,
234236 MapsEntry {
235237 address: ( 0xb7e02000 , 0xb7e03000 ) ,
236- // perms: *b"rw-p" ,
238+ perms: [ 'r' , 'w' , '-' , 'p' ] ,
237239 // offset: 0x00000000,
238240 // dev: (0x00, 0x00),
239241 // inode: 0x0,
0 commit comments