@@ -18,7 +18,7 @@ pub(super) struct MapsEntry {
18
18
/// x = execute
19
19
/// s = shared
20
20
/// p = private (copy on write)
21
- // perms: [u8 ; 4],
21
+ perms : [ char ; 4 ] ,
22
22
/// Offset into the file (or "whatever").
23
23
// offset: usize,
24
24
/// device (major, minor)
@@ -105,12 +105,14 @@ impl FromStr for MapsEntry {
105
105
} else {
106
106
return Err ( parse_err) ;
107
107
} ;
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
114
116
} ;
115
117
let _offset = hex ( offset_str) ?;
116
118
let _dev = if let Some ( ( major, minor) ) = dev_str. split_once ( ':' ) {
@@ -123,7 +125,7 @@ impl FromStr for MapsEntry {
123
125
124
126
Ok ( MapsEntry {
125
127
address,
126
- // perms,
128
+ perms,
127
129
// offset,
128
130
// dev,
129
131
// inode,
@@ -143,7 +145,7 @@ fn check_maps_entry_parsing_64bit() {
143
145
. unwrap( ) ,
144
146
MapsEntry {
145
147
address: ( 0xffffffffff600000 , 0xffffffffff601000 ) ,
146
- // perms: *b"--xp" ,
148
+ perms: [ '-' , '-' , 'x' , 'p' ] ,
147
149
// offset: 0x00000000,
148
150
// dev: (0x00, 0x00),
149
151
// inode: 0x0,
@@ -158,7 +160,7 @@ fn check_maps_entry_parsing_64bit() {
158
160
. unwrap( ) ,
159
161
MapsEntry {
160
162
address: ( 0x7f5985f46000 , 0x7f5985f48000 ) ,
161
- // perms: *b"rw-p" ,
163
+ perms: [ 'r' , 'w' , '-' , 'p' ] ,
162
164
// offset: 0x00039000,
163
165
// dev: (0x103, 0x06),
164
166
// inode: 0x76021795,
@@ -171,7 +173,7 @@ fn check_maps_entry_parsing_64bit() {
171
173
. unwrap( ) ,
172
174
MapsEntry {
173
175
address: ( 0x35b1a21000 , 0x35b1a22000 ) ,
174
- // perms: *b"rw-p" ,
176
+ perms: [ 'r' , 'w' , '-' , 'p' ] ,
175
177
// offset: 0x00000000,
176
178
// dev: (0x00, 0x00),
177
179
// inode: 0x0,
@@ -195,7 +197,7 @@ fn check_maps_entry_parsing_32bit() {
195
197
. unwrap( ) ,
196
198
MapsEntry {
197
199
address: ( 0x08056000 , 0x08077000 ) ,
198
- // perms: *b"rw-p" ,
200
+ perms: [ 'r' , 'w' , '-' , 'p' ] ,
199
201
// offset: 0x00000000,
200
202
// dev: (0x00, 0x00),
201
203
// inode: 0x0,
@@ -210,7 +212,7 @@ fn check_maps_entry_parsing_32bit() {
210
212
. unwrap( ) ,
211
213
MapsEntry {
212
214
address: ( 0xb7c79000 , 0xb7e02000 ) ,
213
- // perms: *b"r--p" ,
215
+ perms: [ 'r' , '-' , '-' , 'p' ] ,
214
216
// offset: 0x00000000,
215
217
// dev: (0x08, 0x01),
216
218
// inode: 0x60662705,
@@ -223,7 +225,7 @@ fn check_maps_entry_parsing_32bit() {
223
225
. unwrap( ) ,
224
226
MapsEntry {
225
227
address: ( 0xb7e02000 , 0xb7e03000 ) ,
226
- // perms: *b"rw-p" ,
228
+ perms: [ 'r' , 'w' , '-' , 'p' ] ,
227
229
// offset: 0x00000000,
228
230
// dev: (0x00, 0x00),
229
231
// inode: 0x0,
0 commit comments