File tree Expand file tree Collapse file tree 3 files changed +22
-15
lines changed Expand file tree Collapse file tree 3 files changed +22
-15
lines changed Original file line number Diff line number Diff line change
1
+ 2019-02-20 Alan Modra <
[email protected] >
2
+
3
+ PR 24236
4
+ * archive64.c (_bfd_archive_64_bit_slurp_armap): Move code adding
5
+ sentinel NUL to string buffer nearer to loop where it is used.
6
+ Don't go past sentinel when scanning strings, and don't write
7
+ NUL again.
8
+ * archive.c (do_slurp_coff_armap): Simplify string handling to
9
+ archive64.c style.
10
+
1
11
2019-02-19 Alan Modra <
[email protected] >
2
12
3
13
PR 24235
Original file line number Diff line number Diff line change @@ -1012,6 +1012,7 @@ do_slurp_coff_armap (bfd *abfd)
1012
1012
int * raw_armap , * rawptr ;
1013
1013
struct artdata * ardata = bfd_ardata (abfd );
1014
1014
char * stringbase ;
1015
+ char * stringend ;
1015
1016
bfd_size_type stringsize ;
1016
1017
bfd_size_type parsed_size ;
1017
1018
carsym * carsyms ;
@@ -1071,22 +1072,18 @@ do_slurp_coff_armap (bfd *abfd)
1071
1072
}
1072
1073
1073
1074
/* OK, build the carsyms. */
1074
- for (i = 0 ; i < nsymz && stringsize > 0 ; i ++ )
1075
+ stringend = stringbase + stringsize ;
1076
+ * stringend = 0 ;
1077
+ for (i = 0 ; i < nsymz ; i ++ )
1075
1078
{
1076
- bfd_size_type len ;
1077
-
1078
1079
rawptr = raw_armap + i ;
1079
1080
carsyms -> file_offset = swap ((bfd_byte * ) rawptr );
1080
1081
carsyms -> name = stringbase ;
1081
- /* PR 17512: file: 4a1d50c1. */
1082
- len = strnlen (stringbase , stringsize );
1083
- if (len < stringsize )
1084
- len ++ ;
1085
- stringbase += len ;
1086
- stringsize -= len ;
1082
+ stringbase += strlen (stringbase );
1083
+ if (stringbase != stringend )
1084
+ ++ stringbase ;
1087
1085
carsyms ++ ;
1088
1086
}
1089
- * stringbase = 0 ;
1090
1087
1091
1088
ardata -> symdef_count = nsymz ;
1092
1089
ardata -> first_file_filepos = bfd_tell (abfd );
Original file line number Diff line number Diff line change @@ -100,8 +100,6 @@ _bfd_archive_64_bit_slurp_armap (bfd *abfd)
100
100
return FALSE;
101
101
carsyms = ardata -> symdefs ;
102
102
stringbase = ((char * ) ardata -> symdefs ) + carsym_size ;
103
- stringbase [stringsize ] = 0 ;
104
- stringend = stringbase + stringsize ;
105
103
106
104
raw_armap = (bfd_byte * ) bfd_alloc (abfd , ptrsize );
107
105
if (raw_armap == NULL )
@@ -115,15 +113,17 @@ _bfd_archive_64_bit_slurp_armap (bfd *abfd)
115
113
goto release_raw_armap ;
116
114
}
117
115
116
+ stringend = stringbase + stringsize ;
117
+ * stringend = 0 ;
118
118
for (i = 0 ; i < nsymz ; i ++ )
119
119
{
120
120
carsyms -> file_offset = bfd_getb64 (raw_armap + i * 8 );
121
121
carsyms -> name = stringbase ;
122
- if (stringbase < stringend )
123
- stringbase += strlen (stringbase ) + 1 ;
122
+ stringbase += strlen (stringbase );
123
+ if (stringbase != stringend )
124
+ ++ stringbase ;
124
125
++ carsyms ;
125
126
}
126
- * stringbase = '\0' ;
127
127
128
128
ardata -> symdef_count = nsymz ;
129
129
ardata -> first_file_filepos = bfd_tell (abfd );
You can’t perform that action at this time.
0 commit comments