summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-02-19 21:34:05 +0100
committerBram Moolenaar <Bram@vim.org>2019-02-19 21:34:05 +0100
commit0d8562a9992e94d532485c37268ca33c0c49ecc2 (patch)
treea91ad1f6f9aef842d1a9cfaa2c8e604de9dce3ce
parentc9629251a634d4f5988c8162ba8249026d1af687 (diff)
downloadvim-git-0d8562a9992e94d532485c37268ca33c0c49ecc2.tar.gz
patch 8.1.0954: arguments of semsg() and siemsg() are not checkedv8.1.0954
Problem: Arguments of semsg() and siemsg() are not checked. Solution: Add function prototype with __attribute__.
-rw-r--r--src/message.c8
-rw-r--r--src/proto.h22
-rw-r--r--src/proto/message.pro2
-rw-r--r--src/version.c2
4 files changed, 30 insertions, 4 deletions
diff --git a/src/message.c b/src/message.c
index 621edb970..a7aca2b99 100644
--- a/src/message.c
+++ b/src/message.c
@@ -730,6 +730,7 @@ emsg(char *s)
return TRUE; /* no error messages at the moment */
}
+#ifndef PROTO // manual proto with __attribute__
/*
* Print an error message with format string and variable arguments.
* Note: caller must not pass 'IObuff' as 1st argument.
@@ -749,6 +750,7 @@ semsg(const char *s, ...)
}
return TRUE; /* no error messages at the moment */
}
+#endif
/*
* Same as emsg(...), but abort on error when ABORT_ON_INTERNAL_ERROR is
@@ -765,6 +767,7 @@ iemsg(char *s)
#endif
}
+#ifndef PROTO // manual proto with __attribute__
/*
* Same as semsg(...) but abort on error when ABORT_ON_INTERNAL_ERROR is
* defined. It is used for internal errors only, so that they can be
@@ -783,10 +786,11 @@ siemsg(const char *s, ...)
va_end(ap);
emsg_core(IObuff);
}
-#ifdef ABORT_ON_INTERNAL_ERROR
+# ifdef ABORT_ON_INTERNAL_ERROR
abort();
-#endif
+# endif
}
+#endif
/*
* Give an "Internal error" message.
diff --git a/src/proto.h b/src/proto.h
index 43192ffd5..4a5977f60 100644
--- a/src/proto.h
+++ b/src/proto.h
@@ -134,6 +134,28 @@ smsg_attr_keep(int, const char *, ...)
#endif
;
+/* These prototypes cannot be produced automatically. */
+int
+# ifdef __BORLANDC__
+_RTLENTRYF
+# endif
+semsg(const char *, ...)
+#ifdef USE_PRINTF_FORMAT_ATTRIBUTE
+ __attribute__((format(printf, 1, 0)))
+#endif
+ ;
+
+/* These prototypes cannot be produced automatically. */
+void
+# ifdef __BORLANDC__
+_RTLENTRYF
+# endif
+siemsg(const char *, ...)
+#ifdef USE_PRINTF_FORMAT_ATTRIBUTE
+ __attribute__((format(printf, 1, 0)))
+#endif
+ ;
+
int
# ifdef __BORLANDC__
_RTLENTRYF
diff --git a/src/proto/message.pro b/src/proto/message.pro
index 792ac5ddf..806de872b 100644
--- a/src/proto/message.pro
+++ b/src/proto/message.pro
@@ -11,9 +11,7 @@ int emsg_not_now(void);
void ignore_error_for_testing(char_u *error);
void do_perror(char *msg);
int emsg(char *s);
-int semsg(const char *s, ...);
void iemsg(char *s);
-void siemsg(const char *s, ...);
void internal_error(char *where);
void emsg_invreg(int name);
char *msg_trunc_attr(char *s, int force, int attr);
diff --git a/src/version.c b/src/version.c
index a266ce08f..6fe4c9e35 100644
--- a/src/version.c
+++ b/src/version.c
@@ -780,6 +780,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 954,
+/**/
953,
/**/
952,