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);