Bug #3254 <https://bugs.freedesktop.org/show_bug.cgi?id=3254> Make sure
screensaver & DPMS timeouts don't overflow when multiplied by MILLI_PER_MIN. (Reported by Zachary J. Slater)
This commit is contained in:
parent
29b5f846d2
commit
d82aeb55ca
|
@ -1007,24 +1007,39 @@ configServerFlags(XF86ConfFlagsPtr flagsconf, XF86OptionPtr layoutopts)
|
||||||
else
|
else
|
||||||
xf86Info.estimateSizesAggressively = 0;
|
xf86Info.estimateSizesAggressively = 0;
|
||||||
|
|
||||||
|
/* Make sure that timers don't overflow CARD32's after multiplying */
|
||||||
|
#define MAX_TIME_IN_MIN (0x7fffffff / MILLI_PER_MIN)
|
||||||
|
|
||||||
i = -1;
|
i = -1;
|
||||||
xf86GetOptValInteger(FlagOptions, FLAG_SAVER_BLANKTIME, &i);
|
xf86GetOptValInteger(FlagOptions, FLAG_SAVER_BLANKTIME, &i);
|
||||||
if (i >= 0)
|
if ((i >= 0) && (i < MAX_TIME_IN_MIN))
|
||||||
ScreenSaverTime = defaultScreenSaverTime = i * MILLI_PER_MIN;
|
ScreenSaverTime = defaultScreenSaverTime = i * MILLI_PER_MIN;
|
||||||
|
else if (i != -1)
|
||||||
|
xf86ConfigError("BlankTime value %d outside legal range of 0 - %d minutes",
|
||||||
|
i, MAX_TIME_IN_MIN);
|
||||||
|
|
||||||
#ifdef DPMSExtension
|
#ifdef DPMSExtension
|
||||||
i = -1;
|
i = -1;
|
||||||
xf86GetOptValInteger(FlagOptions, FLAG_DPMS_STANDBYTIME, &i);
|
xf86GetOptValInteger(FlagOptions, FLAG_DPMS_STANDBYTIME, &i);
|
||||||
if (i >= 0)
|
if ((i >= 0) && (i < MAX_TIME_IN_MIN))
|
||||||
DPMSStandbyTime = defaultDPMSStandbyTime = i * MILLI_PER_MIN;
|
DPMSStandbyTime = defaultDPMSStandbyTime = i * MILLI_PER_MIN;
|
||||||
|
else if (i != -1)
|
||||||
|
xf86ConfigError("StandbyTime value %d outside legal range of 0 - %d minutes",
|
||||||
|
i, MAX_TIME_IN_MIN);
|
||||||
i = -1;
|
i = -1;
|
||||||
xf86GetOptValInteger(FlagOptions, FLAG_DPMS_SUSPENDTIME, &i);
|
xf86GetOptValInteger(FlagOptions, FLAG_DPMS_SUSPENDTIME, &i);
|
||||||
if (i >= 0)
|
if ((i >= 0) && (i < MAX_TIME_IN_MIN))
|
||||||
DPMSSuspendTime = defaultDPMSSuspendTime = i * MILLI_PER_MIN;
|
DPMSSuspendTime = defaultDPMSSuspendTime = i * MILLI_PER_MIN;
|
||||||
|
else if (i != -1)
|
||||||
|
xf86ConfigError("SuspendTime value %d outside legal range of 0 - %d minutes",
|
||||||
|
i, MAX_TIME_IN_MIN);
|
||||||
i = -1;
|
i = -1;
|
||||||
xf86GetOptValInteger(FlagOptions, FLAG_DPMS_OFFTIME, &i);
|
xf86GetOptValInteger(FlagOptions, FLAG_DPMS_OFFTIME, &i);
|
||||||
if (i >= 0)
|
if ((i >= 0) && (i < MAX_TIME_IN_MIN))
|
||||||
DPMSOffTime = defaultDPMSOffTime = i * MILLI_PER_MIN;
|
DPMSOffTime = defaultDPMSOffTime = i * MILLI_PER_MIN;
|
||||||
|
else if (i != -1)
|
||||||
|
xf86ConfigError("OffTime value %d outside legal range of 0 - %d minutes",
|
||||||
|
i, MAX_TIME_IN_MIN);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
i = -1;
|
i = -1;
|
||||||
|
|
Loading…
Reference in New Issue