On Thursday 02 October 2008 13:37:28 [EMAIL PROTECTED] wrote:

> Author: julianalbo
> Date: Thu Oct  2 13:37:27 2008
> New Revision: 31570
>
> Modified:
>    trunk/src/ops/io.ops
>
> Log:
> some fixes in the open opcode

> --- trunk/src/ops/io.ops      (original)
> +++ trunk/src/ops/io.ops      Thu Oct  2 13:37:27 2008

>  inline op open(out PMC, in STR) :filesys_open {
>      /* These char * need to go away soon */
> -    char * const path = string_to_cstring(interp, $2);
> -
> -    $1 = PIO_open(interp, NULL, path, "+<");
> -    string_cstring_free(path);
> -    if (!$1)
> -        $1 = pmc_new(interp, enum_class_Undef);
> +    if (STRING_IS_NULL($2)) {
> +        Parrot_ex_throw_from_c_args(interp, NULL,
> +            EXCEPTION_UNEXPECTED_NULL, "Invalid open");
> +    }
> +    else {
> +        char * const path = string_to_cstring(interp, $2);
> +
> +        $1 = PIO_open(interp, NULL, path, "+<");
> +
> +        string_cstring_free(path);
> +        PARROT_ASSERT(! PMC_IS_NULL($1));
> +    }

Can anything in the PIO_open() path throw an exception?  If so, these strings 
will leak.  (This makes me wonder *why* PIO_open() takes C strings.)

-- c

Reply via email to