From b00ad53e4274aa264895ed3f14ce8fff0c87c99b Mon Sep 17 00:00:00 2001 From: Maarten Billemont Date: Tue, 1 Aug 2017 17:13:30 -0400 Subject: [PATCH] Some more error handling. --- core/c/mpw-algorithm_v0.c | 3 +-- core/c/mpw-types.c | 2 +- platform-independent/cli-c/cli/mpw-tests-util.c | 7 ++++--- platform-independent/cli-c/cli/mpw-tests.c | 12 +++++++++--- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/core/c/mpw-algorithm_v0.c b/core/c/mpw-algorithm_v0.c index e29a4167..d2868e1b 100644 --- a/core/c/mpw-algorithm_v0.c +++ b/core/c/mpw-algorithm_v0.c @@ -26,13 +26,12 @@ #define MP_N 32768 #define MP_r 8 #define MP_p 2 -#define MP_hash PearlHashSHA256 static const char *mpw_templateForType_v0(MPPasswordType type, uint16_t seedByte) { size_t count = 0; const char **templates = mpw_templatesForType( type, &count ); - char const *template = count? templates[seedByte % count]: NULL; + char const *template = templates && count? templates[seedByte % count]: NULL; free( templates ); return template; } diff --git a/core/c/mpw-types.c b/core/c/mpw-types.c index f144727f..82a58f43 100644 --- a/core/c/mpw-types.c +++ b/core/c/mpw-types.c @@ -150,7 +150,7 @@ const char *mpw_templateForType(MPPasswordType type, uint8_t seedByte) { size_t count = 0; const char **templates = mpw_templatesForType( type, &count ); - char const *template = count? templates[seedByte % count]: NULL; + char const *template = templates && count? templates[seedByte % count]: NULL; free( templates ); return template; } diff --git a/platform-independent/cli-c/cli/mpw-tests-util.c b/platform-independent/cli-c/cli/mpw-tests-util.c index 1ae59c63..9304e604 100644 --- a/platform-independent/cli-c/cli/mpw-tests-util.c +++ b/platform-independent/cli-c/cli/mpw-tests-util.c @@ -48,7 +48,7 @@ xmlNodePtr mpw_xmlTestCaseNode(xmlNodePtr testCaseNode, const char *nodeName) { for (xmlNodePtr otherTestCaseNode = testCaseNode->parent->children; otherTestCaseNode; otherTestCaseNode = otherTestCaseNode->next) { xmlChar *id = mpw_xmlTestCaseString( otherTestCaseNode, "id" ); - int foundParent = xmlStrcmp( id, parentId ) == 0; + int foundParent = id && xmlStrcmp( id, parentId ) == 0; xmlFree( id ); if (foundParent) { @@ -58,18 +58,19 @@ xmlNodePtr mpw_xmlTestCaseNode(xmlNodePtr testCaseNode, const char *nodeName) { } ftl( "Missing parent: %s, for case: %s\n", parentId, mpw_xmlTestCaseString( testCaseNode, "id" ) ); + return NULL; } xmlChar *mpw_xmlTestCaseString(xmlNodePtr context, const char *nodeName) { xmlNodePtr child = mpw_xmlTestCaseNode( context, nodeName ); - return xmlNodeGetContent( child ); + return child? xmlNodeGetContent( child ): NULL; } uint32_t mpw_xmlTestCaseInteger(xmlNodePtr context, const char *nodeName) { xmlChar *string = mpw_xmlTestCaseString( context, nodeName ); - uint32_t integer = (uint32_t)atol( (char *)string ); + uint32_t integer = string? (uint32_t)atol( (char *)string ): 0; xmlFree( string ); return integer; diff --git a/platform-independent/cli-c/cli/mpw-tests.c b/platform-independent/cli-c/cli/mpw-tests.c index e8178220..9367e8a6 100644 --- a/platform-independent/cli-c/cli/mpw-tests.c +++ b/platform-independent/cli-c/cli/mpw-tests.c @@ -13,8 +13,10 @@ int main(int argc, char *const argv[]) { int failedTests = 0; xmlNodePtr tests = xmlDocGetRootElement( xmlParseFile( "mpw_tests.xml" ) ); - if (!tests) + if (!tests) { ftl( "Couldn't find test case: mpw_tests.xml\n" ); + abort(); + } for (xmlNodePtr testCase = tests->children; testCase; testCase = testCase->next) { if (testCase->type != XML_ELEMENT_NODE || xmlStrcmp( testCase->name, BAD_CAST "case" ) != 0) @@ -46,8 +48,10 @@ int main(int argc, char *const argv[]) { // 1. calculate the master key. MPMasterKey masterKey = mpw_masterKey( (char *)fullName, (char *)masterPassword, algorithm ); - if (!masterKey) + if (!masterKey) { ftl( "Couldn't derive master key." ); + continue; + } // 2. calculate the site password. MPSiteKey siteKey = mpw_siteKey( @@ -56,8 +60,10 @@ int main(int argc, char *const argv[]) { siteKey, siteType, algorithm ); mpw_free( masterKey, MPMasterKeySize ); mpw_free( siteKey, MPSiteKeySize ); - if (!sitePassword) + if (!sitePassword) { ftl( "Couldn't derive site password." ); + continue; + } // Check the result. if (xmlStrcmp( result, BAD_CAST sitePassword ) == 0)