You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by yl...@apache.org on 2021/03/11 13:53:57 UTC
svn commit: r1887481 - /apr/apr/trunk/tables/apr_skiplist.c
Author: ylavic
Date: Thu Mar 11 13:53:56 2021
New Revision: 1887481
URL: http://svn.apache.org/viewvc?rev=1887481&view=rev
Log:
apr_skiplist: Handle ENOMEM from skiplisti_init(), fixing a compiler warning.
gcc-10 raises:
tables/apr_skiplist.c: In function ‘apr_skiplist_add_index’:
tables/apr_skiplist.c:284:16: error: ‘ni’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
284 | nsln = apr_skiplist_insert(ni, m->data);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
because above skiplisti_init() might return with ENOMEM, leaving ni uninitialized.
Since apr_skiplist_add_index returns void, the only option is to abort() in
this case.
For apr_skiplist_init(), we can forward the APR_ENOMEM to the caller.
Modified:
apr/apr/trunk/tables/apr_skiplist.c
Modified: apr/apr/trunk/tables/apr_skiplist.c
URL: http://svn.apache.org/viewvc/apr/apr/trunk/tables/apr_skiplist.c?rev=1887481&r1=1887480&r2=1887481&view=diff
==============================================================================
--- apr/apr/trunk/tables/apr_skiplist.c (original)
+++ apr/apr/trunk/tables/apr_skiplist.c Thu Mar 11 13:53:56 2021
@@ -238,11 +238,20 @@ static int indexing_compk(void *ac, void
APR_DECLARE(apr_status_t) apr_skiplist_init(apr_skiplist **s, apr_pool_t *p)
{
+ apr_status_t rv;
apr_skiplist *sl;
- skiplisti_init(s, p);
- sl = *s;
- skiplisti_init(&(sl->index), p);
+ rv = skiplisti_init(&sl, p);
+ if (rv != APR_SUCCESS) {
+ *s = NULL;
+ return rv;
+ }
+ rv = skiplisti_init(&sl->index, p);
+ if (rv != APR_SUCCESS) {
+ *s = NULL;
+ return rv;
+ }
apr_skiplist_set_compare(sl->index, indexing_comp, indexing_compk);
+ sl = *s;
return APR_SUCCESS;
}
@@ -270,7 +279,10 @@ APR_DECLARE(void) apr_skiplist_add_index
if (m) {
return; /* Index already there! */
}
- skiplisti_init(&ni, sl->pool);
+ if (skiplisti_init(&ni, sl->pool) != APR_SUCCESS) {
+ abort();
+ return;
+ }
apr_skiplist_set_compare(ni, comp, compk);
/* Build the new index... This can be expensive! */
m = apr_skiplist_insert(sl->index, ni);