Browse code
handle missing colon
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 |
|