Security Advisories (1)
CVE-2010-3438 (2019-11-12)

libpoe-component-irc-perl before v6.32 does not remove carriage returns and line feeds. This can be used to execute arbitrary IRC commands by passing an argument such as \"some text\\rQUIT\" to the 'privmsg' handler, which would cause the client to disconnect from the server.

NAME

POE::Component::IRC::Common - provides a set of common functions for the POE::Component::IRC suite.

SYNOPSIS

  use strict;
  use warnings;

  use POE::Component::IRC::Common qw( :ALL );

  my $nickname = '^Lame|BOT[moo]';

  my $uppercase_nick = u_irc( $nickname );
  my $lowercase_nick = l_irc( $nickname );

  my $mode_line = 'ov+b-i Bob sue stalin*!*@*';
  my $hashref = parse_mode_line( $mode_line );

  my $banmask = 'stalin*';
  $full_banmask = parse_ban_mask( $banmask );

  if ( matches_mask( $full_banmask, 'stalin!joe@kremlin.ru' ) ) {
	print "EEK!";
  }
  
  if ( has_color($message) ) {
    print 'COLOR CODE ALERT!";
  }

  my $results_hashref = matches_mask_array( \@masks, \@items_to_match_against );

  my $nick = parse_user( 'stalin!joe@kremlin.ru' );
  my ($nick,$user,$host) = parse_user( 'stalin!joe@kremlin.ru' );

DESCRIPTION

POE::Component::IRC::Common provides a set of common functions for the POE::Component::IRC suite. There are included functions for uppercase and lowercase nicknames/channelnames and for parsing mode lines and ban masks.

CONSTANTS

Use the following constants to add color and formatting to IRC messages.

Formatting:

NO_FORMAT
BOLD
UNDERLINE
REVERSE

Colors:

NO_COLOR
WHITE
BLACK
DARK_BLUE
DARK_GREEN
RED
BROWN
PURPLE
ORANGE
YELLOW
LIGHT_GREEN
TEAL
CYAN 
LIGHT_BLUE
MAGENTA
DARK_GREY
LIGHT_GREY

$irc->yield("This word is " . YELLOW . 'yellow' . NO_COLOR . ' while this word is ' . BOLD . 'bold' . NO_FORMAT . '.');

FUNCTIONS

u_irc

Takes one mandatory parameter, a string to convert to IRC uppercase, and one optional parameter, the casemapping of the ircd ( which can be 'rfc1459', 'strict-rfc1459' or 'ascii'. Default is 'rfc1459' ). Returns the IRC uppercase equivalent of the passed string.

l_irc

Takes one mandatory parameter, a string to convert to IRC lowercase, and one optional parameter, the casemapping of the ircd ( which can be 'rfc1459', 'strict-rfc1459' or 'ascii'. Default is 'rfc1459' ). Returns the IRC lowercase equivalent of the passed string.

parse_mode_line

Takes a list representing an IRC mode line. Returns a hashref. If the modeline couldn't be parsed the hashref will be empty. On success the following keys will be available in the hashref:

'modes', an arrayref of normalised modes;
'args', an arrayref of applicable arguments to the modes;

Example:

   my $hashref = parse_mode_line( 'ov+b-i', 'Bob', 'sue', 'stalin*!*@*' );

   $hashref will be 
   {
	'modes' => [ '+o', '+v', '+b', '-i' ],
	'args'  => [ 'Bob', 'sue', 'stalin*!*@*' ],
   };
parse_ban_mask

Takes one parameter, a string representing an IRC ban mask. Returns a normalised full banmask.

Example:

$fullbanmask = parse_ban_mask( 'stalin*' );

$fullbanmask will be 'stalin*!*@*';
matches_mask

Takes two parameters, a string representing an IRC mask ( it'll be processed with parse_ban_mask() to ensure that it is normalised ) and something to match against the IRC mask, such as a nick!user@hostname string. Returns 1 if they match, 0 otherwise. Returns undef if parameters are missing. Optionally, one may pass the casemapping ( see u_irc() ), as this function ises u_irc() internally.

matches_mask_array

Takes two array references, the first being a list of strings representing IRC mask, the second a list of somethings to test against the masks. Returns an empty hashref if there are no matches. Matches are returned are arrayrefs keyed on the mask that they matched.

parse_user

Takes one parameter, a string representing a user in the form nick!user@hostname. In a scalar context it returns just the nickname. In a list context it returns a list consisting of the nick, user and hostname, respectively.

has_color

Takes one parameter, a string of IRC text. Returns 1 if it contains any IRC color codes, 0 otherwise. Useful if you want your bot to kick users for (ab)using colors. :)

has_formatting

Takes one parameter, a string of IRC text. Returns 1 if it contains any IRC formatting codes, 0 otherwise.

strip_color

Takes one paramter, a string of IRC text. Returns the string stripped of all IRC color codes.

strip_formatting

Takes one paramter, a string of IRC text. Returns the string stripped of all IRC formatting codes.

irc_ip_get_version

Try to guess the IP version of an IP address.

Params  : IP address
Returns : 4, 6, undef(unable to determine)

$version = ip_get_version ($ip)

irc_ip_is_ipv4

Check if an IP address is of type 4.

Params  : IP address
Returns : 1 (yes) or 0 (no)

ip_is_ipv4($ip) and print "$ip is IPv4";

irc_ip_is_ipv6

Check if an IP address is of type 6.

Params            : IP address
Returns           : 1 (yes) or 0 (no)

ip_is_ipv6($ip) and print "$ip is IPv6";

AUTHOR

Chris 'BinGOs' Williams

IP functions are shamelessly 'borrowed' from Net::IP by Manuel Valente

SEE ALSO

POE::Component::IRC

Net::IP