delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2006/03/16/11:19:27

X-Spam-Check-By: sourceware.org
From: "Dave Korn" <dave DOT korn AT artimi DOT com>
To: "'cygwin list'" <cygwin AT cygwin DOT com>
Subject: RE: Bug in dlopen() (or following) code in Cygwin1.dll v 1.5.19-4
Date: Thu, 16 Mar 2006 16:19:14 -0000
Message-ID: <002201c64915$5d9f2710$a501a8c0@CAM.ARTIMI.COM>
MIME-Version: 1.0
In-Reply-To: <441988A6.7010609@huarp.harvard.edu>
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Unsubscribe: <mailto:cygwin-unsubscribe-archive-cygwin=delorie DOT com AT cygwin DOT com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com

On 16 March 2006 15:48, Norton Allen wrote:


>>> * thread.cc (verifyable_object_isvalid): check for
>>> NULL object or reference
>> 
>> The "efault.faulted()" two lines above your change is supposed to catch
>> NULL dereferences.
> 
> Whoa! This looks like voodoo action-at-a-distance. 

  Exception handling does that :)  See also setjmp/longjmp.

> efault.faulted()
> doesn't even get passed the pointer to know whether or not it's
> NULL. 

  errno doesn't get passed any pointers, but it still often ends up returning
'EINVAL' when the pointer you pass to a routine is null....

> Although efault.faulted() is supposed to catch the NULL dereferences,

  Nope, the exception handling is supposed to catch the NULL deref, and set an
error code which is then returned by efault.faulted.

  Take a /look/ at the source for myfault::faulted in cygtls.h, it calls out
to _cygtls::setup_fault, which calls _sjfault, which appears to be a q'n'd
hacked-up version of setjmp in a context where it's going to get called back
by an SEH handler.  So IIUIC, calling 'efault.faulted' will catch any
exception that happens from the point of the call until the point where the
efault object goes out of scope and gets destructed and will cause execution
to jump back to the if... clause.




    cheers,
      DaveK
-- 
Can't think of a witty .sigline today....


--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019