From 0d8562a9992e94d532485c37268ca33c0c49ecc2 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Tue, 19 Feb 2019 21:34:05 +0100 Subject: patch 8.1.0954: arguments of semsg() and siemsg() are not checked Problem: Arguments of semsg() and siemsg() are not checked. Solution: Add function prototype with __attribute__. --- src/message.c | 8 ++++++-- src/proto.h | 22 ++++++++++++++++++++++ src/proto/message.pro | 2 -- src/version.c | 2 ++ 4 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/message.c b/src/message.c index 621edb9701..a7aca2b99c 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 43192ffd52..4a5977f606 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 792ac5ddfc..806de872bc 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 a266ce08f4..6fe4c9e35d 100644 --- a/src/version.c +++ b/src/version.c @@ -779,6 +779,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 954, /**/ 953, /**/ -- cgit v1.2.3