dmi: fix date handling in dmi_get_year()
Year parsing in dmi_get_year() had the following two bugs. * "00" is treated as invalid instead of 2000 because zero return from simple_strtoul() is treated as error. * "0N" where N >= 8 is treated as invalid of 200N because the leading 0 is considered to specify octal. Fix the above two bugs by using endptr to detect invalid number and forcing decimal. Signed-off-by: Tejun Heo <tj@kernel.org> Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
This commit is contained in:
Родитель
bd30add88c
Коммит
02c24fa877
|
@ -577,6 +577,7 @@ int dmi_get_year(int field)
|
|||
{
|
||||
int year;
|
||||
const char *s = dmi_get_system_info(field);
|
||||
char *e;
|
||||
|
||||
if (!s)
|
||||
return -1;
|
||||
|
@ -587,8 +588,8 @@ int dmi_get_year(int field)
|
|||
return 0;
|
||||
|
||||
s += 1;
|
||||
year = simple_strtoul(s, NULL, 0);
|
||||
if (year && year < 100) { /* 2-digit year */
|
||||
year = simple_strtoul(s, &e, 10);
|
||||
if (s != e && year < 100) { /* 2-digit year */
|
||||
year += 1900;
|
||||
if (year < 1996) /* no dates < spec 1.0 */
|
||||
year += 100;
|
||||
|
|
Загрузка…
Ссылка в новой задаче