Fetching contributors…
Cannot retrieve contributors at this time
924 lines (542 sloc) 26.6 KB
1.28 2017-05-05
- Removed the broken Makefile.PL that was accidentally being shipped with this
distro since 1.26.
1.27 2017-04-29
- When more than one required parameters are missing, the list of missing
parameters in the error message is sorted by name. Patch by E. Choroba. GH
1.26 2016-10-06
- Reverted to Module::Build. The use of EUMM in 1.25 broke Windows builds.
1.25 2016-09-25
- Switched to ExtUtils::MakeMaker.
1.24 2016-05-08
- Author tests are no longer in t/. This makes running tests for non-authors
faster. Requested by Karen Etheridge. RT #113063.
1.23 2016-03-26
- Fixed some Perl stack corruption bugs. Based on a proposed PR from Tony Cook
plus some additional changes. GH #8.
- Fixed tests with Carp 1.01 (shipped with Perl 5.8.3). Patch by Andreas
Koenig. RT #113318.
1.22 2016-02-13
- Fixed a bug when a callback failed but did not die. The resulting error
message had a pointless colon in it. Reported by Slaven Rezic. RT #111036.
- Made the pure Perl version use Carp's croak rather than confess. The XS
version has never included a stack trace in errors. You can use the on_fail
setting to get a stack trace if you prefer. Reported by Slaven Rezic. RT
- The pure Perl code now uses "(unknown)" when it cannot determine the sub
that failed, instead of "N/A". Reported by Slaven Rezic. RT #111036.
- Documented the PARAMS_VALIDATE_IMPLEMENTATION environment
variable. Requested by Slaven Rezic. RT #111035.
1.21 2015-07-18
- Attribute::Params::Validate is now in its own distro, and needs a new
maintainer. If you would like to maintain it, please contact me.
1.20 2015-06-28
- Fixed a bug with stack handling in the XS code. If a callback sub caused
Perl to reallocate the stack this could trigger weird errors of the form
"Bizarre copy of ARRAY" from Perl itself. Fixed by Noel Maddy. GH #5.
- Fixed use of inlining in the XS code to work when "gcc -std=c89" is
specified. Fixed by Vincent Pit. GH #6.
- Previously, Params::Validate would eagerly stringify all values it was
validating, even though this stringification was only needed for error
messages that are used when a parameter fails. For objects which overload
stringification and do real work, this added an unnecessary
slowdown. Stringification is now delayed until it is needed. Reported by
Klaus. RT #105326.
1.19 2015-06-12
- Fixed an uninitialized value warning from the pure Perl implementation under
5.8.8. Reported by Jim Bacon. RT #105198.
1.18 2015-02-13
- We no longer attempt to save and restore an existing $SIG{__DIE__} hook
before calling a validation callback. This uses undocumented black magic
poking at the Perl interpreter guts, which seems to cause sporadic
segfaults. Reported by David Wheeler with help from Andreas Koenig. RT
1.17 2015-01-08
- More XS fixes. Simplified how we localize $@ in the XS code and fixed error
with Perls compiled with -DDEBUGGING. Reported by Lars Dɪᴇᴄᴋᴏᴡ. RT #101416.
1.16 2015-01-07
- The changes in 1.14 introduced a memory leak any time a callback was called
and it did not throw an error that was a reference. This affected the
DateTime constructor and probably many other things. Reported by David
Kayal. RT #101380.
1.15 2015-01-01
- No changes from 1.14
1.14 2014-12-20 (TRIAL RELEASE)
- Callbacks can now die to provide a custom error message or exception
object. Requested by multiple people. Addresses RT #95701 and will allow
MooseX::Params::Validate to use messages provided by the type object.
1.13 2014-06-28
- Fix my brain damage so that this code compiles with Perl 5.14.
1.12 2014-06-27
- Temporarily skip tests that use Readonly with Readonly 1.50+ until various
bugs are worked out in Readonly.
1.11 2014-06-26
- Fixes for MSVC compilation. Patch by J.R. Mash. PR #1.
1.10 2014-05-11
- Require Readonly 1.03+ and Scalar::Util 1.20 for testing with
Readonly. AFAICT, earlier versions of Readonly worked very differently,
and/or this is related to Scalar::Util. Either way, this test isn't that
important anyway. RT #95402.
1.09 2014-05-04
- A call to validate() where the spec was a reference to a Readonly hash would
segfault. Reported by Salvatore Bonaccorso. RT #80572.
- When using the XS implementation, attempting to validate parameters with
tainted values would cause an "Insecure dependency in eval_sv() while
running with -T switch" exception from Perl *if the validation failed*. This
is fixed, but only for Perl 5.14+. Older Perls do not include the necessary
XS API. RT #70174.
- Fixed some potential segfaults from the XS implementation including the one
reported by Анатолий Гришаев in RT #50412. However, the XS code in general
is pretty crufty and tends to assume that values which could be NULL aren't.
- Fixed bad example of state() in POD. Reported by Salvatore Bonaccorso. RT
1.08 2013-06-07
- The handling of defaults in the XS version of validate_pos was broken. The
default were simply pushed into the returned array, rather than being
explicitly stored in the right index based on the order of the specs passed
to validate_pos(). RT #83780.
1.07 2012-10-26
- Params::Validate's XS implementation would overwrite $@ when validation subs
were called. Patch by Salvador Fandino. RT #80124.
- The use of state in the POD was broken. It only works with scalars. Reported
by Salvatore Bonaccorso. RT #80250.
1.06 2012-02-10
- Shut up warnings when XS is loaded on older 5.8.x Perl versions. Reported by
Aaron James Trevena. RT #74742.
1.05 2012-02-08
- The XS code had a code path where it could pass the contents of a Perl
variable as the first argument to the XS croak() subroutine. This subroutine
is like printf(), and should receive a format string as its first
argument. According to RT #74777, this can lead to segfaults on some systems.
This could in theory be a security bug, but it's very unlikely that
untrusted user input could end up being passed to this croak(). It is called
when a spec specifies a "depend" value on another parameter. The value of
the "depend" parameter was passed in the first argument to croak().
Reported by Andreas Voegele.
1.04 2012-02-08
- Use the latest Module::XSOrPP dzil plugin to generate a saner Build.PL. No
need update if you're using an earlier version.
1.03 2012-02-06
- This release uses Module::Implementation to handle loading the XS or pure
Perl implementation of Params::Validate.
1.02 2012-02-06
- The previous release never loaded the XS implementation, even if it had been
- With newer versions of Perl, the pure Perl implementation treated regexp
objects differently than the XS implementation. They should be treated as
belonging to the SCALARREF type for backwards compatibility.
- These two bugs combined managed to break the test suites of a number of
modules on CPAN. This release should fix them.
1.01 2012-02-05
- The generated Build.PL detects whether or not the machine it's run on has a
working compiler, and disables XS automatically if it doesn't. Fixes RT
1.00 2011-06-11
- Fix documentation indexing on Reported by Lutz Gehlen. RT
0.99 2011-05-27
- The metadata file - META.{json,yml} - had references to a different distro
because of a copy and paste error. Reported by Bernhad Graf. RT #68514.
0.98 2011-04-23
- Attribute::Params::Validate's $VERSION regressed in 0.96. It now manually
set to 1.07. Reported by tokuhirom. RT #67715.
0.97 2011-04-19
- The spec validation added in 0.96 broke MooseX::Params::Validate, so it has
been removed until I can work out how to make the two modules play nice.
0.96 2011-04-19
- The XS version of the code always called Carp::confess, regardless of
whether you provided your own on_fail callback. Reported by Scott Bolte. RT
- There were a couple spots that called eval without localizing $@ first. RT
- The parameters for each key validation (can, isa, regex) are now checked,
and an error is thrown if any of the keys are not valid. Basically, we
validate the validation spec. Based on a patch by Andreas Faafeng. RT
- Lots of little pod fixes. RT #61002.
- This module now requires Perl 5.8.1.
- Switched to version 2.0 of the Artistic License.
0.95 2010-02-16
- Skip t/29-taint-mode.t entirely, since it seems to randomly fail for people,
despite already being marked a todo test.
0.94 2009-12-01
- Removed the Makefile.PL entirely. If it was used then the XS code was never
built, because I'm using the Module::Build XS layout. Reported by jawnsy on
0.93 2009-11-30
- If the pure Perl version of validate() received a hash reference it would
alter that reference directly. Reported by Paul Eckhardt. RT #51155.
- Author-only tests now only run if $ENV{AUTHOR_TESTING} is true. RT #49890.
0.92 2009-09-25
- Switched to Module::Build and don't try to detect a compiler. If you want to
force a Perl-only build, run the Build.PL as "perl Build.PL --pp". Addresses
RT #44719 (more or less), Reported by Olivier Mengué.
- Require Scalar::Util 1.10, since that is the first version with
looks_like_number. Reported by Olivier Mengué. RT #45103.
- Require Attribute::Handlers 0.79. Reported by Olivier Mengué. RT #44066.
0.91 2008-05-03
- The fix for handling @_'s readonly-ness introduced a refcounting
bug. One symptom of this was a failing Log::Dispatch test. Reported
by Andreas Koenig. RT #35608.
0.90 2008-05-01
- Make the XS version of Params::Validate recognize regexp objects
with Perl 5.11.0-to-be. Patch by Andreas Koenig. RT #32872.
- With the XS version, when you passed @_ directly to validate() and
then got a hash reference back, the values of that hash reference
would be marked readonly. Reported by W J Moore. RT #34410.
0.89 2007-10-31
- With validation turned off, the pure Perl version incorrectly
ignored an odd number of parameters when a hash was expected (no
validation still does the bare minimum of checks needed to set
- Added pod & pod coverage tests.
- Modernized test suite to use Test::More and fixed some test suite
bugs along the way.
- Attribute::Params::Validate would die when given a ValidatePos
attribute containing one element.
- More tests are skipped on 5.6.0.
0.88 2007-03-07
- The XS version threw an error when it attempted to do "isa" or "can"
validation on a value that was not a string or object, such as undef
or a number. Reported by Steffen Winkler. RT #25229.
- Fixed a compilation failure with bleadperl (5.9.x) that happened
because of a new scalar type introduced in blead. Patch by Nicholas
Clark. Fixes RT #24458.
0.87 2007-01-18
- When determining the caller of a function in the XS version, use
Perl's caller() function rather than CopSTASHPV. The caller()
function apparently ignores the DB package, whereas the latter
doesn't. This caused validate_options to be ignored when running
under profiling (and probably the debugger as well). Thanks to Jeff
Weisberg for pointing this out.
0.86 2006-08-09
* I cannot get this module to compile with Perl 5.00504 any more. I
get errors from including CORE/perl.h, so the problem may be outside
my control, but help is welcome.
- Only turn inlining on if __GNUC__ is defined, since it seems that so
many other compilers don't support this. RT #20881.
- Removed spaces in #define, #ifdef, etc. Suggested by Peter
- If a type is specified as a string ('SCALAR', not SCALAR), this is
now caught and a useful error is thrown. RT #9660.
0.85 2006-06-07
- Compiles without warnings under gcc's -Wall. Warnings reported by
Scott Godin.
- Turned off inlining with HP-UX compiler. RT #19763.
0.84 2006-05-29
- The XS version of the code used Carp::croak to report failures,
while the Perl version used Carp::confess. The module has always
been documented as using confess, so now the XS version uses this.
- The new compiler detection code always returned false if you didn't
have ExtUtils::CBuilder installed.
0.83 2006-05-28
- Change how C compiler detection is done in the Makefile.PL so it
does not rely on having make on the system. The new way should work
on (most?) Unix and Win32 systems. Suggested by David Golden. See RT
18969 (for, but equally applicable to this module). Will
hopefully fix RT 17644.
- Previously, if a parameter was undefined, regex checks for that
parameter always failed. However, it's quite possible for a regex to
successfully match an undefined value (qr/^$/, for example). Now the
code treats undef as an empty string ('') in regex checks. Reported
by Duncan Salada.
0.82 2006-05-09
- Disabled function inlining if _MSC_VER is defined. Patch from Audrey
- Check isa by calling it as a method on the thing being checked.
- Do the same for can in the pure Perl version. This was already fixed
for the XS version in 0.75.
0.81 2006-04-01
- Speed up no validation in XS version by short-circuiting immediately
if validation is off. This gives a noticeable speed boost when
$ENV{NO_VALIDATION} is in use. Patch by Daisuke Maki.
- Inlined some C functions for additional speed in the XS
version. Patch by Daisuke Maki.
0.80 2006-01-22
- If a undef value was given for a parameter that had a regex in its
spec, a warning was emitted. RT #15196.
0.79 2006-01-13
- The XS version of Params::Validate did not work if a spec hash
reference was marked Readonly using Readonly::XS.
- Added some tests for using tied values for params or spec, and
discovered that a tied spec causes a segfault, but could not figure
out how to fix this (Grr, Perl magic is a huge pain in the nether
0.78 2005-07-19
- If an overloaded object returned false in boolean context, then it
would always fail "can" tests. Patch by Chi-Fung Fan.
0.77 2005-04-29
- Neither --xs or --pm worked with the Makefile.PL the way they were
supposed to. Reported by Doug Treder.
- Moved source to my personal SVN repo.
- Updated ppport.h, which allows XS version to work with 5.00504.
This was broken since 0.75, at least.
0.76 2004-11-13
(The "Cancan some more" release)
- Make sure that both the XS and Perl versions give the same error
when checking "can" for an undefined value.
0.75 2004-11-13
(The "Cancan" release)
- When checking if a parameter has a method, P::V now calls the ->can
method on the parameter, rather than calling UNIVERSAL::can()
directly. Requested by Don Armstrong.
0.74 2004-04-04
(The "I hate old Perls" release)
- Sometimes, but not always, Perl 5.00504 and 5.00503 cannot produce a
string value for a glob (as opposed to glob reference) parameter.
This was uncovered by a test in the HTML::Mason test suite, but I
cannot reproduce it in a simple testable form for this test suite.
Sigh ...
0.73 2004-03-28
(The "YAPC::Taipei release party" release)
- The minimum number of arguments required was reported incorrectly by
the XS code when a call to validate_pos() failed because too few
parameters were given. Patch from Britton Kerin.
- Add a new untaint key to the validation spec, which untaints a value
if it passes its validation checks.
0.72 2003-12-03
- If a normalize_keys callback returns the same normalized key for two
different inputs, Params::Validate will die.
- The pure Perl implementation had a bug where if the same hash
reference was used for the spec in multiple calls to validate(),
then any call made after a parameter failed a validation check could
exhibit strange behaviors (like parameters passing that shouldn't,
etc.). This was due to the fact that the Perl implementation uses
each() internally, and was leaving the hash's iterator partially
iterated. Reported via an apparent problem with by Jost
0.71 2003-12-02
- Suppressed some annoying "subroutine redefined" warnings if the pure
Perl version ended up being loaded after attempting to load the XS
0.70 2003-11-23
- Any validation call that used a callback leaked memory when using
the XS version. This was introduced in 0.67, when callbacks started
receiving a reference to the parameters as a second argument.
Reported by Eugene van der Pijll.
0.69 2003-11-03
- The key normalization feature introduced in 0.66 leaked one SV*
every time a parameter _hash_ was run through the XS version of
validate() or validate_with(). This happened if one of
normalize_keys, allow_extra, or ignore_case was set, or if
validate_with() was used. Upgrading is strongly recommended!
Reported by Ruslan.
0.68 2003-10-21
- Added spiffy new parameter dependency feature. Implemented by
Daisuke Maki.
0.67 2003-10-10
- The test count for 06-option.t was off. Reported by Christian
- Validation callbacks now receive a reference to the (normalized)
parameter hash/array as their second argument.
- Shut up an "unitialized value in subroutine entry" warning caused by
calling validate_pos() with an undef value in the parameter array.
This was introduced in 0.66.
0.66 2003-10-08
- Skip a few more tests under Perl 5.6.0. Patch from Christian
- Error messages now include the stringified value of the variable
that was invalid. Implemented by Daisuke Maki.
- Added a new parameter normalization callback feature, the
"normalize_keys" option. Implemented by Daisuke Maki.
* The "strip_leading" and "ignore_case" options are now
deprecated. Use the new "normalize" feature instead.
0.65 2003-08-07
- It is now possible to turn validation on and off at runtime. To
make this easier, it can be set via the PERL_NO_VALIDATION
environment variable, or the $Params::Validate::NO_VALIDATION global
variable. Go ahead, shoot yourself in the foot with it!
0.64 2003-07-14
- Fix an XS compilation error under 5.6.1:
Validate.xs: In function `validate_isa':
Validate.xs:381: `perl_on_error' undeclared (first use in this function)
0.63 2003-07-14
- The XS version of validate_with failed if the params key contained
an array reference containing a single hash reference. Since this
works with the pure Perl version, it should work with the XS
version. Reported by Diab Jerius. Bug #2791 on
0.62 2003-06-25
- Remove a warn() statement left in from debugging. Reported by Shane
0.61 2003-06-23
- The last release had some debugging code left in which tried to load
Devel::StackTrace. Reported by Iain Truskett.
0.60 2003-06-21
- Fixed a weird segfault that could occur with Perl 5.6.1 when a
user-defined on_fail callback died with an object as its argument.
This only happened with the XS version of the code. Reported by Ken
The end result is that the version of the XS code that is used with
Perl 5.6.0 and 5.6.1 is slightly slower than that used with 5.00503
or 5.8.0, as it requires an additional Perl-level wrapper.
- Use XSLoader in preference to Dynaloader with Perl 5.6.0+.
0.59 2003-05-24
- If an odd number of parameters was given to validate() in the array
as its first argument, the error given would be different depending
on whether or not the pure Perl or XS version of the code was being
- Fixed incredibly odd bug that occurred in XS code when tainting was
on with Perl 5.00503. Unfortunately, the only test case that
reliably reproduces this is one of Mason's tests, so no test was
0.58 2003-04-03
- Fix some compiler warnings from MS Visual Studio 6. Reported by Ron
0.57 2003-02-28
- When called from the main body of a script, the validation routines
would cause an undefined value warning if validation failed.
Reported by Britton Kerin and fixed by Ilya Martynov.
0.56 2003-02-24
- The XS code that handled callbacks expected all callbacks to return
an integer, instead of simply testing the returned value for truth.
This could cause strange warnings like 'Argument "InMemory" isn't
numeric in subroutine entry...'. Based on a bug report from Robert
Dick for another module I wrote (Lingua::ZH::CCDICT).
0.55 2003-02-21
- Fixed Params::Validate for Perl configurations where sizeof(IV) !=
sizeof(int). Reported by Alain Barbet.
0.54 2003-02-20
- Something around test 5 in 06-options.t appear to cause Perl to
die/segfault/something under 5.6.0. These tests will be skipped
with 5.6.0 in the future. Reported by Christian Schaffner.
0.53 2003-02-19
- When testing for a compiler, use nmake on Win32. Implemented by
Ronald Hill.
0.52 2003-02-14
- Added regex validation option.
0.51 2003-01-14
- Added copyright info to each source file. Added LICENSE file to
0.50 2003-01-09
- Added an XS implementation, written by Ilya Martynov. The pure Perl
implementation is still included as a fallback for users who do not
have a compiler handy. The XS implementation gives a speed boost of
150% to 300%, depending on the complexity of the validation being
This XS code is known to work Perl 5.00503+, but it may not work
with earlier versions of Perl.
0.24 2002-07-19
- Fix Attribute::Params::Validate docs to show that attribute
declaration must have open paren immediately after "Validate" or
"ValidatePos". Reported by Britton Kerin.
- Fix bug with Perl 5.8.0 when in PERL_NO_VALIDATION mode and calling
validate() expecting a hash ref to be returned. Reported by Randal
0.23 2002-07-19
- Argh. In 0.22 some of the tests printed their test counts (1..x)
after doing the tests. This works with newer versions of
Test::Harness so I didn't notice it. Reported by Peter Asemann.
0.22 2002-07-15
- The last version's tarball was a mess, and had blib and other junk
in it. This is a nice clean one.
0.21 2002-07-14
- The various validation functions are now context sensitive, and will
return a reference in scalar context. This may be a helpful
speedup, especially for large parameter lists.
0.20 2002-07-13
- Improved the speed of both validate() and validate_pos() by about
- Improved the speed of the 'no validation' mode for validate() by
over 30%, for validation_pos() by 15%, and for validate_with() by
- The speed of validate_with() has been improved by over 100%, but
this was at the expense of not validating its own incoming
arguments, thus making it a little more fragile.
- The PERL_NO_VALIDATION env var is now _only_ checked when the module
is loaded. This means you cannot change it mid-program. This is a
backwards incompatibility.
0.18 2002-06-18
- Added a new function, validate_with(), that allow you to set various
options on a per-invocation basis, rather than on a per-package
basis. Patch by Ken Williams.
0.17 2002-06-15
- Fix a doc nit where I had a wrong code example. Reported by Britton
- Added a new validation option parameter, stack_skip, which allows
you to change how errors are reported by Params::Validate.
0.16 2002-05-11
- Improve skipping of tests when run with 5.6.0. Patch by Ken
- Silence an uninit value warning
0.15 2002-04-19
- validate_pos would die stupidly when it received an array with an
odd number of elements.
0.14 2002-03-14
- validate_pos used exists on an array element, which only works with
Perl 5.6.0. This release makes it work 5.00503 again. Reported by
Jon Swartz.
0.13 2002-03-10
- Apply some of the same optimizations to positional parameters. The
speedup here seems to be about 7-8%.
- Fix stupid bug in 04-defaults tests.
0.12 2002-03-10
- Add BOOLEAN type (equivalent to UNDEF | SCALAR). Suggested by Ken
- This version is about 8-10% faster on named parameters than previous
versions. This may not seem like that much but if most, or all, of
your subroutines/methods use validation then this can be a
significant improvement.
- This version has slightly different semantics for dealing with
missing parameters. Previously, if parameters were missing, an
exception was thrown before any of the other validation parameters
were checked. Now, the validation parameters (type, isa, etc.) are
checked first, so that these errors will show up before missing
0.11 2002-01-04
- Accidentally removed the set_options function (in 0.08). Though this
will go away in the future it isn't happening quite yet.
0.10 2002-01-04
- Apparently making a tarball for CPAN is beyond my limited abilities.
0.09 was missing a file needed for tests. Also reported by Blair
- When running Makefile.PL you get some warnings that can be ignored.
Add a message saying you can ignore them.
0.09 2002-01-04
- I forgot to put the Makefile.PL in the MANIFEST. I am dumb.
Reported by Blair Zajac.
0.08 2002-01-03
- Explicitly mention that, by default, Params::Validate uses
Carp::confess to report a validation failure. Suggested by Mark
- The 'NO_VALIDATION' mode was seriously broken in that it didn't
handle defaults at all.
- The 'NO_VALIDATION' env var was mis-documented as being
- The 'NO_VALIDATION' env var is now 'PERL_NO_VALIDATION' and this
method of disabling validation is no longer considered alpha.
- The validation functions now check this environment variable every
time they are called. This is probably a bit slower than the
previous implementation, which only checked once when the module was
loaded. If you have a problem with this, let me know.
0.07 2001-09-23
- Fix problem with CPAN shell's 'r' command that
Attribute::Params::Validate was causing with older Perl's. Reported
by Rob BloodGood.
- Add ability to specify defaults for parameters and get a new
hash/array back from validate or validate_pos. Partial patch
submitted by Ken Williams.
0.06 2001-08-23
- Require Attribute::Handlers if using Perl 5.6.0+.
- fix doc nits.
0.05 2001-08-23
- Added Attribute::Params::Validate - do validation via attributes!
- Rename set_options to validation_options. This can now be exported
safely and is included in the :all export tag. set_options is
deprecated and will be removed in a future release. Thanks to Jon
Swartz for the suggestion.
0.04 2001-04-14
- Tweaks to make the code work under 5.00404
0.03 2001-03-17
- Make sure all error messages contain the name of the subroutine that
was called.
- The error message given when an argument doesn't match the 'isa'
spec has been improved.
- Use Carp::confess by default when dying with an error. This
produces a more useful error message.
0.02 2001-03-06
- Fix a bug in the test suite that caused failures in 5.6.0.
0.01 2001-02-16
- Original release