projects
/
platform
/
upstream
/
ltrace.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix bug in `expr_clone`
[platform/upstream/ltrace.git]
/
expr.c
diff --git
a/expr.c
b/expr.c
index
4059a32
..
3220509
100644
(file)
--- a/
expr.c
+++ b/
expr.c
@@
-229,21
+229,25
@@
expr_clone(struct expr_node *retp, const struct expr_node *node)
node->u.call.own_rhs) < 0)
return -1;
retp->u.call.rhs = nrhs;
node->u.call.own_rhs) < 0)
return -1;
retp->u.call.rhs = nrhs;
- /* Fall through. */
- case EXPR_OP_UP:
- case EXPR_OP_CALL1:
if (expr_alloc_and_clone(&nlhs, node->lhs, node->own_lhs) < 0) {
if (expr_alloc_and_clone(&nlhs, node->lhs, node->own_lhs) < 0) {
- if (node->kind == EXPR_OP_CALL2
- && node->u.call.own_rhs) {
+ if (node->u.call.own_rhs) {
expr_destroy(nrhs);
free(nrhs);
expr_destroy(nrhs);
free(nrhs);
- return -1;
}
}
+ return -1;
}
retp->lhs = nlhs;
return 0;
}
retp->lhs = nlhs;
return 0;
+
+ case EXPR_OP_UP:
+ case EXPR_OP_CALL1:
+ if (expr_alloc_and_clone(&nlhs, node->lhs, node->own_lhs) < 0)
+ return -1;
+
+ retp->lhs = nlhs;
+ return 0;
}
assert(!"Invalid value of node kind");
}
assert(!"Invalid value of node kind");