In line 1763 of unpack-tree.c we have a condition on the current tree
        if (current) {
                ...
Within this block of code we can assume current to be non NULL, hence
the code after the statement in line 1796:
        if (current)
                return ...

cannot be reached.

current/newtree/oldtree are used in the
call to reject_merge() *only* for their path aka ce->name, and they
all point at the same name (there is no rename funkies here); hence
"all other failures" code path should just rely on current always
being present.

All referenced lines have been introduced in the same commit
076b0adc (2006-07-30, read-tree: move merge functions to the library),
which was just moving the code around.
The outer condition on the current tree (now in line 1763) was introduced
in c859600954df4c292e, June 2005, [PATCH] read-tree: save more user hassles 
during fast-forward.
The inner condition on the current tree was introduced in
ee6566e8d70da682ac4926d, Sept. 2005, [PATCH] Rewrite read-tree

This issue was found by coverity, Id:290002

Signed-off-by: Stefan Beller <stefanbel...@gmail.com>
Helped-by: Junio C Hamano <gits...@pobox.com>
---
 unpack-trees.c | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)

Did I understand you right, when changing to this one?

diff --git a/unpack-trees.c b/unpack-trees.c
index c6aa8fb..42ee84e 100644
--- a/unpack-trees.c
+++ b/unpack-trees.c
@@ -1789,15 +1789,11 @@ int twoway_merge(const struct cache_entry * const *src,
                        /* 20 or 21 */
                        return merged_entry(newtree, current, o);
                }
+               else if (o->gently) {
+                       return  -1 ;
+               }
                else {
-                       /* all other failures */
-                       if (oldtree)
-                               return o->gently ? -1 : reject_merge(oldtree, 
o);
-                       if (current)
-                               return o->gently ? -1 : reject_merge(current, 
o);
-                       if (newtree)
-                               return o->gently ? -1 : reject_merge(newtree, 
o);
-                       return -1;
+                       reject_merge(current, o);
                }
        }
        else if (newtree) {
-- 
2.1.0.rc2

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to