On Apr 20, 2018, at 10:57 AM, Martin Mathieson via Wireshark-dev 
<wireshark-dev@wireshark.org> wrote:

> I'm getting the error below:
> 
> Looking at the first one, my compiler doesn't seem to realise that 
> compute_offset()  will throw an exception rather than return a number without 
> setting *offset_ptr

That's because it *won't* throw an exception.  It'll return either "no error" 
or an exception for its caller to deal with.

What the compiler you're using doesn't realize is that nobody who calls 
compute_offset(), or calls something that calls compute_offset(), or 
{...(transitive closure of calls) compute_offset()} uses *offset_ptr if the 
return value is non-zero.  Not all compilers' data flow analysis appears to 
handle that.

> But when I look at e.g. BoundsError (which may be returned without setting 
> *offset_ptr), it is #defined as 1 in epan/exceptions.h
> 
> Surely the returns in compute_offset() should be THROW() calls instead?

No, because the routines's purpose is to check and, if the offset doesn't 
exist, return an exception to its caller.  Its caller might throw it or just 
pass it to its caller.  Some caller up the call chain, such as 
tvb_bytes_exist(), might just want to return a "these bytes are/aren't 
available in the captured data" indication rather than throwing an exception.

Dario Lombardo should have fixed that in 
1a9f3b8f6d65b50c0eaa78bde29ca50708900178.
___________________________________________________________________________
Sent via:    Wireshark-dev mailing list <wireshark-dev@wireshark.org>
Archives:    https://www.wireshark.org/lists/wireshark-dev
Unsubscribe: https://www.wireshark.org/mailman/options/wireshark-dev
             mailto:wireshark-dev-requ...@wireshark.org?subject=unsubscribe

Reply via email to