Memory and logging fixes from AXIS2C-1669
Applied patches-
xpath_internals_engine.c.patch
xpath_internals_parser.c.patch
xpath_streaming.c.patch
with some adjustments to compensate for previous changes.
diff --git a/axiom/src/xpath/xpath_internals_engine.c b/axiom/src/xpath/xpath_internals_engine.c
index 41ca3f1..a6555b3 100644
--- a/axiom/src/xpath/xpath_internals_engine.c
+++ b/axiom/src/xpath/xpath_internals_engine.c
@@ -503,7 +503,11 @@
for (j = 0; j < n_nodes[i]; j++)
{
res_node =(axiom_xpath_result_node_t *)axutil_array_list_get(arr[i], context->env, j);
- AXIS2_FREE(context->env->allocator, res_node);
+ if (res_node)
+ {
+ AXIS2_FREE(context->env->allocator, res_node);
+ }
+
}
axutil_array_list_free(arr[i], context->env);
@@ -576,9 +580,8 @@
if(op->op1 == AXIOM_XPATH_PARSE_END)
{
-#ifdef AXIOM_XPATH_DEBUG
- printf("Node test operator empty\n");
-#endif
+ AXIS2_LOG_ERROR(context->env->log, AXIS2_LOG_SI,
+ "Node test operator empty");
return AXIOM_XPATH_EVALUATION_ERROR;
}
@@ -594,9 +597,8 @@
/* Get the axis */
if(!node_test_op->par2)
{
-#ifdef AXIOM_XPATH_DEBUG
- printf("axis is NULL in the step operator\n");
-#endif
+ AXIS2_LOG_ERROR(context->env->log, AXIS2_LOG_SI,
+ "axis is NULL in the step operator");
return AXIOM_XPATH_EVALUATION_ERROR;
}
axis = *((axiom_xpath_axis_t *)node_test_op->par2);
@@ -657,11 +659,13 @@
{
if(*(axis2_bool_t *)(res->value))
{
+ AXIS2_FREE(context->env->allocator, res->value);
AXIS2_FREE(context->env->allocator, res);
return AXIS2_TRUE;
}
else
{
+ AXIS2_FREE(context->env->allocator, res->value);
AXIS2_FREE(context->env->allocator, res);
return AXIS2_FALSE;
}
@@ -742,10 +746,8 @@
if(!context->node && !context->attribute && !context->ns)
{
-#ifdef AXIOM_XPATH_DEBUG
- printf("Both context node and attribute are NULL.");
- printf(" May be a literal or a number.\n");
-#endif
+ AXIS2_LOG_ERROR(context->env->log, AXIS2_LOG_SI,
+ "Both context node and attribute are NULL. May be a literal or a number.");
return AXIS2_FALSE;
}
else if(context->node)
@@ -1012,9 +1014,8 @@
if(!func)
{
-#ifdef AXIOM_XPATH_DEBUG
- printf("Function %s not found\n", (char *)op->par1);
-#endif
+ AXIS2_LOG_ERROR(context->env->log, AXIS2_LOG_SI,
+ "Function %s not found", (char *)op->par1);
return AXIOM_XPATH_EVALUATION_ERROR;
}
diff --git a/axiom/src/xpath/xpath_internals_parser.c b/axiom/src/xpath/xpath_internals_parser.c
index e753680..f74375f 100755
--- a/axiom/src/xpath/xpath_internals_parser.c
+++ b/axiom/src/xpath/xpath_internals_parser.c
@@ -28,9 +28,7 @@
{
if(!expr || !expr->expr_str)
{
-#ifdef AXIOM_XPATH_DEBUG
- printf("Expression in NULL.\n");
-#endif
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Expression in NULL.");
return AXIS2_FAILURE;
}
@@ -49,9 +47,7 @@
}
else
{
-#ifdef AXIOM_XPATH_DEBUG
- printf("Expression successfully parsed\n");
-#endif
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Expression successfully parsed");
return AXIOM_XPATH_PARSE_SUCCESS;
}
@@ -74,11 +70,9 @@
if(op1 == AXIOM_XPATH_PARSE_ERROR)
{
-#ifdef AXIOM_XPATH_DEBUG
- printf(
- "Parse error: AndEpxr expected - %s\n",
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Parse error: AndEpxr expected - %s",
expr->expr_str + expr->expr_ptr);
-#endif
return AXIOM_XPATH_PARSE_ERROR;
}
@@ -94,11 +88,9 @@
if(op2 == AXIOM_XPATH_PARSE_ERROR)
{
-#ifdef AXIOM_XPATH_DEBUG
- printf(
- "Parse error: AndEpxr expected - %s\n",
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Parse error: AndEpxr expected - %s",
expr->expr_str + expr->expr_ptr);
-#endif
return AXIOM_XPATH_PARSE_ERROR;
}
@@ -128,11 +120,9 @@
if(op1 == AXIOM_XPATH_PARSE_ERROR)
{
-#ifdef AXIOM_XPATH_DEBUG
- printf(
- "Parse error: EqualityExpr expected - %s\n",
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Parse error: EqualityExpr expected - %s",
expr->expr_str + expr->expr_ptr);
-#endif
return AXIOM_XPATH_PARSE_ERROR;
}
@@ -148,11 +138,9 @@
if(op2 == AXIOM_XPATH_PARSE_ERROR)
{
-#ifdef AXIOM_XPATH_DEBUG
- printf(
- "Parse error: EqualityExpr expected - %s\n",
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Parse error: EqualityExpr expected - %s",
expr->expr_str + expr->expr_ptr);
-#endif
return AXIOM_XPATH_PARSE_ERROR;
}
@@ -182,11 +170,9 @@
if(op1 == AXIOM_XPATH_PARSE_ERROR)
{
-#ifdef AXIOM_XPATH_DEBUG
- printf(
- "Parse error: UnionExpr expected - %s\n",
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Parse error: UnionExpr expected - %s",
expr->expr_str + expr->expr_ptr);
-#endif
return AXIOM_XPATH_PARSE_ERROR;
}
@@ -201,11 +187,9 @@
if(op2 == AXIOM_XPATH_PARSE_ERROR)
{
-#ifdef AXIOM_XPATH_DEBUG
- printf(
- "Parse error: UnionExpr expected - %s\n",
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Parse error: UnionExpr expected - %s",
expr->expr_str + expr->expr_ptr);
-#endif
return AXIOM_XPATH_PARSE_ERROR;
}
@@ -235,11 +219,9 @@
if(op1 == AXIOM_XPATH_PARSE_ERROR)
{
-#ifdef AXIOM_XPATH_DEBUG
- printf(
- "Parse error: PathExpr expected - %s\n",
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Parse error: PathExpr expected - %s",
expr->expr_str + expr->expr_ptr);
-#endif
return AXIOM_XPATH_PARSE_ERROR;
}
@@ -254,11 +236,9 @@
if(op2 == AXIOM_XPATH_PARSE_ERROR)
{
-#ifdef AXIOM_XPATH_DEBUG
- printf(
- "Parse error: UnionExpr expected - %s\n",
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Parse error: UnionExpr expected - %s",
expr->expr_str + expr->expr_ptr);
-#endif
return AXIOM_XPATH_PARSE_ERROR;
}
@@ -306,22 +286,18 @@
}
else if(AXIOM_XPATH_CURRENT == '$')
{
-#ifdef AXIOM_XPATH_DEBUG
- printf(
- "Parse error: Variables are not supported, yet - %s\n",
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Parse error: Variables are not supported, yet - %s",
expr->expr_str + expr->expr_ptr);
-#endif
}
else
{
return axiom_xpath_compile_function_call(env, expr);
}
-#ifdef AXIOM_XPATH_DEBUG
- printf(
- "Parse error: Invalid Filter expression - %s\n",
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Parse error: Invalid Filter expression - %s",
expr->expr_str + expr->expr_ptr);
-#endif
return AXIOM_XPATH_PARSE_ERROR;
/* TODO: functions and variables */
@@ -339,11 +315,9 @@
if(op_filter == AXIOM_XPATH_PARSE_ERROR)
{
-#ifdef AXIOM_XPATH_DEBUG
- printf(
- "Parse error: FilterExpr expected - %s\n",
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Parse error: FilterExpr expected - %s",
expr->expr_str + expr->expr_ptr);
-#endif
return AXIOM_XPATH_PARSE_ERROR;
}
@@ -358,11 +332,9 @@
if(op_next == AXIOM_XPATH_PARSE_ERROR)
{
-#ifdef AXIOM_XPATH_DEBUG
- printf(
- "Parse error: RelativeLocation expected - %s\n",
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Parse error: RelativeLocation expected - %s",
expr->expr_str + expr->expr_ptr);
-#endif
return AXIOM_XPATH_PARSE_ERROR;
}
@@ -377,11 +349,9 @@
if(op_next == AXIOM_XPATH_PARSE_ERROR)
{
-#ifdef AXIOM_XPATH_DEBUG
- printf(
- "Parse error: RelativeLocation expected - %s\n",
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Parse error: RelativeLocation expected - %s",
expr->expr_str + expr->expr_ptr);
-#endif
return AXIOM_XPATH_PARSE_ERROR;
}
@@ -473,11 +443,9 @@
if(op1 == AXIOM_XPATH_PARSE_ERROR)
{
-#ifdef AXIOM_XPATH_DEBUG
- printf(
- "Parse error: RelativeLocation expected - %s\n",
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Parse error: RelativeLocation expected - %s",
expr->expr_str + expr->expr_ptr);
-#endif
return AXIOM_XPATH_PARSE_ERROR;
}
@@ -493,11 +461,9 @@
if(op1 == AXIOM_XPATH_PARSE_ERROR)
{
-#ifdef AXIOM_XPATH_DEBUG
- printf(
- "Parse error: RelativeLocation expected - %s\n",
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Parse error: RelativeLocation expected - %s",
expr->expr_str + expr->expr_ptr);
-#endif
return AXIOM_XPATH_PARSE_ERROR;
}
@@ -511,11 +477,9 @@
if(op1 == AXIOM_XPATH_PARSE_ERROR)
{
-#ifdef AXIOM_XPATH_DEBUG
- printf(
- "Parse error: RelativeLocation expected - %s\n",
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Parse error: RelativeLocation expected - %s",
expr->expr_str + expr->expr_ptr);
-#endif
return AXIOM_XPATH_PARSE_ERROR;
}
@@ -523,11 +487,9 @@
if(op1 == AXIOM_XPATH_PARSE_ERROR)
{
-#ifdef AXIOM_XPATH_DEBUG
- printf(
- "Parse error: RelativeLocation expected - %s\n",
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Parse error: RelativeLocation expected - %s",
expr->expr_str + expr->expr_ptr);
-#endif
return AXIOM_XPATH_PARSE_ERROR;
}
@@ -553,11 +515,9 @@
if(op_step == AXIOM_XPATH_PARSE_ERROR)
{
-#ifdef AXIOM_XPATH_DEBUG
- printf(
- "Parse error: Step expected - %s\n",
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Parse error: Step expected - %s",
expr->expr_str + expr->expr_ptr);
-#endif
return AXIOM_XPATH_PARSE_ERROR;
}
@@ -572,11 +532,9 @@
if(op_next == AXIOM_XPATH_PARSE_ERROR)
{
-#ifdef AXIOM_XPATH_DEBUG
- printf(
- "Parse error: RelativeLocation expected - %s\n",
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Parse error: RelativeLocation expected - %s",
expr->expr_str + expr->expr_ptr);
-#endif
return AXIOM_XPATH_PARSE_ERROR;
}
@@ -591,11 +549,9 @@
if(op_next == AXIOM_XPATH_PARSE_ERROR)
{
-#ifdef AXIOM_XPATH_DEBUG
- printf(
- "Parse error: RelativeLocation expected - %s\n",
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Parse error: RelativeLocation expected - %s",
expr->expr_str + expr->expr_ptr);
-#endif
return AXIOM_XPATH_PARSE_ERROR;
}
@@ -618,7 +574,7 @@
axiom_xpath_expression_t* expr)
{
int op_predicate = AXIOM_XPATH_PARSE_END;
- axiom_xpath_node_test_t *node_test;
+ axiom_xpath_node_test_t *node_test = NULL;
int temp_ptr;
axis2_char_t *name = NULL;
axiom_xpath_axis_t axis = AXIOM_XPATH_AXIS_NONE;
@@ -667,10 +623,8 @@
if(axis == AXIOM_XPATH_AXIS_NONE)
{
-#ifdef AXIOM_XPATH_DEBUG
- printf("Parse error: Invalid axis - %s\n", name);
-#endif
-
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Parse error: Invalid axis - %s", name);
return AXIOM_XPATH_PARSE_ERROR;
}
@@ -680,14 +634,13 @@
else
{
axis = AXIOM_XPATH_AXIS_CHILD;
-
expr->expr_ptr = temp_ptr;
}
+
}
else
{
axis = AXIOM_XPATH_AXIS_CHILD;
-
expr->expr_ptr = temp_ptr;
}
}
@@ -696,11 +649,9 @@
if(!node_test)
{
-#ifdef AXIOM_XPATH_DEBUG
- printf(
- "Parse error: NodeTest expected - %s\n",
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Parse error: NodeTest expected - %s",
expr->expr_str + expr->expr_ptr);
-#endif
return AXIOM_XPATH_PARSE_ERROR;
}
@@ -709,11 +660,9 @@
if(op_predicate == AXIOM_XPATH_PARSE_ERROR)
{
-#ifdef AXIOM_XPATH_DEBUG
- printf(
- "Parse error: Predicate expected - %s\n",
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Parse error: Predicate expected - %s",
expr->expr_str + expr->expr_ptr);
-#endif
AXIS2_FREE(env->allocator, node_test);
return AXIOM_XPATH_PARSE_ERROR;
@@ -750,11 +699,9 @@
if(!name)
{
-#ifdef AXIOM_XPATH_DEBUG
- printf(
- "Parse error: NCName expected - %s\n",
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Parse error: NCName expected - %s",
expr->expr_str + expr->expr_ptr);
-#endif
AXIS2_FREE(env->allocator, node_test);
@@ -784,16 +731,15 @@
if(axutil_strcmp(name, "text") == 0)
{
node_test->type = AXIOM_XPATH_NODE_TYPE_TEXT;
+ node_test->name = name;
}
AXIOM_XPATH_SKIP_WHITESPACES;
if(node_test->type == AXIOM_XPATH_NODE_TEST_NONE || AXIOM_XPATH_CURRENT != ')')
{
-#ifdef AXIOM_XPATH_DEBUG
- printf("Parse error: Invalid node type - %s\n", name);
-#endif
-
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Parse error: Invalid node type - %s", name);
AXIS2_FREE(env->allocator, node_test);
return NULL;
@@ -824,11 +770,9 @@
if(!node_test->name)
{
-#ifdef AXIOM_XPATH_DEBUG
- printf(
- "Parse error: NCName expected - %s\n",
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Parse error: NCName expected - %s",
expr->expr_str + expr->expr_ptr);
-#endif
AXIS2_FREE(env->allocator, node_test);
@@ -856,23 +800,18 @@
if(!name)
{
-#ifdef AXIOM_XPATH_DEBUG
- printf(
- "Parse error: NCName expected - %s\n",
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Parse error: NCName expected - %s",
expr->expr_str + expr->expr_ptr);
-#endif
return AXIOM_XPATH_PARSE_ERROR;
}
if(AXIOM_XPATH_CURRENT != '(')
{
-#ifdef AXIOM_XPATH_DEBUG
- printf(
- "Parse error: '(' expected - %s\n",
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Parse error: '(' expected - %s",
expr->expr_str + expr->expr_ptr);
-#endif
-
return AXIOM_XPATH_PARSE_ERROR;
}
@@ -887,12 +826,9 @@
if(AXIOM_XPATH_CURRENT != ')')
{
-#ifdef AXIOM_XPATH_DEBUG
- printf(
- "Parse error: ')' expected - %s\n",
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Parse error: ')' expected - %s",
expr->expr_str + expr->expr_ptr);
-#endif
-
return AXIOM_XPATH_PARSE_ERROR;
}
@@ -1036,7 +972,7 @@
lit[i] = '\0';
- return axutil_strdup(env, lit);
+ return lit;
}
@@ -1100,9 +1036,7 @@
}
else
{
-#ifdef AXIOM_XPATH_DEBUG
- printf("Unidentified axis name.\n");
-#endif
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Unidentified axis name.");
return AXIOM_XPATH_AXIS_NONE;
}
@@ -1135,11 +1069,9 @@
if(op1 == AXIOM_XPATH_PARSE_ERROR)
{
-#ifdef AXIOM_XPATH_DEBUG
- printf(
- "Parse error: EqualExpr expected - %s\n",
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Parse error: EqualExpr expected - %s",
expr->expr_str + expr->expr_ptr);
-#endif
return AXIOM_XPATH_PARSE_ERROR;
}
@@ -1148,11 +1080,9 @@
if(AXIOM_XPATH_CURRENT != ']')
{
-#ifdef AXIOM_XPATH_DEBUG
- printf(
- "Parse error: ] expected - %s\n",
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Parse error: ] expected - %s",
expr->expr_str + expr->expr_ptr);
-#endif
return AXIOM_XPATH_PARSE_ERROR;
}
@@ -1163,11 +1093,9 @@
if(op_next_predicate == AXIOM_XPATH_PARSE_ERROR)
{
-#ifdef AXIOM_XPATH_DEBUG
- printf(
- "Parse error: Predicate expected - %s\n",
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Parse error: Predicate expected - %s",
expr->expr_str + expr->expr_ptr);
-#endif
return AXIOM_XPATH_PARSE_ERROR;
}
diff --git a/axiom/src/xpath/xpath_streaming.c b/axiom/src/xpath/xpath_streaming.c
index 0488d5f..25ed4d1 100755
--- a/axiom/src/xpath/xpath_streaming.c
+++ b/axiom/src/xpath/xpath_streaming.c
@@ -74,9 +74,7 @@
return axiom_xpath_streaming_check_predicate(env, expr, op_p);
default:
-#ifdef AXIOM_XPATH_DEBUG
- printf("Unidentified operation.\n");
-#endif
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Unidentified operation.");
return AXIOM_XPATH_STREAMING_NOT_SUPPORTED;
}
@@ -112,9 +110,7 @@
if(!op->par2)
{
-#ifdef AXIOM_XPATH_DEBUG
- printf("axis is NULL in the step operator\n");
-#endif
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "axis is NULL in the step operator");
return AXIOM_XPATH_STREAMING_NOT_SUPPORTED;
}