Assert logic inverted in chfactory.c Topic is solved

Report here problems in any of ChibiOS components. This forum is NOT for support.
User avatar
FXCoder
Posts: 384
Joined: Sun Jun 12, 2016 4:10 am
Location: Sydney, Australia
Has thanked: 180 times
Been thanked: 130 times

Assert logic inverted in chfactory.c  Topic is solved

Postby FXCoder » Wed Nov 08, 2017 5:05 am

In function dyn_list_find in chfactory.c the assert logic looks to be inverted for "invalid reference passed".

Code: Select all

static dyn_element_t *dyn_list_find(const char *name, dyn_list_t *dlp) {
  dyn_element_t *p = dlp->next;

  while (p != (dyn_element_t *)dlp) {
    if (strncmp(p->name, name, CH_CFG_FACTORY_MAX_NAMES_LENGTH) == 0) {
      return p;
    }
    p = p->next;
  }

  chDbgAssert(true, "invalid reference passed");

  return NULL;
}


Should be...

Code: Select all

static dyn_element_t *dyn_list_find(const char *name, dyn_list_t *dlp) {
  dyn_element_t *p = dlp->next;

  while (p != (dyn_element_t *)dlp) {
    if (strncmp(p->name, name, CH_CFG_FACTORY_MAX_NAMES_LENGTH) == 0) {
      return p;
    }
    p = p->next;
  }

  chDbgAssert(false, "invalid reference passed");

  return NULL;
}

User avatar
Giovanni
Site Admin
Posts: 14455
Joined: Wed May 27, 2009 8:48 am
Location: Salerno, Italy
Has thanked: 1076 times
Been thanked: 922 times
Contact:

Re: Assert logic inverted in chfactory.c

Postby Giovanni » Wed Nov 08, 2017 1:50 pm

Fixed thanks.

Giovanni

User avatar
FXCoder
Posts: 384
Joined: Sun Jun 12, 2016 4:10 am
Location: Sydney, Australia
Has thanked: 180 times
Been thanked: 130 times

Re: Assert logic inverted in chfactory.c

Postby FXCoder » Sun Nov 26, 2017 11:28 pm

It turns out that the assert should not be there at all.
In chfactory.c the dyn_create_object_heap(...) function relies on dyn_list_find(...) returning NULL when a name does not already exist.
Thus NULL is a normal/expected result from dyn_list_find(...).

Code: Select all

Index: chfactory.c
===================================================================
--- chfactory.c   (revision 11077)
+++ chfactory.c   (working copy)
@@ -98,8 +98,6 @@
     p = p->next;
   }
 
-  chDbgAssert(false, "invalid reference passed");
-
   return NULL;
 }
 

User avatar
Giovanni
Site Admin
Posts: 14455
Joined: Wed May 27, 2009 8:48 am
Location: Salerno, Italy
Has thanked: 1076 times
Been thanked: 922 times
Contact:

Re: Assert logic inverted in chfactory.c

Postby Giovanni » Mon Nov 27, 2017 8:29 am

Fixed thanks.

Giovanni


Return to “Bug Reports”

Who is online

Users browsing this forum: No registered users and 18 guests