aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorPaul Eggert2017-04-27 15:21:34 -0700
committerPaul Eggert2017-04-27 15:24:07 -0700
commitabd769131dae3f9693faff9a080267e86936ce99 (patch)
tree316cc01ca8f7e8917bf28ff50c5719f8dff02c2c /lib
parent2a23577795f8b644a215fae68e990c07f0146d33 (diff)
downloademacs-abd769131dae3f9693faff9a080267e86936ce99.tar.gz
emacs-abd769131dae3f9693faff9a080267e86936ce99.zip
Merge from gnulib
This incorporates: 2017-04-24 time_rz: fix heap buffer overflow vulnerability 2017-04-23 stat-time: Update comments. 2017-04-22 ftoastr: cite a newer paper 2017-04-21 gettext-h: Avoid -Wundef warning. * lib/ftoastr.c, lib/gettext.h, lib/stat-time.h, lib/time_rz.c: * m4/getopt.m4: Copy from gnulib. * m4/gnulib-comp.m4: Regenerate.
Diffstat (limited to 'lib')
-rw-r--r--lib/ftoastr.c8
-rw-r--r--lib/gettext.h5
-rw-r--r--lib/stat-time.h2
-rw-r--r--lib/time_rz.c15
4 files changed, 21 insertions, 9 deletions
diff --git a/lib/ftoastr.c b/lib/ftoastr.c
index ef861e2237a..f2434161db8 100644
--- a/lib/ftoastr.c
+++ b/lib/ftoastr.c
@@ -105,10 +105,10 @@ FTOASTR (char *buf, size_t bufsize, int flags, int width, FLOAT x)
105 /* The following method is simple but slow. 105 /* The following method is simple but slow.
106 For ideas about speeding things up, please see: 106 For ideas about speeding things up, please see:
107 107
108 Florian Loitsch, Printing floating-point numbers quickly and accurately 108 Andrysco M, Jhala R, Lerner S. Printing floating-point numbers:
109 with integers. ACM SIGPLAN notices 46, 6 (June 2010), 233-243 109 a faster, always correct method. ACM SIGPLAN notices - POPL '16.
110 <http://dx.doi.org/10.1145/1809028.1806623>; also see the 110 2016;51(1):555-67 <http://dx.doi.org/10.1145/2914770.2837654>; draft at
111 2010-03-21 draft <http://florian.loitsch.com/tmp/article.pdf>. */ 111 <http://cseweb.ucsd.edu/~lerner/papers/fp-printing-popl16.pdf>. */
112 112
113 PROMOTED_FLOAT promoted_x = x; 113 PROMOTED_FLOAT promoted_x = x;
114 char format[sizeof "%-+ 0*.*Lg"]; 114 char format[sizeof "%-+ 0*.*Lg"];
diff --git a/lib/gettext.h b/lib/gettext.h
index 0465d7ad148..e7520af252f 100644
--- a/lib/gettext.h
+++ b/lib/gettext.h
@@ -18,8 +18,9 @@
18#ifndef _LIBGETTEXT_H 18#ifndef _LIBGETTEXT_H
19#define _LIBGETTEXT_H 1 19#define _LIBGETTEXT_H 1
20 20
21/* NLS can be disabled through the configure --disable-nls option. */ 21/* NLS can be disabled through the configure --disable-nls option
22#if ENABLE_NLS 22 or through "#define ENABLE NLS 0" before including this file. */
23#if defined ENABLE_NLS && ENABLE_NLS
23 24
24/* Get declarations of GNU message catalog functions. */ 25/* Get declarations of GNU message catalog functions. */
25# include <libintl.h> 26# include <libintl.h>
diff --git a/lib/stat-time.h b/lib/stat-time.h
index 47469892ee2..154d62a01f5 100644
--- a/lib/stat-time.h
+++ b/lib/stat-time.h
@@ -169,7 +169,7 @@ get_stat_birthtime (struct stat const *st)
169#elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ 169#elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
170 /* Native Windows platforms (but not Cygwin) put the "file creation 170 /* Native Windows platforms (but not Cygwin) put the "file creation
171 time" in st_ctime (!). See 171 time" in st_ctime (!). See
172 <http://msdn2.microsoft.com/de-de/library/14h5k7ff(VS.80).aspx>. */ 172 <https://msdn.microsoft.com/en-us/library/14h5k7ff(VS.80).aspx>. */
173 t.tv_sec = st->st_ctime; 173 t.tv_sec = st->st_ctime;
174 t.tv_nsec = 0; 174 t.tv_nsec = 0;
175#else 175#else
diff --git a/lib/time_rz.c b/lib/time_rz.c
index adb9c1c2361..c41a8ef47ac 100644
--- a/lib/time_rz.c
+++ b/lib/time_rz.c
@@ -27,6 +27,7 @@
27#include <time.h> 27#include <time.h>
28 28
29#include <errno.h> 29#include <errno.h>
30#include <limits.h>
30#include <stdbool.h> 31#include <stdbool.h>
31#include <stddef.h> 32#include <stddef.h>
32#include <stdlib.h> 33#include <stdlib.h>
@@ -35,6 +36,10 @@
35#include "flexmember.h" 36#include "flexmember.h"
36#include "time-internal.h" 37#include "time-internal.h"
37 38
39#ifndef SIZE_MAX
40# define SIZE_MAX ((size_t) -1)
41#endif
42
38#if !HAVE_TZSET 43#if !HAVE_TZSET
39static void tzset (void) { } 44static void tzset (void) { }
40#endif 45#endif
@@ -43,7 +48,7 @@ static void tzset (void) { }
43 the largest "small" request for the GNU C library malloc. */ 48 the largest "small" request for the GNU C library malloc. */
44enum { DEFAULT_MXFAST = 64 * sizeof (size_t) / 4 }; 49enum { DEFAULT_MXFAST = 64 * sizeof (size_t) / 4 };
45 50
46/* Minimum size of the ABBRS member of struct abbr. ABBRS is larger 51/* Minimum size of the ABBRS member of struct tm_zone. ABBRS is larger
47 only in the unlikely case where an abbreviation longer than this is 52 only in the unlikely case where an abbreviation longer than this is
48 used. */ 53 used. */
49enum { ABBR_SIZE_MIN = DEFAULT_MXFAST - offsetof (struct tm_zone, abbrs) }; 54enum { ABBR_SIZE_MIN = DEFAULT_MXFAST - offsetof (struct tm_zone, abbrs) };
@@ -150,7 +155,13 @@ save_abbr (timezone_t tz, struct tm *tm)
150 if (! (*zone_copy || (zone_copy == tz->abbrs && tz->tz_is_set))) 155 if (! (*zone_copy || (zone_copy == tz->abbrs && tz->tz_is_set)))
151 { 156 {
152 size_t zone_size = strlen (zone) + 1; 157 size_t zone_size = strlen (zone) + 1;
153 if (zone_size < tz->abbrs + ABBR_SIZE_MIN - zone_copy) 158 size_t zone_used = zone_copy - tz->abbrs;
159 if (SIZE_MAX - zone_used < zone_size)
160 {
161 errno = ENOMEM;
162 return false;
163 }
164 if (zone_used + zone_size < ABBR_SIZE_MIN)
154 extend_abbrs (zone_copy, zone, zone_size); 165 extend_abbrs (zone_copy, zone, zone_size);
155 else 166 else
156 { 167 {