aboutsummaryrefslogtreecommitdiff
path: root/src/timezone/strftime.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/timezone/strftime.c')
-rw-r--r--src/timezone/strftime.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/timezone/strftime.c b/src/timezone/strftime.c
index 4b942c393a3..dd6c7db8695 100644
--- a/src/timezone/strftime.c
+++ b/src/timezone/strftime.c
@@ -128,12 +128,22 @@ size_t
pg_strftime(char *s, size_t maxsize, const char *format, const struct pg_tm *t)
{
char *p;
+ int saved_errno = errno;
enum warn warn = IN_NONE;
p = _fmt(format, t, s, s + maxsize, &warn);
+ if (!p)
+ {
+ errno = EOVERFLOW;
+ return 0;
+ }
if (p == s + maxsize)
+ {
+ errno = ERANGE;
return 0;
+ }
*p = '\0';
+ errno = saved_errno;
return p - s;
}