The only way one could get ExecuteException and returnValue 0 is if you manually set it to be a failure. Here's the only part of DefaultExecutor where ExecuteException is made:

```
if(this.isFailure(exitValue)) {
throw new ExecuteException("Process exited with an error: " + exitValue, exitValue);
}
```

And in our code, we don't allow setting value 0 as failureValue. So unless we're afraid that someone will use reflection to set value 0 as failure, there's no point in that code. Most likely the reason that code was put there was because of not reading the DefaultExecutor implementation and just making super-defensive code.