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 14:12:19 UTC

svn commit: r1887486 - in /apr/apr/branches/1.7.x: ./ tables/apr_skiplist.c

Author: ylavic
Date: Thu Mar 11 14:12:19 2021
New Revision: 1887486

URL: http://svn.apache.org/viewvc?rev=1887486&view=rev
Log:
Merge r1887481, r1887482 from trunk:

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.


Follow up to r1887481: fix skiplisti_init() returned pointer.


Submitted by: ylavic

Modified:
    apr/apr/branches/1.7.x/   (props changed)
    apr/apr/branches/1.7.x/tables/apr_skiplist.c

Propchange: apr/apr/branches/1.7.x/
------------------------------------------------------------------------------
  Merged /apr/apr/trunk:r1887481-1887482

Modified: apr/apr/branches/1.7.x/tables/apr_skiplist.c
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.7.x/tables/apr_skiplist.c?rev=1887486&r1=1887485&r2=1887486&view=diff
==============================================================================
--- apr/apr/branches/1.7.x/tables/apr_skiplist.c (original)
+++ apr/apr/branches/1.7.x/tables/apr_skiplist.c Thu Mar 11 14:12:19 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);
+    *s = sl;
     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);