Module Name: src Committed By: christos Date: Tue Apr 13 13:13:04 UTC 2021
Modified Files: src/lib/libform: field.c form.c internals.c type_alnum.c type_alpha.c type_enum.c type_integer.c type_numeric.c type_regex.c Log Message: - fix memory leak - xxx questionable allocation - remove casts - use sizeof(*var) - bcopy -> memcpy/memmove To generate a diff of this commit: cvs rdiff -u -r1.31 -r1.32 src/lib/libform/field.c cvs rdiff -u -r1.16 -r1.17 src/lib/libform/form.c cvs rdiff -u -r1.39 -r1.40 src/lib/libform/internals.c cvs rdiff -u -r1.11 -r1.12 src/lib/libform/type_alnum.c cvs rdiff -u -r1.12 -r1.13 src/lib/libform/type_alpha.c \ src/lib/libform/type_enum.c cvs rdiff -u -r1.8 -r1.9 src/lib/libform/type_integer.c cvs rdiff -u -r1.9 -r1.10 src/lib/libform/type_numeric.c cvs rdiff -u -r1.7 -r1.8 src/lib/libform/type_regex.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/libform/field.c diff -u src/lib/libform/field.c:1.31 src/lib/libform/field.c:1.32 --- src/lib/libform/field.c:1.31 Wed Mar 9 14:47:13 2016 +++ src/lib/libform/field.c Tue Apr 13 09:13:03 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: field.c,v 1.31 2016/03/09 19:47:13 christos Exp $ */ +/* $NetBSD: field.c,v 1.32 2021/04/13 13:13:03 christos Exp $ */ /*- * Copyright (c) 1998-1999 Brett Lymn * (bl...@baea.com.au, brett_l...@yahoo.com.au) @@ -29,7 +29,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: field.c,v 1.31 2016/03/09 19:47:13 christos Exp $"); +__RCSID("$NetBSD: field.c,v 1.32 2021/04/13 13:13:03 christos Exp $"); #include <sys/param.h> #include <stdlib.h> @@ -751,12 +751,12 @@ _formi_create_field(FIELD *prototype, in (nrows < 0) || (nbuf < 0)) return NULL; - if ((new = (FIELD *)malloc(sizeof(FIELD))) == NULL) { + if ((new = malloc(sizeof(*new))) == NULL) { return NULL; } /* copy in the default field info */ - bcopy(prototype, new, sizeof(FIELD)); + memcpy(new, prototype, sizeof(*new)); new->nbuf = nbuf + 1; new->rows = rows; @@ -775,7 +775,6 @@ FIELD * new_field(int rows, int cols, int frow, int fcol, int nrows, int nbuf) { FIELD *new; - size_t buf_len; int i; @@ -783,31 +782,24 @@ new_field(int rows, int cols, int frow, frow, fcol, nrows, nbuf)) == NULL) return NULL; - buf_len = (nbuf + 1) * sizeof(FORM_STR); - - if ((new->buffers = (FORM_STR *)malloc(buf_len)) == NULL) { + if ((new->buffers = calloc(nbuf + 1, sizeof(*new->buffers))) == NULL) { free(new); return NULL; } - /* Initialise the strings to a zero length string */ + /* Initialise the strings to a zero length string */ for (i = 0; i < nbuf + 1; i++) { if ((new->buffers[i].string = - (char *) malloc(sizeof(char))) == NULL) { - free(new->buffers); - free(new); - return NULL; + malloc(sizeof(*new->buffers[i].string))) == NULL) { + goto out; } new->buffers[i].string[0] = '\0'; new->buffers[i].length = 0; new->buffers[i].allocated = 1; } - if ((new->alines = (_FORMI_FIELD_LINES *) - malloc(sizeof(struct _formi_field_lines))) == NULL) { - free(new->buffers); - free(new); - return NULL; + if ((new->alines = malloc(sizeof(*new->alines))) == NULL) { + goto out; } new->alines->prev = NULL; @@ -822,6 +814,13 @@ new_field(int rows, int cols, int frow, new->cur_line = new->alines; return new; +out: + while (--i >= 0) { + free(new->buffers[i].string); + } + free(new->buffers); + free(new); + return NULL; } /* @@ -836,23 +835,24 @@ dup_field(FIELD *field, int frow, int fc if (field == NULL) return NULL; - /* XXXX this right???? */ + /* XXX: this right???? */ if ((new = _formi_create_field(field, (int) field->rows, - (int ) field->cols, + (int) field->cols, frow, fcol, (int) field->nrows, field->nbuf - 1)) == NULL) return NULL; row_len = (field->rows + field->nrows + 1) * field->cols; - buf_len = (field->nbuf + 1) * row_len * sizeof(FORM_STR); + buf_len = (field->nbuf + 1) * row_len * sizeof(*new->buffers); - if ((new->buffers = (FORM_STR *)malloc(buf_len)) == NULL) { + /* XXX: dups buffers but not their strings? */ + if ((new->buffers = malloc(buf_len)) == NULL) { free(new); return NULL; } /* copy the buffers from the source field into the new copy */ - bcopy(field->buffers, new->buffers, buf_len); + memcpy(new->buffers, field->buffers, buf_len); return new; } Index: src/lib/libform/form.c diff -u src/lib/libform/form.c:1.16 src/lib/libform/form.c:1.17 --- src/lib/libform/form.c:1.16 Wed Mar 9 14:47:13 2016 +++ src/lib/libform/form.c Tue Apr 13 09:13:04 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: form.c,v 1.16 2016/03/09 19:47:13 christos Exp $ */ +/* $NetBSD: form.c,v 1.17 2021/04/13 13:13:04 christos Exp $ */ /*- * Copyright (c) 1998-1999 Brett Lymn @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: form.c,v 1.16 2016/03/09 19:47:13 christos Exp $"); +__RCSID("$NetBSD: form.c,v 1.17 2021/04/13 13:13:04 christos Exp $"); #include <stdlib.h> #include <strings.h> @@ -487,12 +487,12 @@ new_form(FIELD **fields) { FORM *new; - if ((new = (FORM *) malloc(sizeof(FORM))) == NULL) + if ((new = malloc(sizeof(*new))) == NULL) return NULL; /* copy in the defaults... */ - bcopy(&_formi_default_form, new, sizeof(FORM)); + memcpy(new, &_formi_default_form, sizeof(*new)); if (new->win == NULL) new->scrwin = stdscr; /* something for curses to write to */ Index: src/lib/libform/internals.c diff -u src/lib/libform/internals.c:1.39 src/lib/libform/internals.c:1.40 --- src/lib/libform/internals.c:1.39 Thu Nov 8 01:34:40 2018 +++ src/lib/libform/internals.c Tue Apr 13 09:13:04 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: internals.c,v 1.39 2018/11/08 06:34:40 msaitoh Exp $ */ +/* $NetBSD: internals.c,v 1.40 2021/04/13 13:13:04 christos Exp $ */ /*- * Copyright (c) 1998-1999 Brett Lymn @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: internals.c,v 1.39 2018/11/08 06:34:40 msaitoh Exp $"); +__RCSID("$NetBSD: internals.c,v 1.40 2021/04/13 13:13:04 christos Exp $"); #include <limits.h> #include <ctype.h> @@ -219,19 +219,18 @@ copy_row(_FORMI_FIELD_LINES *row) _FORMI_FIELD_LINES *new; _formi_tab_t *tp, *newt; - if ((new = (_FORMI_FIELD_LINES *) malloc(sizeof(_FORMI_FIELD_LINES))) - == NULL) { + if ((new = malloc(sizeof(*new))) == NULL) { return NULL; } - memcpy(new, row, sizeof(_FORMI_FIELD_LINES)); + memcpy(new, row, sizeof(*new)); /* nuke the pointers from the source row so we don't get confused */ new->next = NULL; new->prev = NULL; new->tabs = NULL; - if ((new->string = (char *) malloc((size_t)new->allocated)) == NULL) { + if ((new->string = malloc((size_t)new->allocated)) == NULL) { free(new); return NULL; } @@ -240,14 +239,13 @@ copy_row(_FORMI_FIELD_LINES *row) if (row->tabs != NULL) { tp = row->tabs; - if ((new->tabs = (_formi_tab_t *) malloc(sizeof(_formi_tab_t))) - == NULL) { + if ((new->tabs = malloc(sizeof(*new->tabs))) == NULL) { free(new->string); free(new); return NULL; } - memcpy(new->tabs, row->tabs, sizeof(_formi_tab_t)); + memcpy(new->tabs, row->tabs, sizeof(*new->tabs)); new->tabs->back = NULL; new->tabs->fwd = NULL; @@ -255,9 +253,7 @@ copy_row(_FORMI_FIELD_LINES *row) newt = new->tabs; while (tp != NULL) { - if ((newt->fwd = - (_formi_tab_t *) malloc(sizeof(_formi_tab_t))) - == NULL) { + if ((newt->fwd = malloc(sizeof(*newt->fwd))) == NULL) { /* error... unwind allocations */ tp = new->tabs; while (tp != NULL) { @@ -271,7 +267,7 @@ copy_row(_FORMI_FIELD_LINES *row) return NULL; } - memcpy(newt->fwd, tp, sizeof(_formi_tab_t)); + memcpy(newt->fwd, tp, sizeof(*newt->fwd)); newt->fwd->back = newt; newt = newt->fwd; newt->fwd = NULL; @@ -1469,15 +1465,11 @@ _formi_find_pages(FORM *form) { int i, cur_page = 0; - if ((form->page_starts = (_FORMI_PAGE_START *) - malloc((form->max_page + 1) * sizeof(_FORMI_PAGE_START))) == NULL) + if ((form->page_starts = calloc((form->max_page + 1), + sizeof(*form->page_starts))) == NULL) return E_SYSTEM_ERROR; - /* initialise the page starts array */ - memset(form->page_starts, 0, - (form->max_page + 1) * sizeof(_FORMI_PAGE_START)); - - for (i =0; i < form->field_count; i++) { + for (i = 0; i < form->field_count; i++) { if (form->fields[i]->page_break == 1) cur_page++; if (form->page_starts[cur_page].in_use == 0) { @@ -1762,8 +1754,7 @@ _formi_add_char(FIELD *field, unsigned i * string. Everything should flow from there.... */ if (row->string == NULL) { - if ((row->string = (char *) malloc((size_t)INITIAL_LINE_ALLOC)) - == NULL) + if ((row->string = malloc((size_t)INITIAL_LINE_ALLOC)) == NULL) return E_SYSTEM_ERROR; row->string[0] = '\0'; row->allocated = INITIAL_LINE_ALLOC; @@ -1827,7 +1818,7 @@ _formi_add_char(FIELD *field, unsigned i if (row->length + 2 >= row->allocated) { new_size = row->allocated + 16 - (row->allocated % 16); - if ((new = (char *) realloc(row->string, + if ((new = realloc(row->string, (size_t) new_size )) == NULL) return E_SYSTEM_ERROR; row->allocated = new_size; @@ -1836,7 +1827,7 @@ _formi_add_char(FIELD *field, unsigned i } if ((field->overlay == 0) && (row->length > pos)) { - bcopy(&row->string[pos], &row->string[pos + 1], + memmove(&row->string[pos + 1], &row->string[pos], (size_t) (row->length - pos + 1)); } @@ -1881,7 +1872,7 @@ _formi_add_char(FIELD *field, unsigned i * wrap failed for some reason, back out the * char insert */ - bcopy(&row->string[pos + 1], &row->string[pos], + memmove(&row->string[pos], &row->string[pos + 1], (size_t) (row->length - pos)); row->length--; if (pos > 0) @@ -2544,7 +2535,7 @@ _formi_manipulate_field(FORM *form, int } saved = row->string[start]; - bcopy(&row->string[start + 1], &row->string[start], + memmove(&row->string[start], &row->string[start + 1], (size_t) (end - start + 1)); row->string[end] = '\0'; row->length--; @@ -2612,8 +2603,8 @@ _formi_manipulate_field(FORM *form, int if ((cur->rows + cur->nrows) > 1) { if (_formi_wrap_field(cur, row) != E_OK) { - bcopy(&row->string[start], - &row->string[start + 1], + memmove(&row->string[start + 1], + &row->string[start], (size_t) (end - start)); row->length++; row->string[start] = saved; @@ -2675,7 +2666,7 @@ _formi_manipulate_field(FORM *form, int * without losing a char. */ saved = row->string[start - 1]; - bcopy(&row->string[start], &row->string[start - 1], + memmove(&row->string[start - 1], &row->string[start], (size_t) (end - start + 1)); row->length--; row->string[row->length] = '\0'; @@ -2707,8 +2698,8 @@ _formi_manipulate_field(FORM *form, int } if ((_formi_wrap_field(cur, row) != E_OK)) { - bcopy(&row->string[start - 1], - &row->string[start], + memmove(&row->string[start], + &row->string[start - 1], (size_t) (end - start)); row->length++; row->string[start - 1] = saved; @@ -2797,7 +2788,7 @@ _formi_manipulate_field(FORM *form, int start = find_sow(start, &row); str = row->string; /* XXXX hmmmm what if start and end on diff rows? XXXX */ - bcopy(&str[end], &str[start], + memmove(&str[start], &str[end], (size_t) (row->length - end + 1)); len = end - start; row->length -= len; @@ -3150,9 +3141,8 @@ field_sort_compare(const void *one, cons const FIELD *a, *b; int tl; - /* LINTED const castaway; we don't modify these! */ - a = (const FIELD *) *((const FIELD **) one); - b = (const FIELD *) *((const FIELD **) two); + a = *(const FIELD **) __UNCONST(one); + b = *(const FIELD **) __UNCONST(two); if (a == NULL) return 1; @@ -3191,8 +3181,7 @@ _formi_sort_fields(FORM *form) == NULL) return; - bcopy(form->fields, sort_area, - (size_t) (sizeof(FIELD *) * form->field_count)); + memcpy(sort_area, form->fields, sizeof(*sort_area) * form->field_count); qsort(sort_area, (size_t) form->field_count, sizeof(FIELD *), field_sort_compare); @@ -3392,8 +3381,7 @@ _formi_calculate_tabs(_FORMI_FIELD_LINES for (i = 0, j = 0; i < row->length; i++, j++) { if (row->string[i] == '\t') { if (*tsp == NULL) { - if ((*tsp = (_formi_tab_t *) - malloc(sizeof(_formi_tab_t))) == NULL) + if ((*tsp = malloc(sizeof(*tsp))) == NULL) return; (*tsp)->back = old_ts; (*tsp)->fwd = NULL; @@ -3552,7 +3540,7 @@ _formi_sync_buffer(FIELD *field) * init nstr up front, just in case there are no line contents, * this could happen if the field just contains hard returns. */ - if ((nstr = malloc(sizeof(char))) == NULL) + if ((nstr = malloc(sizeof(*nstr))) == NULL) return E_SYSTEM_ERROR; nstr[0] = '\0'; Index: src/lib/libform/type_alnum.c diff -u src/lib/libform/type_alnum.c:1.11 src/lib/libform/type_alnum.c:1.12 --- src/lib/libform/type_alnum.c:1.11 Mon Apr 12 20:29:42 2021 +++ src/lib/libform/type_alnum.c Tue Apr 13 09:13:04 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: type_alnum.c,v 1.11 2021/04/13 00:29:42 mrg Exp $ */ +/* $NetBSD: type_alnum.c,v 1.12 2021/04/13 13:13:04 christos Exp $ */ /*- * Copyright (c) 1998-1999 Brett Lymn @@ -54,12 +54,12 @@ create_alnum_args(va_list *args) { alnum_args *new; - new = (alnum_args *) malloc(sizeof(alnum_args)); + new = malloc(sizeof(*new)); if (new != NULL) new->width = va_arg(*args, int); - return (void *) new; + return (void *)new; } /* @@ -70,12 +70,12 @@ copy_alnum_args(char *args) { alnum_args *new; - new = (alnum_args *) malloc(sizeof(alnum_args)); + new = malloc(sizeof(*new)); if (new != NULL) new->width = ((alnum_args *) (void *)args)->width; - return (char *) (void *) new; + return (void *)new; } /* @@ -133,7 +133,7 @@ alnum_check_field(FIELD *field, char *ar if (buf[cur] != '\0') return FALSE; - if ((new = (char *) malloc(sizeof(char) * (end - start + 1))) == NULL) + if ((new = malloc(sizeof(*new) * (end - start + 1))) == NULL) return FALSE; if ((end - start) >= 1) { Index: src/lib/libform/type_alpha.c diff -u src/lib/libform/type_alpha.c:1.12 src/lib/libform/type_alpha.c:1.13 --- src/lib/libform/type_alpha.c:1.12 Mon Apr 12 20:29:42 2021 +++ src/lib/libform/type_alpha.c Tue Apr 13 09:13:04 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: type_alpha.c,v 1.12 2021/04/13 00:29:42 mrg Exp $ */ +/* $NetBSD: type_alpha.c,v 1.13 2021/04/13 13:13:04 christos Exp $ */ /*- * Copyright (c) 1998-1999 Brett Lymn @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: type_alpha.c,v 1.12 2021/04/13 00:29:42 mrg Exp $"); +__RCSID("$NetBSD: type_alpha.c,v 1.13 2021/04/13 13:13:04 christos Exp $"); #include <stdlib.h> #include <string.h> @@ -56,7 +56,7 @@ create_alpha_args(va_list *args) { alpha_args *new; - new = (alpha_args *) malloc(sizeof(alpha_args)); + new = malloc(sizeof(*new)); if (new != NULL) new->width = va_arg(*args, int); @@ -72,7 +72,7 @@ copy_alpha_args(char *args) { alpha_args *new; - new = (alpha_args *) malloc(sizeof(alpha_args)); + new = malloc(sizeof(*new)); if (new != NULL) new->width = ((alpha_args *) (void *) args)->width; @@ -136,7 +136,7 @@ alpha_check_field(FIELD *field, char *ar return FALSE; /* set buffer 0 to the new string */ - if ((new = (char *) malloc(sizeof(char) * (end - start + 1))) == NULL) + if ((new = malloc(sizeof(*new) * (end - start + 1))) == NULL) return FALSE; if ((end - start) >= 1) { Index: src/lib/libform/type_enum.c diff -u src/lib/libform/type_enum.c:1.12 src/lib/libform/type_enum.c:1.13 --- src/lib/libform/type_enum.c:1.12 Wed Mar 9 14:47:13 2016 +++ src/lib/libform/type_enum.c Tue Apr 13 09:13:04 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: type_enum.c,v 1.12 2016/03/09 19:47:13 christos Exp $ */ +/* $NetBSD: type_enum.c,v 1.13 2021/04/13 13:13:04 christos Exp $ */ /*- * Copyright (c) 1998-1999 Brett Lymn @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: type_enum.c,v 1.12 2016/03/09 19:47:13 christos Exp $"); +__RCSID("$NetBSD: type_enum.c,v 1.13 2021/04/13 13:13:04 christos Exp $"); #include <ctype.h> #include <stdlib.h> @@ -121,10 +121,10 @@ copy_enum_args(char *args) { enum_args *new; - new = (enum_args *) malloc(sizeof(enum_args)); + new = malloc(sizeof(*new)); if (new != NULL) - bcopy(args, new, sizeof(enum_args)); + memcpy(new, args, sizeof(*new)); return (void *) new; } Index: src/lib/libform/type_integer.c diff -u src/lib/libform/type_integer.c:1.8 src/lib/libform/type_integer.c:1.9 --- src/lib/libform/type_integer.c:1.8 Thu Oct 28 17:14:52 2004 +++ src/lib/libform/type_integer.c Tue Apr 13 09:13:04 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: type_integer.c,v 1.8 2004/10/28 21:14:52 dsl Exp $ */ +/* $NetBSD: type_integer.c,v 1.9 2021/04/13 13:13:04 christos Exp $ */ /*- * Copyright (c) 1998-1999 Brett Lymn @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: type_integer.c,v 1.8 2004/10/28 21:14:52 dsl Exp $"); +__RCSID("$NetBSD: type_integer.c,v 1.9 2021/04/13 13:13:04 christos Exp $"); #include <stdlib.h> #include <strings.h> @@ -58,7 +58,7 @@ create_integer_args(va_list *args) { integer_args *new; - new = (integer_args *) malloc(sizeof(integer_args)); + new = malloc(sizeof(*new)); if (new != NULL) { new->precision = va_arg(*args, unsigned); @@ -77,10 +77,10 @@ copy_integer_args(char *args) { integer_args *new; - new = (integer_args *) malloc(sizeof(integer_args)); + new = malloc(sizeof(*new)); if (new != NULL) - bcopy(args, new, sizeof(integer_args)); + memcpy(new, args, sizeof(*new)); return (void *) new; } Index: src/lib/libform/type_numeric.c diff -u src/lib/libform/type_numeric.c:1.9 src/lib/libform/type_numeric.c:1.10 --- src/lib/libform/type_numeric.c:1.9 Mon May 30 13:48:29 2016 +++ src/lib/libform/type_numeric.c Tue Apr 13 09:13:04 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: type_numeric.c,v 1.9 2016/05/30 17:48:29 dholland Exp $ */ +/* $NetBSD: type_numeric.c,v 1.10 2021/04/13 13:13:04 christos Exp $ */ /*- * Copyright (c) 1998-1999 Brett Lymn @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: type_numeric.c,v 1.9 2016/05/30 17:48:29 dholland Exp $"); +__RCSID("$NetBSD: type_numeric.c,v 1.10 2021/04/13 13:13:04 christos Exp $"); #include <stdlib.h> #include <string.h> @@ -58,7 +58,7 @@ create_numeric_args(va_list *args) { numeric_args *new; - new = (numeric_args *) malloc(sizeof(numeric_args)); + new = malloc(sizeof(*new)); if (new != NULL) { new->precision = va_arg(*args, unsigned); @@ -77,10 +77,10 @@ copy_numeric_args(char *args) { numeric_args *new; - new = (numeric_args *) malloc(sizeof(numeric_args)); + new = malloc(sizeof(*new)); if (new != NULL) - bcopy(args, new, sizeof(numeric_args)); + memcpy(new, args, sizeof(*args)); return (void *) new; } Index: src/lib/libform/type_regex.c diff -u src/lib/libform/type_regex.c:1.7 src/lib/libform/type_regex.c:1.8 --- src/lib/libform/type_regex.c:1.7 Wed Nov 24 06:57:09 2004 +++ src/lib/libform/type_regex.c Tue Apr 13 09:13:04 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: type_regex.c,v 1.7 2004/11/24 11:57:09 blymn Exp $ */ +/* $NetBSD: type_regex.c,v 1.8 2021/04/13 13:13:04 christos Exp $ */ /*- * Copyright (c) 1998-1999 Brett Lymn @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: type_regex.c,v 1.7 2004/11/24 11:57:09 blymn Exp $"); +__RCSID("$NetBSD: type_regex.c,v 1.8 2021/04/13 13:13:04 christos Exp $"); #include <stdlib.h> #include <sys/types.h> @@ -58,7 +58,7 @@ create_regex_args(va_list *args) regex_args *new; char *expression; - new = (regex_args *) malloc(sizeof(regex_args)); + new = malloc(sizeof(*new)); if (new != NULL) { new->references = 1;