Print this page
5679 be_sort_list(): Possible null pointer dereference

*** 24,33 **** --- 24,34 ---- */ /* * Copyright 2013 Nexenta Systems, Inc. All rights reserved. * Copyright 2015 Toomas Soome <tsoome@me.com> + * Copyright 2015 Gary Mills */ #include <assert.h> #include <libintl.h> #include <libnvpair.h>
*** 695,711 **** be_sort_list(be_node_list_t **pstart, int (*compar)(const void *, const void *)) { size_t ibe, nbe; be_node_list_t *p = NULL; be_node_list_t **ptrlist = NULL; if (pstart == NULL) return; /* build array of linked list BE struct pointers */ for (p = *pstart, nbe = 0; p != NULL; nbe++, p = p->be_next_node) { ! ptrlist = realloc(ptrlist, sizeof (be_node_list_t *) * (nbe + 2)); ptrlist[nbe] = p; } if (nbe == 0) return; /* in-place list quicksort using qsort(3C) */ --- 696,719 ---- be_sort_list(be_node_list_t **pstart, int (*compar)(const void *, const void *)) { size_t ibe, nbe; be_node_list_t *p = NULL; be_node_list_t **ptrlist = NULL; + be_node_list_t **ptrtmp; if (pstart == NULL) return; /* build array of linked list BE struct pointers */ for (p = *pstart, nbe = 0; p != NULL; nbe++, p = p->be_next_node) { ! ptrtmp = realloc(ptrlist, sizeof (be_node_list_t *) * (nbe + 2)); + if (ptrtmp == NULL) { /* out of memory */ + be_print_err(gettext("be_sort_list: memory " + "allocation failed\n")); + goto free; + } + ptrlist = ptrtmp; ptrlist[nbe] = p; } if (nbe == 0) return; /* in-place list quicksort using qsort(3C) */