Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: Request Tracker: Devel

Re: [Rt-commit] rt branch, 4.0/dashboard-chart-with-umlauts, created. rt-4.0.1-298-gc6fb9f5

 

 

Request Tracker devel RSS feed   Index | Next | Previous | View Threaded


ruz at bestpractical

Aug 8, 2011, 10:13 AM

Post #1 of 2 (363 views)
Permalink
Re: [Rt-commit] rt branch, 4.0/dashboard-chart-with-umlauts, created. rt-4.0.1-298-gc6fb9f5

Regards, Ruslan. From phone.
08.08.2011 14:01 пользователь "? sunnavy" <sunnavy [at] bestpractical>
написал:
>
> The branch, 4.0/dashboard-chart-with-umlauts has been created
> at c6fb9f54c37142df0089145c12ab4feab52d7d27 (commit)
>
> - Log -----------------------------------------------------------------
> commit c0ec1787729093b2064a36c9ef5cce5e84b763d5
> Author: sunnavy <sunnavy [at] bestpractical>
> Date: Mon Aug 8 17:31:41 2011 +0800
>
> turn off utf8 as uri string is utf8 encoded, see also #18104
>
> diff --git a/lib/RT/Dashboard/Mailer.pm b/lib/RT/Dashboard/Mailer.pm
> index f6b1685..ae10d21 100644
> --- a/lib/RT/Dashboard/Mailer.pm
> +++ b/lib/RT/Dashboard/Mailer.pm
> @@ -476,7 +476,9 @@ sub BuildEmail {
> }
>
> sub GetResource {
> - my $uri = URI->new(shift);
> + my $string = shift;
> + Encode::_utf8_off($string);
> + my $uri = URI->new($string);

Shouldn't uri be escaped and contain only ASCII? I see this masking real
issue.

> my ($content, $filename, $mimetype, $encoding);
>
> $RT::Logger->debug("Getting resource $uri");
>
> commit c6fb9f54c37142df0089145c12ab4feab52d7d27
> Author: sunnavy <sunnavy [at] bestpractical>
> Date: Mon Aug 8 17:31:58 2011 +0800
>
> test for dashboard chart with umlauts
>
> diff --git a/t/mail/dashboard-chart-with-umlauts.t
b/t/mail/dashboard-chart-with-umlauts.t
> new file mode 100644
> index 0000000..cfde407
> --- /dev/null
> +++ b/t/mail/dashboard-chart-with-umlauts.t
> @@ -0,0 +1,88 @@
> +use strict;
> +use warnings;
> +
> +use RT::Test tests => 19;
> +use RT::Dashboard::Mailer;
> +use Encode;
> +
> +my $root = RT::Test->load_or_create_user( Name => 'root' );
> +
> +my ( $baseurl, $m ) = RT::Test->started_ok;
> +ok( $m->login, 'logged in' );
> +
> +RT::Test->create_ticket(
> + Queue => 'General',
> + Subject => decode_utf8('test äöü'),
> +);
> +
> +my $query = "Subject LIKE 'test äöü'";
> +
> +$m->get_ok(q{/Search/Chart.html?Query=Subject LIKE 'test äöü'});
> +$m->submit_form(
> + form_name => 'SaveSearch',
> + fields => {
> + SavedSearchDescription => 'chart foo',
> + SavedSearchOwner => 'RT::User-' . $root->id,
> + },
> + button => 'SavedSearchSave',
> +);
> +
> +# first, create and populate a dashboard
> +$m->get_ok('/Dashboards/Modify.html?Create=1');
> +$m->form_name('ModifyDashboard');
> +$m->field( 'Name' => 'dashboard foo' );
> +$m->click_button( value => 'Create' );
> +
> +$m->follow_link_ok( { text => 'Content' } );
> +my $form = $m->form_name('Dashboard-Searches-body');
> +my @input = $form->find_input('Searches-body-Available');
> +my ($dashboards_component) =
> + map { ( $_->possible_values )[1] }
> + grep { ( $_->value_names )[1] =~ /^Chart/ } @input;
> +$form->value( 'Searches-body-Available' => $dashboards_component );
> +$m->click_button( name => 'add' );
> +$m->content_contains('Dashboard updated');
> +
> +$m->follow_link_ok( { text => 'Subscription' } );
> +$m->form_name('SubscribeDashboard');
> +$m->field( 'Frequency' => 'daily' );
> +$m->field( 'Hour' => '06:00' );
> +$m->click_button( name => 'Save' );
> +$m->content_contains('Subscribed to dashboard dashboard foo');
> +
> +$m->follow_link_ok( { text => 'Show' } );
> +my ($src) = $m->content =~ qr{src="(/Search/Chart\?.*?)"};
> +ok( $src, 'have chart image' );
> +my $c = $m->get($src);
> +my $image = $c->content;
> +
> +RT::Dashboard::Mailer->MailDashboards( All => 1 );
> +
> +my @mails = RT::Test->fetch_caught_mails;
> +is @mails, 1, "got a dashboard mail";
> +
> +# can't use parse_mail here is because it deletes all attachments
> +# before we can call bodyhandle :/
> +use RT::EmailParser;
> +my $parser = RT::EmailParser->new;
> +$parser->ParseMIMEEntityFromScalar( $mails[0] );
> +my $mail = $parser->ParseMIMEEntityFromScalar( $mails[0] );
> +like(
> + $mail->head->get('Subject'),
> + qr/Daily Dashboard: dashboard foo/,
> + 'mail subject'
> +);
> +
> +my ($mail_image) = grep { $_->mime_type eq 'image/png' } $mail->parts;
> +ok( $mail_image, 'mail contains image attachment' );
> +
> +my $handle = $mail_image->bodyhandle;
> +
> +my $mail_image_data = '';
> +if ( my $io = $handle->open('r') ) {
> + while ( defined( $_ = $io->getline ) ) { $mail_image_data .= $_ }
> + $io->close;
> +}
> +
> +is( $mail_image_data, $image, 'image in mail is the same one in web' );
> +
>
> -----------------------------------------------------------------------
>
> _______________________________________________
> Rt-commit mailing list
> Rt-commit [at] lists
> http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-commit
>


sunnavy at bestpractical

Aug 8, 2011, 10:20 PM

Post #2 of 2 (348 views)
Permalink
Re: [Rt-commit] rt branch, 4.0/dashboard-chart-with-umlauts, created. rt-4.0.1-298-gc6fb9f5 [In reply to]

On 11-08-08 21:13, Ruslan Zakirov wrote:
> Regards, Ruslan. From phone.
> 08.08.2011 14:01 пользователь "? sunnavy" <sunnavy [at] bestpractical>
> написал:
> >
> > The branch, 4.0/dashboard-chart-with-umlauts has been created
> > at c6fb9f54c37142df0089145c12ab4feab52d7d27 (commit)
> >
> > - Log -----------------------------------------------------------------
> > commit c0ec1787729093b2064a36c9ef5cce5e84b763d5
> > Author: sunnavy <sunnavy [at] bestpractical>
> > Date: Mon Aug 8 17:31:41 2011 +0800
> >
> > turn off utf8 as uri string is utf8 encoded, see also #18104
> >
> > diff --git a/lib/RT/Dashboard/Mailer.pm b/lib/RT/Dashboard/Mailer.pm
> > index f6b1685..ae10d21 100644
> > --- a/lib/RT/Dashboard/Mailer.pm
> > +++ b/lib/RT/Dashboard/Mailer.pm
> > @@ -476,7 +476,9 @@ sub BuildEmail {
> > }
> >
> > sub GetResource {
> > - my $uri = URI->new(shift);
> > + my $string = shift;
> > + Encode::_utf8_off($string);
> > + my $uri = URI->new($string);
>
> Shouldn't uri be escaped and contain only ASCII? I see this masking real
> issue.
yep, but those ascii with utf8 flag on makes URI interpret uri escaped utf8
encoded data differently, here is the detail:

"äöü" is escaped to "%C3%A4%C3%B6%C3%BC"

use Devel::StringInfo 'string_info';
my $uri = URI->new('?Query=%C3%A4%C3%B6%C3%BC');
print string_info( ($uri->query_form('Query'))[1] );

output:

string: äöü
is_utf8: 0
octet_length: 6
valid_utf8: 1
decoded_is_same: 0
decoded:
octet_length: 6
downgradable: 1
char_length: 3
string: äöü
is_utf8: 1
raw = <<äöü>>

this is right.

but if utf8 flag of "%C3%A4%C3%B6%C3%BC" is on:

use Encode;
use Devel::StringInfo 'string_info';
my $uri = URI->new(decode_utf8 '?Query=%C3%A4%C3%B6%C3%BC');
print string_info( ($uri->query_form('Query'))[1] );

output:

string: äöü
is_utf8: 1
char_length: 6
octet_length: 12
downgradable: 1
raw = <<äöü>>

this is not right, the char_length should be 3 and octet_length should be 6

>
> > my ($content, $filename, $mimetype, $encoding);
> >
> > $RT::Logger->debug("Getting resource $uri");
> >
> > commit c6fb9f54c37142df0089145c12ab4feab52d7d27
> > Author: sunnavy <sunnavy [at] bestpractical>
> > Date: Mon Aug 8 17:31:58 2011 +0800
> >
> > test for dashboard chart with umlauts
> >
> > diff --git a/t/mail/dashboard-chart-with-umlauts.t
> b/t/mail/dashboard-chart-with-umlauts.t
> > new file mode 100644
> > index 0000000..cfde407
> > --- /dev/null
> > +++ b/t/mail/dashboard-chart-with-umlauts.t
> > @@ -0,0 +1,88 @@
> > +use strict;
> > +use warnings;
> > +
> > +use RT::Test tests => 19;
> > +use RT::Dashboard::Mailer;
> > +use Encode;
> > +
> > +my $root = RT::Test->load_or_create_user( Name => 'root' );
> > +
> > +my ( $baseurl, $m ) = RT::Test->started_ok;
> > +ok( $m->login, 'logged in' );
> > +
> > +RT::Test->create_ticket(
> > + Queue => 'General',
> > + Subject => decode_utf8('test äöü'),
> > +);
> > +
> > +my $query = "Subject LIKE 'test äöü'";
> > +
> > +$m->get_ok(q{/Search/Chart.html?Query=Subject LIKE 'test äöü'});
> > +$m->submit_form(
> > + form_name => 'SaveSearch',
> > + fields => {
> > + SavedSearchDescription => 'chart foo',
> > + SavedSearchOwner => 'RT::User-' . $root->id,
> > + },
> > + button => 'SavedSearchSave',
> > +);
> > +
> > +# first, create and populate a dashboard
> > +$m->get_ok('/Dashboards/Modify.html?Create=1');
> > +$m->form_name('ModifyDashboard');
> > +$m->field( 'Name' => 'dashboard foo' );
> > +$m->click_button( value => 'Create' );
> > +
> > +$m->follow_link_ok( { text => 'Content' } );
> > +my $form = $m->form_name('Dashboard-Searches-body');
> > +my @input = $form->find_input('Searches-body-Available');
> > +my ($dashboards_component) =
> > + map { ( $_->possible_values )[1] }
> > + grep { ( $_->value_names )[1] =~ /^Chart/ } @input;
> > +$form->value( 'Searches-body-Available' => $dashboards_component );
> > +$m->click_button( name => 'add' );
> > +$m->content_contains('Dashboard updated');
> > +
> > +$m->follow_link_ok( { text => 'Subscription' } );
> > +$m->form_name('SubscribeDashboard');
> > +$m->field( 'Frequency' => 'daily' );
> > +$m->field( 'Hour' => '06:00' );
> > +$m->click_button( name => 'Save' );
> > +$m->content_contains('Subscribed to dashboard dashboard foo');
> > +
> > +$m->follow_link_ok( { text => 'Show' } );
> > +my ($src) = $m->content =~ qr{src="(/Search/Chart\?.*?)"};
> > +ok( $src, 'have chart image' );
> > +my $c = $m->get($src);
> > +my $image = $c->content;
> > +
> > +RT::Dashboard::Mailer->MailDashboards( All => 1 );
> > +
> > +my @mails = RT::Test->fetch_caught_mails;
> > +is @mails, 1, "got a dashboard mail";
> > +
> > +# can't use parse_mail here is because it deletes all attachments
> > +# before we can call bodyhandle :/
> > +use RT::EmailParser;
> > +my $parser = RT::EmailParser->new;
> > +$parser->ParseMIMEEntityFromScalar( $mails[0] );
> > +my $mail = $parser->ParseMIMEEntityFromScalar( $mails[0] );
> > +like(
> > + $mail->head->get('Subject'),
> > + qr/Daily Dashboard: dashboard foo/,
> > + 'mail subject'
> > +);
> > +
> > +my ($mail_image) = grep { $_->mime_type eq 'image/png' } $mail->parts;
> > +ok( $mail_image, 'mail contains image attachment' );
> > +
> > +my $handle = $mail_image->bodyhandle;
> > +
> > +my $mail_image_data = '';
> > +if ( my $io = $handle->open('r') ) {
> > + while ( defined( $_ = $io->getline ) ) { $mail_image_data .= $_ }
> > + $io->close;
> > +}
> > +
> > +is( $mail_image_data, $image, 'image in mail is the same one in web' );
> > +
> >
> > -----------------------------------------------------------------------
> >
> > _______________________________________________
> > Rt-commit mailing list
> > Rt-commit [at] lists
> > http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-commit
> >

> _______________________________________________
> Come work for us: http://blog.bestpractical.com/2011/06/were-hiring-come-hack-perl-for-best-practical.html
> 2011 Training: http://bestpractical.com/services/training.html
> List info: http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-devel

_______________________________________________
Come work for us: http://blog.bestpractical.com/2011/06/were-hiring-come-hack-perl-for-best-practical.html
2011 Training: http://bestpractical.com/services/training.html
List info: http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-devel

Request Tracker devel RSS feed   Index | Next | Previous | View Threaded
 
 


Interested in having your list archived? Contact Gossamer Threads
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.