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>
{
int year;
const char *s = dmi_get_system_info(field);
+ char *e;
if (!s)
return -1;
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;