mirror of
https://github.com/moparisthebest/curl
synced 2024-11-15 14:05:03 -05:00
mprintf: return error on too many arguments
128 arguments should be enough for everyone
This commit is contained in:
parent
8238ba9c5f
commit
71588c9aef
@ -227,10 +227,12 @@ static bool dprintf_IsQualifierNoDollar(const char *fmt)
|
|||||||
* Create an index with the type of each parameter entry and its
|
* Create an index with the type of each parameter entry and its
|
||||||
* value (may vary in size)
|
* value (may vary in size)
|
||||||
*
|
*
|
||||||
|
* Returns zero on success.
|
||||||
|
*
|
||||||
******************************************************************/
|
******************************************************************/
|
||||||
|
|
||||||
static long dprintf_Pass1(const char *format, va_stack_t *vto, char **endpos,
|
static int dprintf_Pass1(const char *format, va_stack_t *vto, char **endpos,
|
||||||
va_list arglist)
|
va_list arglist)
|
||||||
{
|
{
|
||||||
char *fmt = (char *)format;
|
char *fmt = (char *)format;
|
||||||
int param_num = 0;
|
int param_num = 0;
|
||||||
@ -393,6 +395,10 @@ static long dprintf_Pass1(const char *format, va_stack_t *vto, char **endpos,
|
|||||||
|
|
||||||
i = this_param - 1;
|
i = this_param - 1;
|
||||||
|
|
||||||
|
if((i < 0) || (i >= MAX_PARAMETERS))
|
||||||
|
/* out of allowed range */
|
||||||
|
return 1;
|
||||||
|
|
||||||
switch (*fmt) {
|
switch (*fmt) {
|
||||||
case 'S':
|
case 'S':
|
||||||
flags |= FLAGS_ALT;
|
flags |= FLAGS_ALT;
|
||||||
@ -549,7 +555,7 @@ static long dprintf_Pass1(const char *format, va_stack_t *vto, char **endpos,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return max_param;
|
return 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -587,7 +593,8 @@ static int dprintf_formatf(
|
|||||||
char *workend = &work[sizeof(work) - 2];
|
char *workend = &work[sizeof(work) - 2];
|
||||||
|
|
||||||
/* Do the actual %-code parsing */
|
/* Do the actual %-code parsing */
|
||||||
dprintf_Pass1(format, vto, endpos, ap_save);
|
if(dprintf_Pass1(format, vto, endpos, ap_save))
|
||||||
|
return -1;
|
||||||
|
|
||||||
end = &endpos[0]; /* the initial end-position from the list dprintf_Pass1()
|
end = &endpos[0]; /* the initial end-position from the list dprintf_Pass1()
|
||||||
created for us */
|
created for us */
|
||||||
@ -992,7 +999,7 @@ int curl_mvsnprintf(char *buffer, size_t maxlength, const char *format,
|
|||||||
info.max = maxlength;
|
info.max = maxlength;
|
||||||
|
|
||||||
retcode = dprintf_formatf(&info, addbyter, format, ap_save);
|
retcode = dprintf_formatf(&info, addbyter, format, ap_save);
|
||||||
if(info.max) {
|
if((retcode != -1) && info.max) {
|
||||||
/* we terminate this with a zero byte */
|
/* we terminate this with a zero byte */
|
||||||
if(info.max == info.length)
|
if(info.max == info.length)
|
||||||
/* we're at maximum, scrap the last letter */
|
/* we're at maximum, scrap the last letter */
|
||||||
|
Loading…
Reference in New Issue
Block a user