diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2010-06-14 23:39:03 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2010-06-14 23:39:03 (GMT) |
commit | 1e2aada1204d3da43fe075478df5bfaaece937b0 (patch) | |
tree | 99eb321808ddcc0364928adf9266f32a201d2b59 /src/common | |
parent | af7d2ea327d27200ad151d3e1ba0ee6d51b1ff62 (diff) |
Made the program stronger by handling more errors.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@167 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/common')
-rwxr-xr-x | src/common/endianness.c | 4 | ||||
-rw-r--r-- | src/common/leb128.c | 4 |
2 files changed, 8 insertions, 0 deletions
diff --git a/src/common/endianness.c b/src/common/endianness.c index 5c9b183..3a2a653 100755 --- a/src/common/endianness.c +++ b/src/common/endianness.c @@ -44,6 +44,7 @@ bool read_u4(uint8_t *target, const bin_t *data, off_t *pos, off_t len, bool *low, SourceEndian endian) { + if (*pos < 0) return false; if ((len - *pos) < 1) return false; if (*low) @@ -81,6 +82,7 @@ bool read_u4(uint8_t *target, const bin_t *data, off_t *pos, off_t len, bool *lo bool read_u8(uint8_t *target, const bin_t *data, off_t *pos, off_t len, SourceEndian endian) { + if (*pos < 0) return false; if ((len - *pos) < 1) return false; *target = data[*pos]; @@ -110,6 +112,7 @@ bool read_u8(uint8_t *target, const bin_t *data, off_t *pos, off_t len, SourceEn bool read_u16(uint16_t *target, const bin_t *data, off_t *pos, off_t len, SourceEndian endian) { + if (*pos < 0) return false; if ((len - *pos) < 2) return false; switch (endian) @@ -181,6 +184,7 @@ bool read_u16(uint16_t *target, const bin_t *data, off_t *pos, off_t len, Source bool read_u32(uint32_t *target, const bin_t *data, off_t *pos, off_t len, SourceEndian endian) { + if (*pos < 0) return false; if ((len - *pos) < 4) return false; switch (endian) diff --git a/src/common/leb128.c b/src/common/leb128.c index 4a03797..1b65fa7 100644 --- a/src/common/leb128.c +++ b/src/common/leb128.c @@ -45,6 +45,8 @@ bool read_uleb128(uleb128_t *target, const bin_t *data, off_t *pos, off_t len) int shift; /* Décallage à appliquer */ off_t i; /* Boucle de parcours */ + if (*pos < 0) return false; + shift = 0; *target = 0; @@ -87,6 +89,8 @@ bool read_leb128(leb128_t *target, const bin_t *data, off_t *pos, off_t len) int shift; /* Décallage à appliquer */ off_t i; /* Boucle de parcours */ + if (*pos < 0) return false; + shift = 0; *target = 0; |