mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-26 17:18:55 +00:00
libctf: Sanitize error types for PR 30836
Made sure there is no implicit conversion between signed and unsigned return value for functions setting the ctf_errno value. An example of the problem is that in ctf_member_next, the "offset" value is either 0L or (ctf_id_t)-1L, but it should have been 0L or -1L. The issue was discovered while building a 64 bit ld binary to be executed on the Windows platform. Example object file that demonstrates the issue is attached in the PR. libctf/ Affected functions adjusted. Signed-off-by: Torbjörn SVENSSON <torbjorn.svensson@foss.st.com> Co-Authored-By: Yvan ROUX <yvan.roux@foss.st.com>
This commit is contained in:
@@ -90,6 +90,23 @@ ctf_assert_internal (ctf_dict_t *fp, const char *file, size_t line,
|
||||
return expr;
|
||||
}
|
||||
|
||||
static inline int
|
||||
ctf_set_errno (ctf_dict_t *fp, int err)
|
||||
{
|
||||
fp->ctf_errno = err;
|
||||
/* Don't rely on CTF_ERR here as it will not properly sign extend on 64-bit
|
||||
Windows ABI. */
|
||||
return -1;
|
||||
}
|
||||
|
||||
static inline ctf_id_t
|
||||
ctf_set_typed_errno (ctf_dict_t *fp, int err)
|
||||
{
|
||||
fp->ctf_errno = err;
|
||||
return CTF_ERR;
|
||||
}
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user