screensaver & DPMS timeouts don't overflow when multiplied by
    MILLI_PER_MIN. (Reported by Zachary J. Slater)
This commit is contained in:
Alan Coopersmith 2005-10-09 23:47:52 +00:00
parent 29b5f846d2
commit d82aeb55ca

View File

@ -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;