What is the meaning of following paragraph in the context of ISZERO & mishandled exception. I found an article at: enter link description here It says that:
Detecting a mishandled exception is straightforward. Recall that if a callee yields an exception, it pushes 0 to the caller’s operand stack. Thus we only need to check if the contract executes the ISZERO instruction (which checks if the top value of the stack is 0) after every call. If it does not, any exception occurred in the callee is ignored. Thus, we flags such contract as a contract that mishandles exceptions.
I have broken down it into small sentences and specified what I understood from it. Text uses pronouns which is making it difficult for me to understand it.
"1. Detecting a mishandled exception is straightforward. Recall that if a callee yields an exception, it pushes 0 to the caller's operand stack.”
Means that if callee is not handling exception, it pushes 0 onto the caller’s operand stack. But can the callee access caller’s stack if they are in different contracts? Also is this not a security violation?
“2. Thus we only need to check if the contract executes the ISZERO instruction (which checks if the top value of the stack is 0) after every call.”
Which contract? caller or callee?
“3. If it does not, any exception occurred in the callee is ignored.”
I think it depends upon the transfer mechanism ‘call’, ‘send’ or ‘transfer’. If the caller is using ‘transfer’, then the exception if it occurs in the callee’s contract would be propagated to the caller’s contract. Caller can’t ignore it. I am not able to understand it clearly.
"Thus, we flag such contract as a contract that mishandles exceptions."
Some body please guide me
Zulfi.