mirror of
https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git
synced 2024-11-28 20:44:08 +08:00
6b6c27fb8a
On 64-bit systems (or anything with sizeof(long) > sizeof(int)), we sometimes get error codes passed to error_message which have been cast from an (int) to an (unsigned int). This almost always happens if you're using libgssapi_krb5, which returns an error code which is less than 0 but is returned in an (unsigned int). For example, -1765328377L gets cast to 2529638919, which is 0x96c73a07, not 0xffffffff96c73a07, so error_message() fails to find a matching error table. When error_message() then calls the error_table_name() function to get a name to use in the "unknown code" message, it gets a correct value back. This happens because error_table_name() drops most of the higher bits of the parameter it's passed before doing anything else with it (& 077777777f, or & 0xffffff). If we did the same thing in error_message(), we wouldn't have a problem there, either. Problem reported and fixed by: Nalin Dahyabhai Addresses-Sourceforge-Bug: #1809658 Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> |
||
---|---|---|
.. | ||
test_cases | ||
com_err.3 | ||
com_err.c | ||
com_err.h | ||
com_err.pc.in | ||
com_err.texinfo | ||
com_right.c | ||
compile_et.1 | ||
compile_et.sh.in | ||
error_message.c | ||
error_table.h | ||
et_c.awk | ||
et_h.awk | ||
et_name.c | ||
init_et.c | ||
internal.h | ||
Makefile.in | ||
texinfo.tex | ||
vfprintf.c |