Hi all, maybe someone with less rusty perl skills can help me figure this out. Every once in a while we get an error from RT saying it tried to chomp and uninitialized variable. We used to get a lot more of these, but I added some checking to prevent SetHeader from being called when there is uninitialized variables. Does anyone see something in there that isn't being checked? Here is what the error looks like in the logs - Nov 12 13:51:48 rt RT: MIMEObj To: Nov 12 13:51:48 rt RT: MIMEObj Cc: Nov 12 13:51:48 rt RT: MIMEObj Bcc: Nov 12 13:51:48 rt RT: Use of uninitialized value $val in scalar chomp at /usr/share/request-tracker3.8/lib/RT/Action/SendEmail.pm line 903. (/usr/share/request-tracker3.8/lib/RT/Action/SendE mail.pm:903) Nov 12 13:51:48 rt RT: -> MIMEObj To: Nov 12 13:51:48 rt RT: -> MIMEObj Cc: Nov 12 13:51:48 rt RT: -> MIMEObj Bcc: Nov 12 13:51:48 rt RT: -> MIMEObj X-Orig-To: "[email protected] Systems" <[email protected]> Nov 12 13:51:48 rt RT: -> MIMEObj X-Orig-Cc: FangFang Xia <[email protected]>, Matthew Oberhardt <[email protected]> Nov 12 13:51:48 rt RT: -> MIMEObj X-Orig-From: Robert Olson <[email protected]> Nov 12 13:51:48 rt RT: -> MIMEObj X-Orig-Reply-To: Nov 12 13:51:48 rt RT: -> MIMEObj X-Orig-Message-ID: <[email protected]> Here is what the code block looks like that I believe is causing that error, this is our custom code: # TODO: We should be pulling the recipients out of the template and shove them into To, Cc and Bcc $RT::Logger->debug("MIMEObj To: " . $MIMEObj->head->get('To') . "\n"); $RT::Logger->debug("MIMEObj Cc: " . $MIMEObj->head->get('Cc') . "\n"); $RT::Logger->debug("MIMEObj Bcc: " . $MIMEObj->head->get('Bcc') . "\n"); $self->SetHeader( 'To', join ( ', ', @{ $self->{'To'} } ) ) if ( ! $MIMEObj->head->get('To') && $self->{'To'} && @{ $self->{'To'} } ); $self->SetHeader( 'Cc', join ( ', ', @{ $self->{'Cc'} } ) ) if ( !$MIMEObj->head->get('Cc') && $self->{'Cc'} && @{ $self->{'Cc'} } ); $self->SetHeader( 'Bcc', join ( ', ', @{ $self->{'Bcc'} } ) ) if ( !$MIMEObj->head->get('Bcc') && $self->{'Bcc'} && @{ $self->{'Bcc'} } ); $self->SetHeader( 'X-Orig-To', join ( ', ', @{ $self->{'X-Orig-To'} } ) ) if ( !$MIMEObj->head->get('X-Orig-To') && $self->{'X-Orig-To'} && @{ $self->{'X-Orig-To'} } ); $self->SetHeader( 'X-Orig-Cc', join ( ', ', @{ $self->{'X-Orig-Cc'} } ) ) if ( !$MIMEObj->head->get('X-Orig-Cc') && $self->{'X-Orig-Cc'} && @{ $self->{'X-Orig-Cc'} } ); $self->SetHeader( 'X-Orig-From', $self->{'X-Orig-From'} ) if ( !$MIMEObj->head->get('X-Orig-From') && $self->{'X-Orig-From'} ); $self->SetHeader( 'X-Orig-Reply-To', $self->{'X-Orig-Reply-To'} ) if ( !$MIMEObj->head->get('X-Orig-Reply-To') && $self->{'X-Orig-Cc'} ); $self->SetHeader( 'X-Orig-Message-ID', $self->{'X-Orig-Message-ID'} ) if ( !$MIMEObj->head->get('X-Orig-Message-ID') && $self->{'X-Orig-Message-ID'} ); $RT::Logger->debug("-> MIMEObj To: " . $MIMEObj->head->get('To') . "\n"); $RT::Logger->debug("-> MIMEObj Cc: " . $MIMEObj->head->get('Cc') . "\n"); $RT::Logger->debug("-> MIMEObj Bcc: " . $MIMEObj->head->get('Bcc') . "\n"); $RT::Logger->debug("-> MIMEObj X-Orig-To: " . $MIMEObj->head->get('X-Orig-To') . "\n"); $RT::Logger->debug("-> MIMEObj X-Orig-Cc: " . $MIMEObj->head->get('X-Orig-Cc') . "\n"); $RT::Logger->debug("-> MIMEObj X-Orig-From: " . $MIMEObj->head->get('X-Orig-From') . "\n"); $RT::Logger->debug("-> MIMEObj X-Orig-Reply-To: " . $MIMEObj->head->get('X-Orig-Reply-To') . "\n"); $RT::Logger->debug("-> MIMEObj X-Orig-Message-ID: " . $MIMEObj->head->get('X-Orig-Message-ID') . "\n"); Here is the context around line 903, this is in SetHeader in the stock code: 898 sub SetHeader { 899 my $self = shift; 900 my $field = shift; 901 my $val = shift; 902 903 chomp $val; 904 chomp $field; 905 my $head = $self->TemplateObj->MIMEObj->head; 906 $head->fold_length( $field, 10000 ); 907 $head->replace( $field, $val ); 908 return $head->get($field); 909 } ---- Daniel Murphy-Olson Systems Administrator Mathematics & Computer Science Division Argonne National Laboratory 630-252-0055
To, Cc, and Bcc are all blank and so you're calling SetHeader with no value hence the error. Above line 903 you could put something like: $val = '' unless defined( $val ); chomp $val; ... On Nov 12, 2012, at 1:57 PM, Dan Olson <[email protected]> wrote:
Hi all, maybe someone with less rusty perl skills can help me figure this out.
Every once in a while we get an error from RT saying it tried to chomp and uninitialized variable. We used to get a lot more of these, but I added some checking to prevent SetHeader from being called when there is uninitialized variables. Does anyone see something in there that isn't being checked?
Here is what the error looks like in the logs - Nov 12 13:51:48 rt RT: MIMEObj To: Nov 12 13:51:48 rt RT: MIMEObj Cc: Nov 12 13:51:48 rt RT: MIMEObj Bcc: Nov 12 13:51:48 rt RT: Use of uninitialized value $val in scalar chomp at /usr/share/request-tracker3.8/lib/RT/Action/SendEmail.pm line 903. (/usr/share/request-tracker3.8/lib/RT/Action/SendE mail.pm:903) Nov 12 13:51:48 rt RT: -> MIMEObj To: Nov 12 13:51:48 rt RT: -> MIMEObj Cc: Nov 12 13:51:48 rt RT: -> MIMEObj Bcc: Nov 12 13:51:48 rt RT: -> MIMEObj X-Orig-To: "[email protected] Systems" <[email protected]> Nov 12 13:51:48 rt RT: -> MIMEObj X-Orig-Cc: FangFang Xia <[email protected]>, Matthew Oberhardt <[email protected]> Nov 12 13:51:48 rt RT: -> MIMEObj X-Orig-From: Robert Olson <[email protected]> Nov 12 13:51:48 rt RT: -> MIMEObj X-Orig-Reply-To: Nov 12 13:51:48 rt RT: -> MIMEObj X-Orig-Message-ID: <[email protected]>
Here is what the code block looks like that I believe is causing that error, this is our custom code:
# TODO: We should be pulling the recipients out of the template and shove them into To, Cc and Bcc $RT::Logger->debug("MIMEObj To: " . $MIMEObj->head->get('To') . "\n"); $RT::Logger->debug("MIMEObj Cc: " . $MIMEObj->head->get('Cc') . "\n"); $RT::Logger->debug("MIMEObj Bcc: " . $MIMEObj->head->get('Bcc') . "\n");
$self->SetHeader( 'To', join ( ', ', @{ $self->{'To'} } ) ) if ( ! $MIMEObj->head->get('To') && $self->{'To'} && @{ $self->{'To'} } ); $self->SetHeader( 'Cc', join ( ', ', @{ $self->{'Cc'} } ) ) if ( !$MIMEObj->head->get('Cc') && $self->{'Cc'} && @{ $self->{'Cc'} } ); $self->SetHeader( 'Bcc', join ( ', ', @{ $self->{'Bcc'} } ) ) if ( !$MIMEObj->head->get('Bcc') && $self->{'Bcc'} && @{ $self->{'Bcc'} } ); $self->SetHeader( 'X-Orig-To', join ( ', ', @{ $self->{'X-Orig-To'} } ) ) if ( !$MIMEObj->head->get('X-Orig-To') && $self->{'X-Orig-To'} && @{ $self->{'X-Orig-To'} } ); $self->SetHeader( 'X-Orig-Cc', join ( ', ', @{ $self->{'X-Orig-Cc'} } ) ) if ( !$MIMEObj->head->get('X-Orig-Cc') && $self->{'X-Orig-Cc'} && @{ $self->{'X-Orig-Cc'} } ); $self->SetHeader( 'X-Orig-From', $self->{'X-Orig-From'} ) if ( !$MIMEObj->head->get('X-Orig-From') && $self->{'X-Orig-From'} ); $self->SetHeader( 'X-Orig-Reply-To', $self->{'X-Orig-Reply-To'} ) if ( !$MIMEObj->head->get('X-Orig-Reply-To') && $self->{'X-Orig-Cc'} ); $self->SetHeader( 'X-Orig-Message-ID', $self->{'X-Orig-Message-ID'} ) if ( !$MIMEObj->head->get('X-Orig-Message-ID') && $self->{'X-Orig-Message-ID'} );
$RT::Logger->debug("-> MIMEObj To: " . $MIMEObj->head->get('To') . "\n"); $RT::Logger->debug("-> MIMEObj Cc: " . $MIMEObj->head->get('Cc') . "\n"); $RT::Logger->debug("-> MIMEObj Bcc: " . $MIMEObj->head->get('Bcc') . "\n"); $RT::Logger->debug("-> MIMEObj X-Orig-To: " . $MIMEObj->head->get('X-Orig-To') . "\n"); $RT::Logger->debug("-> MIMEObj X-Orig-Cc: " . $MIMEObj->head->get('X-Orig-Cc') . "\n"); $RT::Logger->debug("-> MIMEObj X-Orig-From: " . $MIMEObj->head->get('X-Orig-From') . "\n"); $RT::Logger->debug("-> MIMEObj X-Orig-Reply-To: " . $MIMEObj->head->get('X-Orig-Reply-To') . "\n"); $RT::Logger->debug("-> MIMEObj X-Orig-Message-ID: " . $MIMEObj->head->get('X-Orig-Message-ID') . "\n");
Here is the context around line 903, this is in SetHeader in the stock code: 898 sub SetHeader { 899 my $self = shift; 900 my $field = shift; 901 my $val = shift; 902 903 chomp $val; 904 chomp $field; 905 my $head = $self->TemplateObj->MIMEObj->head; 906 $head->fold_length( $field, 10000 ); 907 $head->replace( $field, $val ); 908 return $head->get($field); 909 }
---- Daniel Murphy-Olson Systems Administrator Mathematics & Computer Science Division Argonne National Laboratory 630-252-0055
participants (2)
-
Dan Olson -
Ti Leggett