Hi Folks,

                The test team reported a bug. Iam pasting the bug analysis. 
They seem to have found the problem as well with a temporary fix. However i 
they want our opinion on the fix. Please advice.

Using the following command:

slptool findsrvs service:test$ID "(foo=value1)"

this will generat the overflow in createPredicateParseTree doing an strncpy -
line 1656 slpd_predicate.c

When reading the comments around "operator" it appears it is using the operator
2 characters as a place to copy the attribute name.  The attribute name can be
very large.  This is the code:

      /* Finished with "operator" now - just use as temporary pointer to assist
with copying the
       * attribute name (lhs) and required value (rhs) into the node
       */
      operator = (*ppNode)->nodeBody.comparison.storage;
      strncpy(operator, lhs, lhs_len);
      operator[lhs_len] = '\0';

operator is now the pointer of "storage" in:

slpd_predicate.h

typedef struct __SLPDPredicateTreeNode
{
   SLPDPredicateTreeNodeType nodeType;
   struct __SLPDPredicateTreeNode *next;     /* next node in a combination */
   union {
      struct __SLPDPredicateLogicalBody
      {
         struct __SLPDPredicateTreeNode *first;
      } logical;
      struct __SLPDPredicateComparisonBody
      {
         size_t tag_len;
         char *tag_str;
         size_t value_len;
         char *value_str;
         char storage[2];
      } comparison;
   } nodeBody;
} SLPDPredicateTreeNode;

Copying of attributes onto 2char array fails though doesn't fail in older
builds so I am not sure if build options or strictness has changed.  

Since there were no cleanup routines if the pointer was malloced, I just
increased --> storage[200] and the testcase runs without fail and the area will
get freed with the structure.

Is this the best way out?

Regards,
Varun
------------------------------------------------------------------------------
Got Input?   Slashdot Needs You.
Take our quick survey online.  Come on, we don't ask for help often.
Plus, you'll get a chance to win $100 to spend on ThinkGeek.
http://p.sf.net/sfu/slashdot-survey
_______________________________________________
Openslp-devel mailing list
Openslp-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openslp-devel

Reply via email to