Skip to content

Commit

Permalink
Return EOUTOFDATA if out of data decoding.
Browse files Browse the repository at this point in the history
  • Loading branch information
eerimoq committed Dec 17, 2018
1 parent af34f06 commit 990d4b5
Show file tree
Hide file tree
Showing 3 changed files with 90 additions and 11 deletions.
13 changes: 7 additions & 6 deletions tests/files/c_source/c_source/oer.c
Expand Up @@ -175,9 +175,9 @@ static size_t decoder_free(struct decoder_t *self_p,
pos = self_p->pos;
self_p->pos += size;
} else {
pos = -ENOMEM;
self_p->pos = -ENOMEM;
self_p->size = -ENOMEM;
pos = -EOUTOFDATA;
self_p->pos = -EOUTOFDATA;
self_p->size = -EOUTOFDATA;
}

return (pos);
Expand All @@ -191,11 +191,12 @@ static void decoder_read_bytes(struct decoder_t *self_p,

pos = decoder_free(self_p, size);

if (pos < 0) {
return;
if (pos >= 0) {
memcpy(buf_p, &self_p->buf_p[pos], size);
} else {
memset(buf_p, 0, size);
}

memcpy(buf_p, &self_p->buf_p[pos], size);
}

static uint8_t decoder_read_integer_8(struct decoder_t *self_p)
Expand Down
10 changes: 7 additions & 3 deletions tests/files/c_source/c_source/oer.h
Expand Up @@ -35,12 +35,16 @@
#include <stdbool.h>
#include <unistd.h>

#ifndef ENOMEM
# define ENOMEM 12
#endif

#ifndef EINVAL
# define EINVAL -22
# define EINVAL 22
#endif

#ifndef ENOMEM
# define ENOMEM -12
#ifndef EOUTOFDATA
# define EOUTOFDATA 500
#endif

struct oer_c_source_a_t {
Expand Down
78 changes: 76 additions & 2 deletions tests/main.c
Expand Up @@ -11,7 +11,7 @@ static bool fequal(double v1, double v2)
return (fabs(v1 - v2) < 0.000001);
}

static void test_c_source_a_oer(void)
static void test_oer_c_source_a(void)
{
uint8_t encoded[55];
struct oer_c_source_a_t decoded;
Expand Down Expand Up @@ -47,6 +47,38 @@ static void test_c_source_a_oer(void)
assert(oer_c_source_a_decode(&decoded,
&encoded[0],
sizeof(encoded)) == sizeof(encoded));

assert(decoded.a == -1);
assert(decoded.b == -2);
assert(decoded.c == -3);
assert(decoded.d == -4);
assert(decoded.e == 1);
assert(decoded.f == 2);
assert(decoded.g == 3);
assert(decoded.h == 4);
assert(fequal(decoded.i, 1.0f));
assert(fequal(decoded.j, 1.0));
assert(decoded.k);
assert(memcmp(&decoded.l[0],
"\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05",
sizeof(decoded.l)) == 0);
}

static void test_oer_c_source_a_decode_spare_data(void)
{
uint8_t encoded[56] =
"\xff\xff\xfe\xff\xff\xff\xfd\xff\xff\xff\xff\xff\xff"
"\xff\xfc\x01\x00\x02\x00\x00\x00\x03\x00\x00\x00\x00"
"\x00\x00\x00\x04\x3f\x80\x00\x00\x3f\xf0\x00\x00\x00"
"\x00\x00\x00\xff\x0b\x05\x05\x05\x05\x05\x05\x05\x05"
"\x05\x05\x05\x00";
struct oer_c_source_a_t decoded;

memset(&decoded, 0, sizeof(decoded));
assert(oer_c_source_a_decode(&decoded,
&encoded[0],
sizeof(encoded)) == 55);

assert(decoded.a == -1);
assert(decoded.b == -2);
assert(decoded.c == -3);
Expand All @@ -63,9 +95,51 @@ static void test_c_source_a_oer(void)
sizeof(decoded.l)) == 0);
}

static void test_oer_c_source_a_encode_error_no_mem(void)
{
uint8_t encoded[54];
struct oer_c_source_a_t decoded;

decoded.a = -1;
decoded.b = -2;
decoded.c = -3;
decoded.d = -4;
decoded.e = 1;
decoded.f = 2;
decoded.g = 3;
decoded.h = 4;
decoded.i = 1.0f;
decoded.j = 1.0;
decoded.k = true;
memset(&decoded.l[0], 5, sizeof(decoded.l));

assert(oer_c_source_a_encode(&encoded[0],
sizeof(encoded),
&decoded) == -ENOMEM);
}

static void test_oer_c_source_a_decode_error_out_of_data(void)
{
uint8_t encoded[54] =
"\xff\xff\xfe\xff\xff\xff\xfd\xff\xff\xff\xff\xff\xff"
"\xff\xfc\x01\x00\x02\x00\x00\x00\x03\x00\x00\x00\x00"
"\x00\x00\x00\x04\x3f\x80\x00\x00\x3f\xf0\x00\x00\x00"
"\x00\x00\x00\xff\x0b\x05\x05\x05\x05\x05\x05\x05\x05"
"\x05\x05";
struct oer_c_source_a_t decoded;

memset(&decoded, 0, sizeof(decoded));
assert(oer_c_source_a_decode(&decoded,
&encoded[0],
sizeof(encoded)) == -EOUTOFDATA);
}

int main(void)
{
test_c_source_a_oer();
test_oer_c_source_a();
test_oer_c_source_a_decode_spare_data();
test_oer_c_source_a_encode_error_no_mem();
test_oer_c_source_a_decode_error_out_of_data();

return (0);
}

0 comments on commit 990d4b5

Please sign in to comment.