Skip to content

Commit

Permalink
dmi: fix date handling in dmi_get_year()
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Tejun Heo authored and Jeff Garzik committed Sep 9, 2009
1 parent bd30add commit 02c24fa
Showing 1 changed file with 3 additions and 2 deletions.
5 changes: 3 additions & 2 deletions drivers/firmware/dmi_scan.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down

0 comments on commit 02c24fa

Please sign in to comment.