Add validation of size limit and aspect ratio args

This commit is contained in:
Camilla Berglund 2016-05-04 16:28:08 +02:00
parent e640d840b7
commit 12a695696d
2 changed files with 18 additions and 8 deletions

View File

@ -2056,6 +2056,9 @@ GLFWAPI void glfwGetWindowSize(GLFWwindow* window, int* width, int* height);
* The size limits are applied immediately to a windowed mode window and may * The size limits are applied immediately to a windowed mode window and may
* cause it to be resized. * cause it to be resized.
* *
* The maximum dimensions must be greater than or equal to the minimum
* dimensions and all must be greater than or equal to zero.
*
* @param[in] window The window to set limits for. * @param[in] window The window to set limits for.
* @param[in] minwidth The minimum width, in screen coordinates, of the client * @param[in] minwidth The minimum width, in screen coordinates, of the client
* area, or `GLFW_DONT_CARE`. * area, or `GLFW_DONT_CARE`.
@ -2066,8 +2069,8 @@ GLFWAPI void glfwGetWindowSize(GLFWwindow* window, int* width, int* height);
* @param[in] maxheight The maximum height, in screen coordinates, of the * @param[in] maxheight The maximum height, in screen coordinates, of the
* client area, or `GLFW_DONT_CARE`. * client area, or `GLFW_DONT_CARE`.
* *
* @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
* GLFW_PLATFORM_ERROR. * GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR.
* *
* @remark If you set size limits and an aspect ratio that conflict, the * @remark If you set size limits and an aspect ratio that conflict, the
* results are undefined. * results are undefined.

View File

@ -521,6 +521,13 @@ GLFWAPI void glfwSetWindowSizeLimits(GLFWwindow* handle,
_GLFW_REQUIRE_INIT(); _GLFW_REQUIRE_INIT();
if (minwidth < 0 || minheight < 0 ||
maxwidth < minwidth || maxheight < minheight)
{
_glfwInputError(GLFW_INVALID_VALUE, "Invalid window size limits");
return;
}
window->minwidth = minwidth; window->minwidth = minwidth;
window->minheight = minheight; window->minheight = minheight;
window->maxwidth = maxwidth; window->maxwidth = maxwidth;
@ -541,18 +548,18 @@ GLFWAPI void glfwSetWindowAspectRatio(GLFWwindow* handle, int numer, int denom)
_GLFW_REQUIRE_INIT(); _GLFW_REQUIRE_INIT();
if (numer <= 0 || denom <= 0)
{
_glfwInputError(GLFW_INVALID_VALUE, "Invalid window aspect ratio");
return;
}
window->numer = numer; window->numer = numer;
window->denom = denom; window->denom = denom;
if (window->monitor || !window->resizable) if (window->monitor || !window->resizable)
return; return;
if (!denom)
{
_glfwInputError(GLFW_INVALID_VALUE, "Denominator cannot be zero");
return;
}
_glfwPlatformSetWindowAspectRatio(window, numer, denom); _glfwPlatformSetWindowAspectRatio(window, numer, denom);
} }