summaryrefslogtreecommitdiff
path: root/src/model/fromFile.c
diff options
context:
space:
mode:
authornorly <ny-git@enpas.org>2013-05-26 22:16:54 +0100
committernorly <ny-git@enpas.org>2013-05-27 03:10:31 +0100
commitf5eac562c915811c27969949c178f8fe96a12e47 (patch)
tree7713d3c13719825ed96210f2acc4c34d796597b8 /src/model/fromFile.c
parent3d899fbfd33a8b44dcbd7dfbc952464731a7e589 (diff)
Validate input at libelf level
This way we can just assume that stuff works later on and keep the code clean and simple. It especially establishes that the file has a sane format and is thus understandable and editable.
Diffstat (limited to 'src/model/fromFile.c')
-rw-r--r--src/model/fromFile.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/src/model/fromFile.c b/src/model/fromFile.c
index fee6ec0..57cb519 100644
--- a/src/model/fromFile.c
+++ b/src/model/fromFile.c
@@ -94,6 +94,12 @@ ElfuElf* elfu_mFromElf(Elf *e)
size_t shstrndx;
size_t i, n;
+ assert(e);
+ if (elfu_eCheck(e)) {
+ goto ERROR;
+ }
+
+ /* Get the section string table index */
if (elf_getshdrstrndx(e, &shstrndx) != 0) {
shstrndx = 0;
}
@@ -117,7 +123,7 @@ ElfuElf* elfu_mFromElf(Elf *e)
if (!gelf_getehdr(e, &me->ehdr)) {
ELFU_WARNELF("gelf_getehdr");
- goto out;
+ goto ERROR;
}
@@ -135,7 +141,7 @@ ElfuElf* elfu_mFromElf(Elf *e)
me->shstrtab = ms;
}
} else {
- goto out;
+ goto ERROR;
}
scn = elf_nextscn(e, scn);
@@ -165,15 +171,16 @@ ElfuElf* elfu_mFromElf(Elf *e)
if (mp) {
CIRCLEQ_INSERT_TAIL(&me->phdrList, mp, elem);
} else {
- goto out;
+ goto ERROR;
}
}
+ return me;
- return me;
+ ERROR:
+ // TODO: Free data structures
- out:
- // FIXME
+ ELFU_WARN("elfu_mFromElf: Failed to load file.\n");
return NULL;
}