Merge pull request #59 from painless-security/jennifer/datastructures
authormrw42 <margaret@painless-security.com>
Thu, 3 May 2018 20:42:46 +0000 (16:42 -0400)
committerGitHub <noreply@github.com>
Thu, 3 May 2018 20:42:46 +0000 (16:42 -0400)
Replace fixed length arrays with dynamic lists

1  2 
common/tr_comm_encoders.c

@@@ -143,10 -143,10 +143,10 @@@ static json_t *tr_comm_memb_sources_to_
      goto cleanup;
  
    /* Iterate over all the memberships for this realm/comm pair that come from different origins */
-   memb = tr_comm_memb_iter_first(iter, first_memb);
-   while (memb) {
+   for (memb = tr_comm_memb_iter_first(iter, first_memb);
+        memb != NULL;
+        memb = tr_comm_memb_iter_next(iter)) {
      ARRAY_APPEND_OR_FAIL(jarray, tr_comm_memb_to_json(memb));
-     memb = tr_comm_memb_iter_next(iter);
    }
  
    /* success */
@@@ -171,28 -171,24 +171,29 @@@ static json_t *tr_comm_realms_to_json(T
    TR_COMM_MEMB *memb = NULL;
  
    iter = tr_comm_iter_new(NULL);
-   realm = tr_realm_iter_first(iter, ctable, comm_name);
+   realm = NULL;
  
    /* Do not display the full realm json here, only the name and info relevant to the community listing */
-   while(realm) {
+   for (realm = tr_realm_iter_first(iter, ctable, comm_name);
+        realm != NULL;
+        realm = tr_realm_iter_next(iter)) {
      if (realm->role == role) {
        realm_json = json_object();
        OBJECT_SET_OR_FAIL(realm_json, "realm",
                           tr_name_to_json_string(tr_realm_get_id(realm)));
 -      memb = tr_comm_table_find_idp_memb(ctable,
 -                                         tr_realm_get_id(realm),
 -                                         comm_name);
 +      memb = tr_comm_table_find_memb(ctable,
 +                                     tr_realm_get_id(realm),
 +                                     comm_name);
 +      if (memb == NULL) {
 +        /* This should not happen - there must be a matching membership if we
 +         * believed the realm was in the community in the first place! */
 +        goto cleanup;
 +      }
        OBJECT_SET_OR_FAIL(realm_json, "sources",
                           tr_comm_memb_sources_to_json(memb));
        json_array_append_new(jarray, realm_json);
        realm_json = NULL; /* so we don't free this twice during cleanup */
      }
-     realm = tr_realm_iter_next(iter);
    }
  
    /* Success - increment the reference count so return value survives */
@@@ -275,15 -271,15 +276,15 @@@ json_t *tr_comm_table_to_json(TR_COMM_T
      goto cleanup;
  
    /* Iterate over communities in the table */
-   comm = tr_comm_table_iter_first(iter, ctable);
-   while (comm) {
+   for (comm = tr_comm_table_iter_first(iter, ctable);
+        comm != NULL;
+        comm = tr_comm_table_iter_next(iter)) {
      comm_json = tr_comm_to_json(ctable, comm);
  
      if (comm_json == NULL)
        goto cleanup;
  
      json_array_append_new(ctable_json, comm_json);
-     comm = tr_comm_table_iter_next(iter);
    }
  
    /* succeeded - set the return value and increment the reference count */