On 10/28/2009 01:53 PM, David Lutterkort wrote:
It should be legal to pass in a NULL ncf or ncf->driver. Also
added a test
that checks we return an error code when ncf_init is called with a bogus
root.
---
src/drv_initscripts.c | 2 ++
tests/test-initscripts.c | 14 ++++++++++++++
2 files changed, 16 insertions(+), 0 deletions(-)
diff --git a/src/drv_initscripts.c b/src/drv_initscripts.c
index 8e082b6..6163035 100644
--- a/src/drv_initscripts.c
+++ b/src/drv_initscripts.c
@@ -508,6 +508,8 @@ int drv_init(struct netcf *ncf) {
}
void drv_close(struct netcf *ncf) {
+ if (ncf == NULL || ncf->driver == NULL)
+ return;
xsltFreeStylesheet(ncf->driver->get);
xsltFreeStylesheet(ncf->driver->put);
xmlRelaxNGFree(ncf->driver->rng);
diff --git a/tests/test-initscripts.c b/tests/test-initscripts.c
index 0f2a887..329bf19 100644
--- a/tests/test-initscripts.c
+++ b/tests/test-initscripts.c
@@ -192,6 +192,19 @@ static void testTransforms(CuTest *tc) {
assert_transforms(tc, "ipv6-static-multi");
}
+static void testCorruptedSetup(CuTest *tc) {
+ int r;
+
+ ncf_close(ncf);
+ ncf = NULL;
+
+ r = ncf_init(&ncf, "/dev/null");
+ CuAssertIntEquals(tc, -1, r);
+ CuAssertPtrNotNull(tc, ncf);
+ r = ncf_error(ncf, NULL, NULL);
+ CuAssertIntEquals(tc, NETCF_EFILE, r);
+}
+
int main(void) {
char *output = NULL;
CuSuite* suite = CuSuiteNew();
@@ -221,6 +234,7 @@ int main(void) {
SUITE_ADD_TEST(suite, testLookupByMAC);
SUITE_ADD_TEST(suite, testDefineUndefine);
SUITE_ADD_TEST(suite, testTransforms);
+ SUITE_ADD_TEST(suite, testCorruptedSetup);
CuSuiteRun(suite);
CuSuiteSummary(suite,&output);
+1