sanitize: fix const char * being used as non-const

This commit is contained in:
Loïc Gomez 2022-01-10 18:10:50 +01:00 committed by Pierre-Louis Bonicoli
parent ee6ee0bd34
commit 26d347dec6
Signed by: pilou
GPG Key ID: 06914C4A5EDAA6DD
4 changed files with 29 additions and 14 deletions

View File

@ -66,7 +66,7 @@ char *irc_line_pop(struct line *l)
void _irc_line_append(struct line *l, const char *s)
{
array_push(&l->words, (char *)s);
array_push(&l->words, bip_strdup(s));
}
void irc_line_append(struct line *l, const char *s)
@ -110,11 +110,14 @@ char *irc_line_to_string_to(struct line *line, char *nick)
{
char *tmp;
char *l;
const char *prev;
tmp = (char *)irc_line_elem(line, 1);
prev = irc_line_elem(line, 1);
tmp = bip_strdup(prev);
array_set(&line->words, 1, nick);
l = irc_line_to_string(line);
array_set(&line->words, 1, tmp);
bip_cfree(prev);
return l;
}
@ -136,7 +139,7 @@ const char *irc_line_elem(struct line *line, int elem)
void irc_line_drop(struct line *line, int elem)
{
free(array_drop(&line->words, elem));
bip_cfree(array_drop(&line->words, elem));
}
int irc_line_elem_equals(struct line *line, int elem, const char *cmp)
@ -214,7 +217,7 @@ void irc_line_free(struct line *l)
int i;
for (i = 0; i < array_count(&l->words); i++)
free(array_get(&l->words, i));
bip_cfree(array_get(&l->words, i));
array_deinit(&l->words);
if (l->origin)
free(l->origin);

View File

@ -642,7 +642,7 @@ void log_mode(log_t *logdata, const char *ircmask, const char *channel,
if (mode_args) {
for (i = 0; i < array_count(mode_args); i++) {
snprintf(tmpbuf2, (size_t)LOGLINE_MAXLEN, "%s %s", tmpbuf,
(char *)array_get(mode_args, i));
(const char*)array_get(mode_args, i));
tmp = tmpbuf;
tmpbuf = tmpbuf2;
tmpbuf2 = tmp;
@ -1408,7 +1408,7 @@ list_t *backlog_lines(log_t *log, const char *bl, const char *cli_nick,
irc_line_init(&l);
l.origin = P_IRCMASK;
if (dest == cli_nick)
l.origin = (char *)bl;
l.origin = bip_strdup(bl);
_irc_line_append(&l, "PRIVMSG");
_irc_line_append(&l, dest);
_irc_line_append(&l, "End of backlog");

View File

@ -77,6 +77,17 @@ void *bip_realloc(void *ptr, size_t size)
return r;
}
void bip_cfree(const void *ptr)
{
if (!ptr)
return;
// there's no other way to free a const pointer
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wcast-qual"
free((void *)ptr);
#pragma GCC diagnostic pop
}
char *bip_strdup(const char *str)
{
char *r = strdup(str);
@ -862,10 +873,10 @@ void array_ensure(array_t *a, int index)
a->elemc = index + 1;
}
void *array_drop(array_t *a, int index)
const void *array_drop(array_t *a, int index)
{
int i;
void *ret;
const void *ret;
assert(a && array_includes(a, index));

View File

@ -71,7 +71,7 @@ typedef struct hash_iterator {
typedef struct array {
int elemc;
void **elemv;
const void **elemv;
} array_t;
#define MOVE_STRING(dest, src) do {\
@ -178,12 +178,13 @@ char *checkmode2text(int v);
void *bip_malloc(size_t size);
void *bip_calloc(size_t nmemb, size_t size);
void *bip_realloc(void *ptr, size_t size);
void bip_cfree(const void *ptr);
char *bip_strdup(const char *str);
char *bip_strcat_fit(size_t *remaining, char *str, const char *str2);
char *bip_strcatf_fit(size_t *remaining, char *str, const char *str2, ...);
void bip_clock_gettime(clockid_t clockid, struct timespec *tp);
#define array_each(a, idx, ptr) for ((idx) = 0; \
(idx) < (a)->elemc && (((ptr) = array_get((a), (idx))) || 1); \
(idx) < (a)->elemc && (((ptr) = bip_strdup(array_get((a), (idx)))) || 1); \
(idx)++)
void array_init(array_t *a);
@ -192,7 +193,7 @@ void array_ensure(array_t *a, int index);
array_t *array_extract(array_t *a, int index, int upto);
void array_deinit(array_t *a);
void array_free(array_t *a);
void *array_drop(array_t *a, int index);
const void *array_drop(array_t *a, int index);
static inline int array_count(array_t *a)
{
assert(a);
@ -212,7 +213,7 @@ static inline void array_set(array_t *a, int index, void *ptr)
a->elemv[index] = ptr;
}
static inline void *array_get(array_t *a, int index)
static inline const void *array_get(array_t *a, int index)
{
assert(a && array_includes(a, index));
return a->elemv[index];
@ -234,13 +235,13 @@ static inline void *array_pop(array_t *a)
if (a->elemc == 0)
return NULL;
if (a->elemc == 1) {
void *ptr = a->elemv[0];
void *ptr = bip_strdup(a->elemv[0]);
free(a->elemv);
a->elemv = NULL;
a->elemc = 0;
return ptr;
}
return a->elemv[--a->elemc];
return (void *)bip_strdup(a->elemv[--a->elemc]);
}
#endif