Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
092ac1fb
Commit
092ac1fb
authored
Jan 11, 2007
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
preloader: Added printf format checking and fix some formats.
parent
13029a25
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
27 additions
and
13 deletions
+27
-13
preloader.c
loader/preloader.c
+27
-13
No files found.
loader/preloader.c
View file @
092ac1fb
...
...
@@ -358,12 +358,14 @@ static inline void *wld_memset( void *dest, int val, size_t len )
*
* %x prints a hex number
* %s prints a string
* %p prints a pointer
*/
static
int
wld_vsprintf
(
char
*
buffer
,
const
char
*
fmt
,
va_list
args
)
{
static
const
char
hex_chars
[
16
]
=
"0123456789abcdef"
;
const
char
*
p
=
fmt
;
char
*
str
=
buffer
;
int
i
;
while
(
*
p
)
{
...
...
@@ -372,11 +374,23 @@ static int wld_vsprintf(char *buffer, const char *fmt, va_list args )
p
++
;
if
(
*
p
==
'x'
)
{
int
i
;
unsigned
int
x
=
va_arg
(
args
,
unsigned
int
);
for
(
i
=
7
;
i
>=
0
;
i
--
)
*
str
++
=
hex_chars
[(
x
>>
(
i
*
4
))
&
0xf
];
}
else
if
(
p
[
0
]
==
'l'
&&
p
[
1
]
==
'x'
)
{
unsigned
long
x
=
va_arg
(
args
,
unsigned
long
);
for
(
i
=
7
;
i
>=
0
;
i
--
)
*
str
++
=
hex_chars
[(
x
>>
(
i
*
4
))
&
0xf
];
p
++
;
}
else
if
(
*
p
==
'p'
)
{
unsigned
long
x
=
(
unsigned
long
)
va_arg
(
args
,
void
*
);
for
(
i
=
7
;
i
>=
0
;
i
--
)
*
str
++
=
hex_chars
[(
x
>>
(
i
*
4
))
&
0xf
];
}
else
if
(
*
p
==
's'
)
{
char
*
s
=
va_arg
(
args
,
char
*
);
...
...
@@ -393,7 +407,7 @@ static int wld_vsprintf(char *buffer, const char *fmt, va_list args )
return
str
-
buffer
;
}
static
void
wld_printf
(
const
char
*
fmt
,
...
)
static
__attribute__
((
format
(
printf
,
1
,
2
)))
void
wld_printf
(
const
char
*
fmt
,
...
)
{
va_list
args
;
char
buffer
[
256
];
...
...
@@ -405,7 +419,7 @@ static void wld_printf(const char *fmt, ... )
wld_write
(
2
,
buffer
,
len
);
}
static
__attribute__
((
noreturn
))
void
fatal_error
(
const
char
*
fmt
,
...
)
static
__attribute__
((
noreturn
,
format
(
printf
,
1
,
2
)
))
void
fatal_error
(
const
char
*
fmt
,
...
)
{
va_list
args
;
char
buffer
[
256
];
...
...
@@ -453,8 +467,8 @@ static void dump_auxiliary( ElfW(auxv_t) *av )
for
(
;
av
->
a_type
!=
AT_NULL
;
av
++
)
{
for
(
i
=
0
;
names
[
i
].
name
;
i
++
)
if
(
names
[
i
].
val
==
av
->
a_type
)
break
;
if
(
names
[
i
].
name
)
wld_printf
(
"%s = %x
\n
"
,
names
[
i
].
name
,
av
->
a_un
.
a_val
);
else
wld_printf
(
"%x = %x
\n
"
,
av
->
a_type
,
av
->
a_un
.
a_val
);
if
(
names
[
i
].
name
)
wld_printf
(
"%s = %
l
x
\n
"
,
names
[
i
].
name
,
av
->
a_un
.
a_val
);
else
wld_printf
(
"%x = %
l
x
\n
"
,
av
->
a_type
,
av
->
a_un
.
a_val
);
}
}
#endif
...
...
@@ -597,7 +611,7 @@ static void map_so_lib( const char *name, struct wld_link_map *l)
{
#ifdef DUMP_SEGMENTS
wld_printf
(
"ph = %
x
\n
"
,
ph
);
wld_printf
(
"ph = %
p
\n
"
,
ph
);
wld_printf
(
" p_type = %x
\n
"
,
ph
->
p_type
);
wld_printf
(
" p_flags = %x
\n
"
,
ph
->
p_flags
);
wld_printf
(
" p_offset = %x
\n
"
,
ph
->
p_offset
);
...
...
@@ -696,8 +710,8 @@ static void map_so_lib( const char *name, struct wld_link_map *l)
/* sanity check */
if
((
char
*
)
c
->
mapstart
+
maplength
>
preloader_start
&&
(
char
*
)
c
->
mapstart
<=
preloader_end
)
fatal_error
(
"%s: binary overlaps preloader (%
x-%x
)
\n
"
,
name
,
c
->
mapstart
,
(
char
*
)
c
->
mapstart
+
maplength
);
fatal_error
(
"%s: binary overlaps preloader (%
p-%p
)
\n
"
,
name
,
(
char
*
)
c
->
mapstart
,
(
char
*
)
c
->
mapstart
+
maplength
);
ELF_FIXED_ADDRESS
(
loader
,
c
->
mapstart
);
}
...
...
@@ -815,7 +829,7 @@ static void *find_symbol( const ElfW(Phdr) *phdr, int num, const char *var, int
/* check the values */
#ifdef DUMP_SYMS
wld_printf
(
"%
x
%x
\n
"
,
phdr
,
num
);
wld_printf
(
"%
p
%x
\n
"
,
phdr
,
num
);
#endif
if
(
(
phdr
==
NULL
)
||
(
num
==
0
)
)
{
...
...
@@ -929,7 +943,7 @@ static void preload_reserve( const char *str )
else
if
((
char
*
)
end
>
preloader_start
&&
(
char
*
)
start
<=
preloader_end
)
{
wld_printf
(
"WINEPRELOADRESERVE range %
x-%x overlaps preloader %x-%x
\n
"
,
wld_printf
(
"WINEPRELOADRESERVE range %
p-%p overlaps preloader %p-%p
\n
"
,
start
,
end
,
preloader_start
,
preloader_end
);
start
=
end
=
NULL
;
}
...
...
@@ -1048,7 +1062,7 @@ void* wld_start( void **stack )
preloader_end
=
(
char
*
)((
unsigned
int
)(
_end
+
page_mask
)
&
~
page_mask
);
#ifdef DUMP_AUX_INFO
wld_printf
(
"stack = %
x
\n
"
,
*
stack
);
wld_printf
(
"stack = %
p
\n
"
,
*
stack
);
for
(
i
=
0
;
i
<
*
pargc
;
i
++
)
wld_printf
(
"argv[%x] = %s
\n
"
,
i
,
argv
[
i
]);
dump_auxiliary
(
av
);
#endif
...
...
@@ -1060,7 +1074,7 @@ void* wld_start( void **stack )
if
(
wld_mmap
(
preload_info
[
i
].
addr
,
preload_info
[
i
].
size
,
PROT_NONE
,
MAP_FIXED
|
MAP_PRIVATE
|
MAP_ANON
|
MAP_NORESERVE
,
-
1
,
0
)
==
(
void
*
)
-
1
)
{
wld_printf
(
"preloader: Warning: failed to reserve range %
x-%x
\n
"
,
wld_printf
(
"preloader: Warning: failed to reserve range %
p-%p
\n
"
,
preload_info
[
i
].
addr
,
(
char
*
)
preload_info
[
i
].
addr
+
preload_info
[
i
].
size
);
remove_preload_range
(
i
);
i
--
;
...
...
@@ -1117,7 +1131,7 @@ void* wld_start( void **stack )
set_auxiliary_values
(
av
,
new_av
,
delete_av
,
stack
);
#ifdef DUMP_AUX_INFO
wld_printf
(
"new stack = %
x
\n
"
,
*
stack
);
wld_printf
(
"new stack = %
p
\n
"
,
*
stack
);
wld_printf
(
"jumping to %x
\n
"
,
ld_so_map
.
l_entry
);
#endif
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment