diff options
author | Gabor Juhos <juhosg@openwrt.org> | 2012-04-19 21:31:40 +0000 |
---|---|---|
committer | Gabor Juhos <juhosg@openwrt.org> | 2012-04-19 21:31:40 +0000 |
commit | 7ad3da40d63c0cfc71e816ded90835fd4b26ba3b (patch) | |
tree | 9387be7fb6c9e282e1c7ea22bddf963bd95a7ac5 /target/linux/ar71xx/files | |
parent | 4af9045195b49a15c322deef33033c15085e9450 (diff) | |
download | upstream-7ad3da40d63c0cfc71e816ded90835fd4b26ba3b.tar.gz upstream-7ad3da40d63c0cfc71e816ded90835fd4b26ba3b.tar.bz2 upstream-7ad3da40d63c0cfc71e816ded90835fd4b26ba3b.zip |
ar71xx: add sanity checks to decode_rle
Also use -EINVAL instead of -1.
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@31353 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/ar71xx/files')
-rw-r--r-- | target/linux/ar71xx/files/arch/mips/ath79/mach-rb750.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-rb750.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-rb750.c index 3e4a5527f8..30d8eac796 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/mach-rb750.c +++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-rb750.c @@ -299,24 +299,29 @@ static int decode_rle(char *output, int len, char *in) { char *ptr = output; char *end = output + len; + + if (!output || !in) + return -EINVAL; + while (*in) { if (*in < 0) { int i = -*in++; while (i-- > 0) { if (ptr >= end) - return -1; + return -EINVAL; *ptr++ = *in++; } } else if (*in > 0) { int i = *in++; while (i-- > 0) { if (ptr >= end) - return -1; + return -EINVAL; *ptr++ = *in; } in++; } } + return ptr - output; } |