> H.Merijn Brand wrote:
> 
> I am preparing HP-UX depots, and Inline::C wasn't being nice to 
me:

> Inline-0.45
> 
> t/01usages.t .. defined(%hash) is deprecated at blib/lib/Inline.pm 
> (autosplit into
>         blib/lib/auto/Inline/check_config_file.al) line 671 (#1)
>     (D deprecated) defined() is not usually useful on hashes 
because it
>     checks for an undefined scalar value.  If you want to see if 
the 
> hash
>     is empty, just use if (%hash) { # not empty } for example.
> 
>         (Maybe you should just omit the defined()?)
> 
> but all tests pass.

Yes - Nicholas Clark submitted a bug report about this, and it was fixed 
for 0.46

> Inline-0.46
> 
> t/06parseregexp.t .... Subroutine Inline::C::get_parser redefined 
at 
> ../blib/lib/Inline.pm line 312 (#1)
>     (W redefine) You redefined a subroutine.  To suppress this 
warning, 
> say
> 
>         {
>         no warnings 'redefine';
>         eval "sub name { ... }";
>         }
> 

The above warnings come about as a result of changes to 
Inline::_push_overrides().
The warnings are suppressed in later releases (including 0.46_01) but 
were deliberately left in place for 0.46 as a troubleshooting aid - ie 
in case there was some problem with those changes made to 
Inline::_push_overrides().

> t/08taint.t .......... In Inline::env_untaint() : Blindly 
untainting 
> tainted fields in %ENV.
> In Inline::env_untaint() : Blindly untainting tainted fields in 
%ENV.
> In Inline::obj_untaint() : Blindly untainting tainted fields in 
Inline 
> object.

These warnings are placed there deliberately to draw attention to the 
fact that Inline *blindly* performs some untainting when running in 
taint mode. I've no plans to remove them, as I think it's 
important that attention be drawn to this ill-advised manner in which 
Inline performs untainting. (The warnings *can* be suppressed if so 
desired - though not for the tests.)

> Uncaught exception from user code:

> /bin/sh: gcc:  not found.

Some of the blind untainting that Inline does is:

#######################
    $ENV{PATH} = $^O eq 'MSWin32' ?
                 join ';', grep {not /^\./ and -d $_
                                  } split /;/, $ENV{PATH}
                 :
                 join ':', grep {not /^\./ and -d $_ and
                                      not ((stat($_))[2] & 0022)
                                  } split /:/, $ENV{PATH};
########################

And I think that's where the directory containing gcc gets removed 
from the path.

I speculate that if the "not ((stat($_))[2] & 0022)" 
condition is removed (as is the case wrt MS windows) then the tests 
would pass. You might be able to confirm that for me as I don't have 
access to a box that presents that failure.

Suggestions on a best remedy also welcome. (IMHO, complete removal of 
untainting capability would be the best - but you'll need to get 
Ingy to sanction that before I'll do it.)

Cheers,
Rob

Reply via email to