mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2024-10-05 22:29:49 +00:00
lwip_itoa: check 'bufsize' instead of ignoring it; ensure code is not stolen from GPL
This commit is contained in:
parent
3770adccfd
commit
131d656c23
@ -197,26 +197,47 @@ lwip_strnicmp(const char* str1, const char* str2, size_t len)
|
|||||||
void
|
void
|
||||||
lwip_itoa(char* result, size_t bufsize, int number)
|
lwip_itoa(char* result, size_t bufsize, int number)
|
||||||
{
|
{
|
||||||
const int base = 10;
|
char *res = result;
|
||||||
char* ptr = result, *ptr1 = result, tmp_char;
|
char *tmp = result;
|
||||||
int tmp_value;
|
size_t res_left = bufsize;
|
||||||
LWIP_UNUSED_ARG(bufsize);
|
size_t result_len;
|
||||||
|
int n = (number > 0) ? number : -number;
|
||||||
|
|
||||||
do {
|
/* handle invalid bufsize */
|
||||||
tmp_value = number;
|
if (bufsize < 2) {
|
||||||
number /= base;
|
if (bufsize == 1) {
|
||||||
*ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz"[35 + (tmp_value - number * base)];
|
*result = 0;
|
||||||
} while(number);
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* Apply negative sign */
|
/* ensure output string is zero terminated */
|
||||||
if (tmp_value < 0) {
|
result[bufsize-1] = 0;
|
||||||
*ptr++ = '-';
|
result_len = 1;
|
||||||
|
/* create the string in a temporary buffer since we don't know how long
|
||||||
|
it will get */
|
||||||
|
tmp = &result[bufsize-2];
|
||||||
|
while ((n != 0) && (result_len < (result_len - 1))) {
|
||||||
|
char val = '0' + (n % 10);
|
||||||
|
*tmp = val;
|
||||||
|
tmp--;
|
||||||
|
n = n / 10;
|
||||||
|
result_len++;
|
||||||
}
|
}
|
||||||
*ptr-- = '\0';
|
|
||||||
while(ptr1 < ptr) {
|
/* output sign first */
|
||||||
tmp_char = *ptr;
|
if (number < 0) {
|
||||||
*ptr--= *ptr1;
|
*res = '-';
|
||||||
*ptr1++ = tmp_char;
|
res++;
|
||||||
|
res_left--;
|
||||||
}
|
}
|
||||||
|
if (result_len > res_left) {
|
||||||
|
/* buffer is too small */
|
||||||
|
result[0] = '.';
|
||||||
|
result[1] = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
/* copy from temporary buffer to output buffer */
|
||||||
|
memmove(res, tmp+1, result_len);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user