The fix seems to work, but I remember finding a similar issue at Xmas and
fixing it then.
I shall put this into svn and everyone should test more to make sure this
doesn't just
pull the rug out of another corner.
Matt Richards wrote:
> Greetings,
>
> I think I hit upon the perfect circumstance to bust the hash table in
> GetVariable (vars.c). I believe that the hash table is not going far enough
> before reseting the increment as I end up in an infinite loop. See the
> comments "//" below:
>
> Debug("GetVariable(%s,%s): using scope '%s' for variable
> '%s'\n",scopeid,vlval,ptr->scope,vlval);
>
> if (CompareVariable(vlval,ptr->hashtable[slot]) != 0)
> {
> /* Recover from previous hash collision */
>
> while (true)
> {
> i++;
>
> if (i >= CF_HASHTABLESIZE-1)
>
> // I think this should be (i >= CF_HASHTABLESIZE). The testcase I have seems
> to have a value in the last slot of
> // the hash table, which makes the loop never end.
> //
> //i:4965 slot:4968
> //i:4966 slot:4968
> //i:4967 slot:4968
> //i:4968 slot:4968
> //i:1 slot:4968
> //i:2 slot:4968
> //...
> //i:4967 slot:4968
> //i:4968 slot:4968
> //i:1 slot:4968
> //i:2 slot:4968
> //...
> // rinse, lather, repeat
>
> {
> i = 0;
> }
>
> if (CompareVariable(vlval,ptr->hashtable[i]) == 0)
> {
> found = true;
> break;
> }
>
> /* Removed autolookup in Unix environment variables -
> implement as getenv() fn instead */
>
> if (i == slot)
> {
> found = false;
> break;
> }
> }
>
> if (!found)
> {
> Debug("No such variable found %s.%s\n",scope,lval);
> *returnv = lval;
> *rtype = CF_SCALAR;
> return cf_notype;
> }
> }
>
>
> _______________________________________________
> Help-cfengine mailing list
> [email protected]
> https://cfengine.org/mailman/listinfo/help-cfengine
--
Mark Burgess
-------------------------------------------------
Professor of Network and System Administration
Oslo University College, Norway
Personal Web: http://www.iu.hio.no/~mark
Office Telf : +47 22453272
-------------------------------------------------
_______________________________________________
Help-cfengine mailing list
[email protected]
https://cfengine.org/mailman/listinfo/help-cfengine