mirror of
https://github.com/Yubico/yubico-pam.git
synced 2025-02-20 12:54:16 +01:00
make sure filter is null terminated and return length including null
This commit is contained in:
parent
686a47accf
commit
58382bf7fc
@ -126,13 +126,13 @@ static void test_load_chalresp_state(void) {
|
||||
#endif /* HAVE_CR */
|
||||
|
||||
static void test_filter_printf(void) {
|
||||
assert(filter_result_len("meno %u", "doof", NULL) == 9);
|
||||
assert(filter_result_len("meno %u %u", "doof", NULL) == 14);
|
||||
assert(filter_result_len("%u meno %u", "doof", NULL) == 14);
|
||||
assert(filter_result_len("%u me %u no %u", "doof", NULL) == 20);
|
||||
assert(filter_result_len("meno %w %%u", "doof", NULL) == 13);
|
||||
assert(filter_result_len("meno %w %%u meno", "doof", NULL) == 18);
|
||||
assert(filter_result_len("meno ", "doof", NULL) == 5);
|
||||
assert(filter_result_len("meno %u", "doof", NULL) == 10);
|
||||
assert(filter_result_len("meno %u %u", "doof", NULL) == 15);
|
||||
assert(filter_result_len("%u meno %u", "doof", NULL) == 15);
|
||||
assert(filter_result_len("%u me %u no %u", "doof", NULL) == 21);
|
||||
assert(filter_result_len("meno %w %%u", "doof", NULL) == 14);
|
||||
assert(filter_result_len("meno %w %%u meno", "doof", NULL) == 19);
|
||||
assert(filter_result_len("meno ", "doof", NULL) == 6);
|
||||
|
||||
assert(!strcmp(filter_printf("meno %u", "doof"), "meno doof"));
|
||||
assert(!strcmp(filter_printf("meno %u %u", "doof"), "meno doof doof"));
|
||||
|
15
util.c
15
util.c
@ -476,16 +476,16 @@ size_t filter_result_len(const char *filter, const char *user, char *output) {
|
||||
len = part - filter;
|
||||
else
|
||||
len = strlen(filter);
|
||||
if (output != NULL)
|
||||
if (output)
|
||||
{
|
||||
strncpy(output, filter, len);
|
||||
output += len;
|
||||
}
|
||||
result += len;
|
||||
filter += len + 2;
|
||||
if(part != NULL)
|
||||
if(part)
|
||||
{
|
||||
if(output != NULL)
|
||||
if(output)
|
||||
{
|
||||
strncpy(output, user, strlen(user));
|
||||
output += strlen(user);
|
||||
@ -493,12 +493,15 @@ size_t filter_result_len(const char *filter, const char *user, char *output) {
|
||||
result += strlen(user);
|
||||
}
|
||||
}
|
||||
while(part != NULL);
|
||||
return result;
|
||||
while(part);
|
||||
|
||||
if(output)
|
||||
*output = '\0';
|
||||
return(result + 1);
|
||||
}
|
||||
|
||||
char *filter_printf(const char *filter, const char *user) {
|
||||
char *result = malloc(filter_result_len(filter, user, NULL) + 1);
|
||||
char *result = malloc(filter_result_len(filter, user, NULL));
|
||||
filter_result_len(filter, user, result);
|
||||
return result;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user