Summary: | Add validation for date strings to Koha::DateUtils | ||
---|---|---|---|
Product: | Koha | Reporter: | Marc Véron <veron> |
Component: | Architecture, internals, and plumbing | Assignee: | Marc Véron <veron> |
Status: | CLOSED INVALID | QA Contact: | Testopia <testopia> |
Severity: | enhancement | ||
Priority: | P5 - low | CC: | hector.hecaxmmx, jonathan.druart |
Version: | Main | ||
Hardware: | All | ||
OS: | All | ||
See Also: | http://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=12072 | ||
GIT URL: | Change sponsored?: | --- | |
Patch complexity: | Small patch | Documentation contact: | |
Documentation submission: | Text to go in the release notes: | ||
Version(s) released in: | Circulation function: | ||
Attachments: |
Bug 14936 - Add validation for date strings to Koha::DateUtils
Bug 14936 - Add validation for date strings to Koha::DateUtils Bug 14936 - Add validation for date strings to Koha::DateUtils [SIGNED-OFF]Bug 14936 - Add validation for date strings to Koha::DateUtils |
Description
Marc Véron
2015-10-01 16:06:08 UTC
Created attachment 43020 [details] [review] Bug 14936 - Add validation for date strings to Koha::DateUtils To test: - Apply patch - prove t/DateUtils.t Bonus test: Apply patch(es) from Bug(s) that are blocked by this Bug and test as appropriate. Created attachment 43021 [details] [review] Bug 14936 - Add validation for date strings to Koha::DateUtils To test: - Apply patch - prove t/DateUtils.t Bonus test: Apply patch(es) from Bug(s) that are blocked by this Bug and test as appropriate. Created attachment 43027 [details] [review] Bug 14936 - Add validation for date strings to Koha::DateUtils To test: - Apply patch - prove t/DateUtils.t Bonus test: Apply patch(es) from Bug(s) that are blocked by this Bug and test as appropriate. Created attachment 43033 [details] [review] [SIGNED-OFF]Bug 14936 - Add validation for date strings to Koha::DateUtils To test: - Apply patch - prove t/DateUtils.t Bonus test: Apply patch(es) from Bug(s) that are blocked by this Bug and test as appropriate. Signed-off-by: Hector Castro <hector.hecaxmmx@gmail.com> Tested in conjunction with patches 14923 and 14924 with different date formats Tested with wrong formats 32/01/1970, 00-00-0000 and 0000-00-00 Test units pass OK Marc, This is not the way to go, for several reasons. The main reason is that you c/p dt_from_string to create the new subroutine, which is bad. Then, if you have a look at dt_from_string, you will note 1 eval around the first DateTime->new (l. 156), but not around the second one (l. 164). So I think there are at least 2 better ways to know if a date is not correctly formatted: 1/ add an eval around the second DateTime->new call, the subroutine will return undef and the caller will have to check if something has been returned ; 2/ or catch the croak raised by the DateTime in the callers I don't know what I would prefer (a bit early and not drank enough tea yet). Hi Jonathan, Propositon 1/ changes the behaviour of dt_from_string. This function is spread all over the system, and we do not know what side effects it will have if we change the behavior regarding the return value. That's why I decided not to touch it at the moment. Proposition 2/ Catch a croak: Is that done by surrounding dt_from_string with an eval? (I simply do not know) My opinion is that it is much better to have a dedicated function to validate a date string. It works fine afak and it has tests. I know that it duplicates code, but that can easily be streamlined later, after we finally have added the long outstandig DD.MM.YYYY date format (Bug 12072). (In reply to Jonathan Druart from comment #5) > Marc, > This is not the way to go, for several reasons. > The main reason is that you c/p dt_from_string to create the new subroutine, > which is bad. > Then, if you have a look at dt_from_string, you will note 1 eval around the > first DateTime->new (l. 156), but not around the second one (l. 164). > So I think there are at least 2 better ways to know if a date is not > correctly formatted: > 1/ add an eval around the second DateTime->new call, the subroutine will > return undef and the caller will have to check if something has been > returned ; > 2/ or catch the croak raised by the DateTime in the callers > > I don't know what I would prefer (a bit early and not drank enough tea yet). Date strings can be validated by using dt_from_string inside an eval{ }. |