[html-formfu] Re: Patch: Catalyst::Controller::HTML::FormFu, Modification of a read-only value attempted at line 178

Ronald J Kimball rkimball+formfu at pangeamedia.com
Wed Jan 13 14:59:28 GMT 2010


Oskari 'Okko' Ojala wrote:
> Anyone had a look in this patch?
> 
> On Mon, 4 Jan 2010, Oskari 'Okko' Ojala wrote:
> 
>> The attached patch is against r1657 of 
>> http://html-formfu.googlecode.com/svn/trunk/Catalyst-Controller-HTML-FormFu/lib/Catalyst/Controller/HTML/FormFu.pm 
>>
>>
>> to fix fatal error message
>>
>> "Modification of a read-only value attempted at 
>> ..../perl5/lib/perl5/Catalyst/Controller/HTML/FormFu.pm line 178."
>>
>>
>> Unfortunately I don't know what is the exact chain that causes a 
>> read-only value to arrive there, but I'm using the most recent FormFu 
>> inside Catalyst. If you eval
>>
>> for ("foo") { s/foo/bar/; print }
>>
>> you can probably see a simplified case of what happens there without 
>> the patch. I hope you accept the patch without a list of detailed 
>> steps to reproduce the bug. ;-)
> 

The plain_value callback passed to config_callback is /supposed/ to 
modify $_ in place.  Observe that the existing code does not return the 
modified string from the callback:

   if ( $config->{config_callback} ) {
     $form->config_callback( {
           plain_value => sub {
             return if !defined $_;
             s{__uri_for\((.+?)\)__}
              { $self->{c}->uri_for( split( '\s*,\s*', $1 ) ) }eg;
             s{__path_to\(\s*(.+?)\s*\)__}
              { $self->{c}->path_to( split( '\s*,\s*', $1 ) ) }eg;
             s{__config\((.+?)\)__}
              { $self->{c}->config->{$1}  }eg;
             }
       } );

     weaken( $self->{c} )
       if !isweak( $self->{c} );
   }

So, although your proposed patch would avoid the fatal error you're 
encountering, unfortunately it would completely break this feature.

I'm afraid you will need to figure out how a read-only value is getting 
passed into this subroutine.  If you can provide any more details, that 
would be helpful.

Ronald



More information about the HTML-FormFu mailing list