Uploaded image for project: 'Axis2-C'
  1. Axis2-C
  2. AXIS2C-1602

memory leaks in xpath

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 1.6.0
    • Fix Version/s: 1.7.0
    • Component/s: xml/om
    • Environment:
      Windows XP, MSVS 2008

      Description

      xpath.c :: axiom_xpath_free_expression doesn't free the parameters of the operations. At least the following code is needed:

      if (xpath_expr->operations)
      {
      num = axutil_array_list_size(xpath_expr->operations, env);
      for (i=0; i<num; i++) {
      op = (axiom_xpath_operation_t *) axutil_array_list_get(xpath_expr->operations, env, i);
      if (op->par1)

      { node_test = (axiom_xpath_node_test_t *)op->par1; if (node_test->prefix) AXIS2_FREE(env->allocator, node_test->prefix); if (node_test->name) AXIS2_FREE(env->allocator, node_test->name); if (node_test->lit) AXIS2_FREE(env->allocator, node_test->lit); AXIS2_FREE(env->allocator, op->par1); }

      if (op->par2) AXIS2_FREE(env->allocator, op->par2);
      AXIS2_FREE(env->allocator, op);
      }
      axutil_array_list_free(xpath_expr->operations, env);
      xpath_expr->operations = NULL;
      }

      ------------------

      xpath.c :: axiom_xpath_free_result doesn't free the nodes from the result array list. At least the following is needed:

      if (result->nodes)
      {
      num = axutil_array_list_size(result->nodes, env);
      for (i=0; i<num; i++)

      { node = (axiom_xpath_result_node_t *) axutil_array_list_get(result->nodes, env, i); AXIS2_FREE(context->env->allocator, node); }

      axutil_array_list_free(result->nodes, env);
      }

      ------------------

      xpath_internals_parser.c :: A strdup of a name is left unfreed in axiom_xpath_compile_step in the else clause.

      name = axiom_xpath_compile_ncname(env, expr);

      if (name)
      {
      AXIOM_XPATH_SKIP_WHITESPACES;

      /* An axis */
      if (AXIOM_XPATH_CURRENT == ':' && AXIOM_XPATH_NEXT(1) == ':')

      { [..snip..] }

      else

      { AXIS2_FREE(env->allocator, name); <----- NEEDED axis = AXIOM_XPATH_AXIS_CHILD; expr->expr_ptr = temp_ptr; }

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                billblough Bill Blough
                Reporter:
                drstine Daniel Stine
              • Votes:
                0 Vote for this issue
                Watchers:
                2 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: