@@ -102,7 +102,7 @@ static int int_filter(long val, const char *op, int input, int *err)
102
102
static int attr_enum_filter (void * attr , const char * input , int * err ,
103
103
const char * const str_list [], int max )
104
104
{
105
- int i , j , input_int ;
105
+ int i , j , input_int = -1 ;
106
106
long test_val = (long )attr ;
107
107
const char * input_val = NULL ;
108
108
@@ -124,7 +124,7 @@ static int attr_enum_filter(void *attr, const char *input, int *err,
124
124
input_int = j ;
125
125
}
126
126
127
- if (! input_int ) {
127
+ if (input_int < 0 ) {
128
128
* err = - EINVAL ;
129
129
pr_err ("kunit executor: invalid filter input: %s\n" , input );
130
130
return false;
@@ -186,8 +186,10 @@ static void *attr_module_get(void *test_or_suite, bool is_test)
186
186
// Suites get their module attribute from their first test_case
187
187
if (test )
188
188
return ((void * ) test -> module_name );
189
- else
189
+ else if ( kunit_suite_num_test_cases ( suite ) > 0 )
190
190
return ((void * ) suite -> test_cases [0 ].module_name );
191
+ else
192
+ return (void * ) "" ;
191
193
}
192
194
193
195
/* List of all Test Attributes */
@@ -221,7 +223,7 @@ const char *kunit_attr_filter_name(struct kunit_attr_filter filter)
221
223
void kunit_print_attr (void * test_or_suite , bool is_test , unsigned int test_level )
222
224
{
223
225
int i ;
224
- bool to_free ;
226
+ bool to_free = false ;
225
227
void * attr ;
226
228
const char * attr_name , * attr_str ;
227
229
struct kunit_suite * suite = is_test ? NULL : test_or_suite ;
@@ -255,7 +257,7 @@ void kunit_print_attr(void *test_or_suite, bool is_test, unsigned int test_level
255
257
256
258
int kunit_get_filter_count (char * input )
257
259
{
258
- int i , comma_index , count = 0 ;
260
+ int i , comma_index = 0 , count = 0 ;
259
261
260
262
for (i = 0 ; input [i ]; i ++ ) {
261
263
if (input [i ] == ',' ) {
@@ -272,7 +274,7 @@ int kunit_get_filter_count(char *input)
272
274
struct kunit_attr_filter kunit_next_attr_filter (char * * filters , int * err )
273
275
{
274
276
struct kunit_attr_filter filter = {};
275
- int i , j , comma_index , new_start_index ;
277
+ int i , j , comma_index = 0 , new_start_index = 0 ;
276
278
int op_index = -1 , attr_index = -1 ;
277
279
char op ;
278
280
char * input = * filters ;
@@ -316,7 +318,7 @@ struct kunit_attr_filter kunit_next_attr_filter(char **filters, int *err)
316
318
filter .attr = & kunit_attr_list [attr_index ];
317
319
}
318
320
319
- if (comma_index ) {
321
+ if (comma_index > 0 ) {
320
322
input [comma_index ] = '\0' ;
321
323
filter .input = input + op_index ;
322
324
input = input + new_start_index ;
@@ -356,31 +358,22 @@ struct kunit_suite *kunit_filter_attr_tests(const struct kunit_suite *const suit
356
358
357
359
/* Save filtering result on default value */
358
360
default_result = filter .attr -> filter (filter .attr -> attr_default , filter .input , err );
359
- if (* err ) {
360
- kfree (copy );
361
- kfree (filtered );
362
- return NULL ;
363
- }
361
+ if (* err )
362
+ goto err ;
364
363
365
364
/* Save suite attribute value and filtering result on that value */
366
365
suite_val = filter .attr -> get_attr ((void * )suite , false);
367
366
suite_result = filter .attr -> filter (suite_val , filter .input , err );
368
- if (* err ) {
369
- kfree (copy );
370
- kfree (filtered );
371
- return NULL ;
372
- }
367
+ if (* err )
368
+ goto err ;
373
369
374
370
/* For each test case, save test case if passes filtering. */
375
371
kunit_suite_for_each_test_case (suite , test_case ) {
376
372
test_val = filter .attr -> get_attr ((void * ) test_case , true);
377
373
test_result = filter .attr -> filter (filter .attr -> get_attr (test_case , true),
378
374
filter .input , err );
379
- if (* err ) {
380
- kfree (copy );
381
- kfree (filtered );
382
- return NULL ;
383
- }
375
+ if (* err )
376
+ goto err ;
384
377
385
378
/*
386
379
* If attribute value of test case is set, filter on that value.
@@ -406,7 +399,8 @@ struct kunit_suite *kunit_filter_attr_tests(const struct kunit_suite *const suit
406
399
}
407
400
}
408
401
409
- if (n == 0 ) {
402
+ err :
403
+ if (n == 0 || * err ) {
410
404
kfree (copy );
411
405
kfree (filtered );
412
406
return NULL ;
0 commit comments