CGI::Untaint::date - validate a date


CGI-Untaint-date documentation Contained in the CGI-Untaint-date distribution.

Index


Code Index:

NAME

Top

CGI::Untaint::date - validate a date

SYNOPSIS

Top

  use CGI::Untaint;
  my $handler = CGI::Untaint->new($q->Vars);

  my $date = $handler->extract(-as_date => 'date');

DESCRIPTION

Top

is_valid

This Input Handler verifies that it is dealing with a reasonable date. Reasonably means anything that Date::Manip thinks is sensible, so you could use any of (for example): "December 12, 2001" "12th December, 2001" "2001-12-12" "next Tuesday" "third Wednesday in March"

See Date::Manip for much more information on what date formats are acceptable.

The resulting date will be a Date::Simple object. Date::Simple for more information on this.

date_format

By default ambiguous dates of the format 08/09/2001 will be treated as UK style (i.e. 8th September rather than 9th August)

If you want to change this, subclass it and override date_format()

WARNING

Top

Date::Manip does not play nicely with taint mode. In order to work around this we locally clobber Date::Manip's 'timezone' code. As we're only interested in dates rather than times, this shouldn't be much of an issue. If it is, then please let me know!

SEE ALSO

Top

Date::Simple. Date::Manip.

AUTHOR

Top

Tony Bowden

BUGS and QUERIES

Top

Please direct all correspondence regarding this module to: bug-CGI-Untaint-date@rt.cpan.org

COPYRIGHT and LICENSE

Top


CGI-Untaint-date documentation Contained in the CGI-Untaint-date distribution.

package CGI::Untaint::date;

$VERSION = '1.00';

use strict;
use base 'CGI::Untaint::printable';
use Date::Manip;
use Date::Simple;

sub is_valid {
  my $self = shift;
  local $SIG{__WARN__} = sub {};
  local *Date::Manip::Date_TimeZone = sub { 'GMT' };
  Date_Init(sprintf 'DateFormat=%s' => $self->date_format);
  my $date = ParseDate($self->value) or return;
  my @date = unpack "A4A2A2", $date;
  my $ds = eval { Date::Simple->new(@date) } or return;
  $self->value($ds);
  return $ds;
}

sub date_format { 'UK' }

1;