Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Re^2: utf8::upgrade and $1

by creamygoodness (Curate)
on Aug 31, 2009 at 05:25 UTC ( #792291=note: print w/ replies, xml ) Need Help??


in reply to Re: utf8::upgrade and $1
in thread utf8::upgrade and $1

I agree, the fix is not finished yet. I suspect that the patch works because the rest of the function "mistakes" the private string for a public string, so to speak, and that the test suite passes because either the function is never invoked on a capture variable or because no variable with PERL_MAGIC_sv passes through that function which lacks a private string. Note that the patch doesn't affect all magic variables, just those with PERL_MAGIC_sv -- which is only one type among many, despite the name. From perl.h:

#define PERL_MAGIC_sv '\0' /* Special scalar variable */ #define PERL_MAGIC_overload 'A' /* %OVERLOAD hash */ #define PERL_MAGIC_overload_elem 'a' /* %OVERLOAD hash element */ ...

Nevertheless, it's useful to have isolated the problematic section of code.

I managed to hunt down some prior discussion: http://rt.perl.org/rt3//Public/Bug/Display.html?id=60472.

Nicholas Clark had this to say:

POK shouldn't be on for something with GMG. It should only be pPOK, so that any calls to SvPV() etc call into Perl_sv2pv_flags(), and the get magic is triggered.

(GMG is "get magic".) Based on Nick's post, I think we can confirm that the fact that $1 leaves this function with the SVf_POK flag on is a bug.

demerphq had this to say with regards to why $1 doesn't carry the READONLY flag:

Turns out that this is deliberate, as some pluggable regex engines allow for a writable $1.
Aevar patched this in quite some time ago.
So I think at this points its a bug in Encode, but I couldn't figure out how to fix it in the time I had available.

Perhaps we have tracked down this "bug in Encode".

Incidentally, this bug is a regession in Perl 5.10. Perl 5.8.8 doesn't have this problem.


Comment on Re^2: utf8::upgrade and $1
Select or Download Code
Re^3: utf8::upgrade and $1
by ikegami (Pope) on Aug 31, 2009 at 18:06 UTC

    I think we can confirm that the fact that $1 leaves this function with the SVf_POK flag on is a bug.

    Yes.

    demerphq had this to say with regards to why $1 doesn't carry the READONLY flag:

    Not a problem for my solution. The setter called via mg_set after the upgrade will throw an error if appropriate.

    Turns out that this is deliberate, as some pluggable regex engines allow for a writable $1.

    That means that upgrading $1 might have no effect or might upgrade the entire source string in those engines, but I don't see that as a problem. Side-effects are expectedintended when playing with magical variables.

    Incidentally, this bug is a regession in Perl 5.10. Perl 5.8.8 doesn't have this problem.

    That would explain the presence of sv_utf8_upgrade_nomg.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://792291]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (17)
As of 2015-07-02 17:40 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (44 votes), past polls