mirror of
https://github.com/ibm-s390-linux/s390-tools.git
synced 2026-08-05 02:14:52 +00:00
The util_scandir_* functions may return 0 or -1, in which case no vector is allocated in libutil/util_scandir.c. util_ptr_vec_free, called by util_scandir_free or directly from lschp.c and lsscm.c, does always call free for the vector which might be not initialized. Fix this by always initializing the vector with NULL in __scandir and add some api hardening by checking the vector and count in util_ptr_vec_free before iterating over the vector. And update the comment for util_scandir to indicate that -1 may be returned in error cases plus that the vector is initialized with NULL. Fixes: https://github.com/ibm-s390-tools/s390-tools/issues/43 Reported-by: Cornelia Huck <cohuck@redhat.com> Reviewed-by: Jan Höppner <hoeppner@linux.ibm.com> Signed-off-by: Karsten Graul <kgraul@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
54 lines
1.1 KiB
C
54 lines
1.1 KiB
C
/*
|
|
* util - Utility function library
|
|
*
|
|
* General helper functions
|
|
*
|
|
* Copyright IBM Corp. 2013, 2017
|
|
*
|
|
* s390-tools is free software; you can redistribute it and/or modify
|
|
* it under the terms of the MIT license. See LICENSE for details.
|
|
*/
|
|
|
|
#ifndef LIB_UTIL_BASE_H
|
|
#define LIB_UTIL_BASE_H
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
void util_hexdump(FILE *fh, const char *tag, const void *data, int cnt);
|
|
void util_hexdump_grp(FILE *fh, const char *tag, const void *data, int group,
|
|
int cnt, int indent);
|
|
void util_print_indented(const char *str, int indent);
|
|
|
|
#define UTIL_ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0]))
|
|
|
|
#define MIN(x, y) \
|
|
({ \
|
|
__typeof__(x) _x = (x); \
|
|
__typeof__(y) _y = (y); \
|
|
\
|
|
_x < _y ? _x : _y; \
|
|
})
|
|
|
|
#define MAX(x, y) \
|
|
({ \
|
|
__typeof__(x) _x = (x); \
|
|
__typeof__(y) _y = (y); \
|
|
\
|
|
_x > _y ? _x : _y; \
|
|
})
|
|
|
|
static inline void util_ptr_vec_free(void **ptr_vec, int count)
|
|
{
|
|
int i;
|
|
|
|
if (!ptr_vec || count < 0)
|
|
return;
|
|
|
|
for (i = 0; i < count; i++)
|
|
free(ptr_vec[i]);
|
|
free(ptr_vec);
|
|
}
|
|
|
|
#endif /* LIB_UTIL_BASE_H */
|