summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Koegel <eric.koegel@gmail.com>2014-09-16 20:27:52 +0300
committerEric Koegel <eric.koegel@gmail.com>2014-09-22 09:18:43 +0300
commita3a4725ef4d63034981b0915194930bfb8d274f1 (patch)
tree053f6e136e2171622a587ab9be02f1205fb38e02
parenta35307fac4c16c4c5d1640e10bbe9769a0bfd262 (diff)
downloadxfce4-session-a3a4725ef4d63034981b0915194930bfb8d274f1.tar.gz
atoi (argv[2]) is unsafe
Passing argv command line arguments directly into atoi is unsafe. Use strtol and check/sanatize what it returns.
-rw-r--r--engines/mice/generate.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/engines/mice/generate.c b/engines/mice/generate.c
index c2870fa6..9645290c 100644
--- a/engines/mice/generate.c
+++ b/engines/mice/generate.c
@@ -28,6 +28,9 @@
#include <stdlib.h>
#endif
+#include <limits.h>
+#include <errno.h>
+
#include <gtk/gtk.h>
@@ -77,6 +80,7 @@ int main (int argc, char **argv)
{
GdkPixbuf *base;
GdkPixbuf *result;
+ glong val;
gtk_init (&argc, &argv);
@@ -93,7 +97,23 @@ int main (int argc, char **argv)
return EXIT_FAILURE;
}
- result = create_slide (base, atoi (argv[2]));
+ val = strtol (argv[2], NULL, 10);
+
+ /* Error checking for untrusted input */
+ if ((errno == ERANGE && (val == LONG_MAX || val == LONG_MIN)) || (errno != 0 && val == 0))
+ {
+ perror("strtol");
+ exit(EXIT_FAILURE);
+ }
+
+ /* Sanity checks */
+ if (val > INT_MAX)
+ val = INT_MAX;
+
+ if (val < 0)
+ val = 0;
+
+ result = create_slide (base, val);
gdk_pixbuf_save (result, "slide.png", "png", NULL, NULL);