X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=gedcom%2Fmessage.c;h=5f0bdc38ab9dbfde2263e095bb0675865c9d9093;hb=a6b1646d8fc8234b198d47c045a5a756a916d052;hp=213e0493126ec81184adcc895093ef209a2b6583;hpb=06992b01593e3a002319a2fb43ac16e6b73577ae;p=gedcom-parse.git diff --git a/gedcom/message.c b/gedcom/message.c index 213e049..5f0bdc3 100644 --- a/gedcom/message.c +++ b/gedcom/message.c @@ -24,7 +24,13 @@ #include "gedcom_internal.h" #include "gedcom.h" +#if HAVE_VSNPRINTF #define INITIAL_BUF_SIZE 256 +#else +/* Risk on overflowing buffer, so make size big */ +#define INITIAL_BUF_SIZE 65536 +#endif + char *mess_buffer = NULL; size_t bufsize; @@ -76,6 +82,7 @@ int safe_buf_vappend(const char *s, va_list ap) char *buf_ptr = mess_buffer + len; int rest_size = bufsize - len; +#if HAVE_VSNPRINTF res = vsnprintf(buf_ptr, rest_size, s, ap); if (res > -1 && res < rest_size) { @@ -85,6 +92,15 @@ int safe_buf_vappend(const char *s, va_list ap) bufsize *= 2; mess_buffer = realloc(mess_buffer, bufsize); } +#else /* not HAVE_VSNPRINTF */ +# if HAVE_VSPRINTF +# warning "Using VSPRINTF. Buffer overflow could happen!" + vsprintf(buf_ptr, s, ap); + break; +# else /* not HAVE_VPRINTF */ +# error "Your standard library has neither vsnprintf nor vsprintf defined. One of them is required!" +# endif +#endif } } return res;