@@ -18,7 +18,7 @@ pub(super) struct MapsEntry {
1818 /// x = execute
1919 /// s = shared
2020 /// p = private (copy on write)
21- // perms: [u8 ; 4],
21+ perms : [ char ; 4 ] ,
2222 /// Offset into the file (or "whatever").
2323 // offset: usize,
2424 /// device (major, minor)
@@ -105,12 +105,14 @@ impl FromStr for MapsEntry {
105105 } else {
106106 return Err ( parse_err) ;
107107 } ;
108- let _perms = if let & [ r, w, x, p, ..] = perms_str. as_bytes ( ) {
109- // If a system in the future adds a 5th field to the permission list,
110- // there's no reason to assume previous fields were invalidated.
111- [ r, w, x, p]
112- } else {
113- return Err ( parse_err) ;
108+ let perms: [ char ; 4 ] = {
109+ let mut chars = perms_str. chars ( ) ;
110+ let mut c = || chars. next ( ) . ok_or ( "insufficient perms" ) ;
111+ let perms = [ c ( ) ?, c ( ) ?, c ( ) ?, c ( ) ?] ;
112+ if chars. next ( ) . is_some ( ) {
113+ return Err ( "too many perms" ) ;
114+ }
115+ perms
114116 } ;
115117 let _offset = hex ( offset_str) ?;
116118 let _dev = if let Some ( ( major, minor) ) = dev_str. split_once ( ':' ) {
@@ -123,7 +125,7 @@ impl FromStr for MapsEntry {
123125
124126 Ok ( MapsEntry {
125127 address,
126- // perms,
128+ perms,
127129 // offset,
128130 // dev,
129131 // inode,
@@ -143,7 +145,7 @@ fn check_maps_entry_parsing_64bit() {
143145 . unwrap( ) ,
144146 MapsEntry {
145147 address: ( 0xffffffffff600000 , 0xffffffffff601000 ) ,
146- // perms: *b"--xp" ,
148+ perms: [ '-' , '-' , 'x' , 'p' ] ,
147149 // offset: 0x00000000,
148150 // dev: (0x00, 0x00),
149151 // inode: 0x0,
@@ -158,7 +160,7 @@ fn check_maps_entry_parsing_64bit() {
158160 . unwrap( ) ,
159161 MapsEntry {
160162 address: ( 0x7f5985f46000 , 0x7f5985f48000 ) ,
161- // perms: *b"rw-p" ,
163+ perms: [ 'r' , 'w' , '-' , 'p' ] ,
162164 // offset: 0x00039000,
163165 // dev: (0x103, 0x06),
164166 // inode: 0x76021795,
@@ -171,7 +173,7 @@ fn check_maps_entry_parsing_64bit() {
171173 . unwrap( ) ,
172174 MapsEntry {
173175 address: ( 0x35b1a21000 , 0x35b1a22000 ) ,
174- // perms: *b"rw-p" ,
176+ perms: [ 'r' , 'w' , '-' , 'p' ] ,
175177 // offset: 0x00000000,
176178 // dev: (0x00, 0x00),
177179 // inode: 0x0,
@@ -195,7 +197,7 @@ fn check_maps_entry_parsing_32bit() {
195197 . unwrap( ) ,
196198 MapsEntry {
197199 address: ( 0x08056000 , 0x08077000 ) ,
198- // perms: *b"rw-p" ,
200+ perms: [ 'r' , 'w' , '-' , 'p' ] ,
199201 // offset: 0x00000000,
200202 // dev: (0x00, 0x00),
201203 // inode: 0x0,
@@ -210,7 +212,7 @@ fn check_maps_entry_parsing_32bit() {
210212 . unwrap( ) ,
211213 MapsEntry {
212214 address: ( 0xb7c79000 , 0xb7e02000 ) ,
213- // perms: *b"r--p" ,
215+ perms: [ 'r' , '-' , '-' , 'p' ] ,
214216 // offset: 0x00000000,
215217 // dev: (0x08, 0x01),
216218 // inode: 0x60662705,
@@ -223,7 +225,7 @@ fn check_maps_entry_parsing_32bit() {
223225 . unwrap( ) ,
224226 MapsEntry {
225227 address: ( 0xb7e02000 , 0xb7e03000 ) ,
226- // perms: *b"rw-p" ,
228+ perms: [ 'r' , 'w' , '-' , 'p' ] ,
227229 // offset: 0x00000000,
228230 // dev: (0x00, 0x00),
229231 // inode: 0x0,
0 commit comments