]> granicus.if.org Git - flex/commitdiff
cast and fix usage of log10(), ceil to prevent buffer overflow
authorrlar <rlar>
Tue, 1 Mar 2016 16:59:09 +0000 (17:59 +0100)
committerWill Estes <westes575@gmail.com>
Tue, 8 Mar 2016 20:20:45 +0000 (15:20 -0500)
src/buf.c
src/main.c

index c03b85f9dd2d6a578b200198c2295871cb4a8507..185cbd31298c9e0bb4f565aaa26ad4932b14fcc6 100644 (file)
--- a/src/buf.c
+++ b/src/buf.c
@@ -100,7 +100,7 @@ struct Buf *buf_linedir (struct Buf *buf, const char* filename, int lineno)
 
     tsz = strlen("#line \"\"\n")                +   /* constant parts */
                2 * strlen (filename)            +   /* filename with possibly all backslashes escaped */
-               (int) (1 + log10 (abs (lineno))) +   /* line number */
+               (size_t) (1 + ceil (log10 (abs (lineno)))) +   /* line number */
                1;                                   /* NUL */
     t = malloc(tsz);
     if (!t)
index e329e4e3d7e94250e5ddc4a92ebdb7419edc54d9..4e5254a5f42ca7b6bda7a5d3575e5e06f955df75 100644 (file)
@@ -474,7 +474,7 @@ void check_options (void)
              char *str, *fmt = "#define %s %d\n";
              size_t strsz;
 
-             strsz = strlen(fmt) + strlen(scname[i]) + (int)(1 + log10(i)) + 2;
+             strsz = strlen(fmt) + strlen(scname[i]) + (size_t)(1 + ceil (log10(i))) + 2;
              str = malloc(strsz);
              if (!str)
                flexfatal(_("allocation of macro definition failed"));