git.fiddlerwoaroof.com
Browse code

handle missing colon

Greg Wiley authored on 17/04/2017 17:38:23
Showing 2 changed files
... ...
@@ -15,6 +15,9 @@ pam_token_conversation::pam_token_conversation(pam_handle_t *pamh, const pam_p p
15 15
     pam_conversation->conv(prompts, answers);
16 16
     std::string answer(answers[0]->resp);
17 17
     std::string::iterator delim = std::find(answer.begin(), answer.end(), ':');
18
+    if (delim == answer.end()) {
19
+        return;
20
+    }
18 21
     std::string user_name(answer.begin(), delim);
19 22
     std::string token(delim + 1, answer.end());
20 23
     user_ = user_name;
... ...
@@ -63,7 +63,19 @@ int returns_correct_user_name() {
63 63
     succeed();
64 64
 }
65 65
 
66
+int returns_empty_string_with_bad_input() {
67
+    //given
68
+    pam_handle_t *pamh;
69
+    pam_p pam = (pam_p)new fake_pam("sally");
70
+
71
+    //when
72
+    pam_token_conversation conversation(pamh, pam);
66 73
 
74
+    //then
75
+    check(conversation.user_name() == "", "did not return empty user name");
76
+    check(conversation.token() == "", "did not return empty token");
77
+    succeed();
78
+}
67 79
 
68 80
 RESET_VARS_START
69 81
 RESET_VARS_END
... ...
@@ -71,6 +83,7 @@ RESET_VARS_END
71 83
 int run_tests() {
72 84
     test(returns_correct_token);
73 85
     test(returns_correct_user_name);
86
+    test(returns_empty_string_with_bad_input);
74 87
     succeed();
75 88
 }
76 89