ar71xx: add sanity checks to decode_rle
Also use -EINVAL instead of -1. SVN-Revision: 31353
This commit is contained in:
parent
8f921175ba
commit
5c9ca38e47
@ -299,24 +299,29 @@ static int decode_rle(char *output, int len, char *in)
|
|||||||
{
|
{
|
||||||
char *ptr = output;
|
char *ptr = output;
|
||||||
char *end = output + len;
|
char *end = output + len;
|
||||||
|
|
||||||
|
if (!output || !in)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
while (*in) {
|
while (*in) {
|
||||||
if (*in < 0) {
|
if (*in < 0) {
|
||||||
int i = -*in++;
|
int i = -*in++;
|
||||||
while (i-- > 0) {
|
while (i-- > 0) {
|
||||||
if (ptr >= end)
|
if (ptr >= end)
|
||||||
return -1;
|
return -EINVAL;
|
||||||
*ptr++ = *in++;
|
*ptr++ = *in++;
|
||||||
}
|
}
|
||||||
} else if (*in > 0) {
|
} else if (*in > 0) {
|
||||||
int i = *in++;
|
int i = *in++;
|
||||||
while (i-- > 0) {
|
while (i-- > 0) {
|
||||||
if (ptr >= end)
|
if (ptr >= end)
|
||||||
return -1;
|
return -EINVAL;
|
||||||
*ptr++ = *in;
|
*ptr++ = *in;
|
||||||
}
|
}
|
||||||
in++;
|
in++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ptr - output;
|
return ptr - output;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user