[#14132] vCalendar timezone definition ignored in case of starting far ago
Summary vCalendar timezone definition ignored in case of starting far ago
Queue Kronolith
Queue Version 4.2.9
Type Bug
State Not Reproducible
Priority 1. Low
Owners mrubinsk@horde.org
Requester v.henkel@wenzel-elektronik.de
Created 2015-10-08 (1521 days ago)
Due
Updated 2015-12-02 (1466 days ago)
Assigned 2015-11-12 (1486 days ago)
Resolved 2015-12-02 (1466 days ago)
Milestone
Patch No

Comments
v.henkel@wenzel-elektronik.de 2015-10-08 10:02:59
Timezone definition start dates far ago are ignored.

Our buggy example has a define startdate of 1.Jan.1601.
BEGIN:VTIMEZONE
TZID:Eastern Standard Time
BEGIN:STANDARD
DTSTART:16010101T020000
...

However, an entry like
DTSTART:20010101T02000
would be processed in correct manner.


Michael Rubinsky <mrubinsk@horde.org> 2015-11-12 16:56:59
Can you be more specific as to what you are seeing that is incorrect? 
I created a unit test for this and it works as expected. That is, the 
vTimezone is correctly parsed, the DTSTART of the event in your 
example file is represented as 3am on 10/9 in America/New_York. This, 
converted to UTC yields a time of 7am since this date is within DST 
and has an offset of UTC - 4 hours.

Git Commit <commits@lists.horde.org> 2015-11-12 17:00:52
Changes have been made in Git (master):

commit beae0888cbfd176fe0977ce7bb6fb12c531323c0
Author: Michael J Rubinsky <mrubinsk@horde.org>
Date:   Thu Nov 12 12:00:23 2015 -0500

     Might as well add this test since it's here...

  .../Icalendar/test/Horde/Icalendar/ParseTest.php   |   11 +++++
  .../test/Horde/Icalendar/fixtures/bug14132.ics     |   46 
++++++++++++++++++++
  2 files changed, 57 insertions(+), 0 deletions(-)

http://github.com/horde/horde/commit/beae0888cbfd176fe0977ce7bb6fb12c531323c0

Git Commit <commits@lists.horde.org> 2015-11-15 15:05:21
Changes have been made in Git (master):

commit 1dfebf6fdad4391f520bf2265181d432368df3b8
Merge: 8472ef2 805b9b5
Author: Jan Schneider <jan@horde.org>
Date:   Sun Nov 15 16:05:04 2015 +0100

     Merge branch 'master' of ssh://dev.horde.org/horde/git/horde

  .travis.yml                                        |   18 +-
  framework/ActiveSync/composer.json                 |    4 +-
  .../lib/Horde/ActiveSync/Connector/Exporter.php    |    8 +-
  .../ActiveSync/lib/Horde/ActiveSync/Device.php     |  112 ++-
  .../ActiveSync/lib/Horde/ActiveSync/Device/Ios.php |   79 ++
  .../lib/Horde/ActiveSync/Message/Base.php          |    2 +-
  .../lib/Horde/ActiveSync/Message/Contact.php       |   15 +
  .../lib/Horde/ActiveSync/Request/Search.php        |    2 -
  .../lib/Horde/ActiveSync/State/Mongo.php           |    2 +-
  .../ActiveSync/lib/Horde/ActiveSync/State/Sql.php  |   24 +-
  .../lib/Horde/ActiveSync/Wbxml/Decoder.php         |    4 +-
  framework/ActiveSync/package.xml                   |   61 ++-
  .../test/Horde/ActiveSync/ContactTest.php          |   24 +-
  .../test/Horde/ActiveSync/DeviceTest.php           |   51 +-
  framework/Core/composer.json                       |    4 +-
  framework/Core/js/map/horde.js                     |    6 +
  framework/Core/js/map/owm.js                       |   89 ++
  .../Core/lib/Horde/Core/ActiveSync/Connector.php   |    3 +-
  .../Core/lib/Horde/Core/ActiveSync/Driver.php      |   32 +-
  .../lib/Horde/Core/ActiveSync/Logger/Factory.php   |    2 +-
  .../Ajax/Imple/WeatherLocationAutoCompleter.php    |    9 +-
  framework/Core/lib/Horde/Core/Factory/Alarm.php    |    2 +-
  framework/Core/lib/Horde/Core/Factory/Weather.php  |    2 +-
  framework/Core/lib/Horde/Deprecated.php            |    2 +-
  framework/Core/package.xml                         |   43 +-
  .../test/Horde/Exception/ExceptionTest.php         |    4 +-
  framework/Icalendar/lib/Horde/Icalendar.php        |   34 +-
  framework/Icalendar/package.xml                    |   10 +-
  .../Icalendar/test/Horde/Icalendar/ParseTest.php   |   23 +
  .../test/Horde/Icalendar/fixtures/bug14132.ics     |   46 +
  .../test/Horde/Icalendar/fixtures/bug14153.ics     |  263 ++++++
  .../lib/Horde/Kolab/Filter/Transport.php           |    2 +-
  .../lib/Horde/Kolab/Storage/Cache/Data.php         |   38 +-
  framework/Nls/composer.json                        |    4 +-
  framework/Nls/package.xml                          |   21 +-
  framework/Notification/composer.json               |    4 +-
  framework/Notification/package.xml                 |   19 +-
  framework/Pdf/composer.json                        |    4 +-
  framework/Pdf/package.xml                          |   19 +-
  .../phpseclib/phpseclib/phpseclib/Crypt/AES.php    |   20 +-
  .../phpseclib/phpseclib/phpseclib/Crypt/Base.php   |  838 ++++++++++++++----
  .../phpseclib/phpseclib/Crypt/Blowfish.php         |   81 +-
  .../phpseclib/phpseclib/phpseclib/Crypt/DES.php    |   73 +-
  .../phpseclib/phpseclib/phpseclib/Crypt/Hash.php   |   38 +-
  .../phpseclib/phpseclib/phpseclib/Crypt/RC2.php    |  160 +++-
  .../phpseclib/phpseclib/phpseclib/Crypt/RC4.php    |   50 +-
  .../phpseclib/phpseclib/phpseclib/Crypt/RSA.php    |  176 +++-
  .../phpseclib/phpseclib/phpseclib/Crypt/Random.php |    6 +-
  .../phpseclib/phpseclib/Crypt/Rijndael.php         |  861 +++++++-----------
  .../phpseclib/phpseclib/Crypt/TripleDES.php        |   71 ++-
  .../phpseclib/phpseclib/Crypt/Twofish.php          |   31 +-
  .../phpseclib/phpseclib/phpseclib/File/ANSI.php    |  283 ++++---
  .../phpseclib/phpseclib/phpseclib/File/ASN1.php    |   29 +-
  .../phpseclib/phpseclib/phpseclib/File/X509.php    |   90 ++-
  .../phpseclib/phpseclib/Math/BigInteger.php        |  191 ++--
  .../phpseclib/phpseclib/phpseclib/Net/SCP.php      |    8 +-
  .../phpseclib/phpseclib/phpseclib/Net/SFTP.php     |  191 +++-
  .../phpseclib/phpseclib/Net/SFTP/Stream.php        |    7 +-
  .../phpseclib/phpseclib/phpseclib/Net/SSH1.php     |   14 +-
  .../phpseclib/phpseclib/phpseclib/Net/SSH2.php     |  959 
++++++++++++++------
  .../phpseclib/phpseclib/System/SSH/Agent.php       |  147 +++
  framework/Queue/composer.json                      |    4 +-
  framework/Queue/package.xml                        |   19 +-
  framework/Secret/composer.json                     |    4 +-
  framework/Secret/package.xml                       |   19 +-
  framework/Service_Weather/composer.json            |    4 +-
  .../Service_Weather/lib/Horde/Service/Weather.php  |   16 +
  .../lib/Horde/Service/Weather/Base.php             |    8 +-
  .../lib/Horde/Service/Weather/Current/Owm.php      |   94 ++
  .../lib/Horde/Service/Weather/Forecast/Owm.php     |   73 ++
  .../lib/Horde/Service/Weather/Owm.php              |  379 ++++++++
  .../lib/Horde/Service/Weather/Period/Base.php      |    2 +-
  .../lib/Horde/Service/Weather/Period/Owm.php       |   89 ++
  .../Horde/Service/Weather/WeatherUnderground.php   |   12 +-
  .../lib/Horde/Service/Weather/Wwo.php              |    3 +-
  framework/Service_Weather/package.xml              |   33 +-
  .../test/Horde/Service/Weather/Wwov2Test.php       |   11 +-
  framework/SessionHandler/composer.json             |    6 +-
  framework/SessionHandler/package.xml               |   20 +-
  framework/Token/composer.json                      |    4 +-
  framework/Token/package.xml                        |   19 +-
  framework/Vcs/test/Horde/Vcs/CvsTest.php           |    1 +
  framework/Vcs/test/Horde/Vcs/RcsTest.php           |    1 +
  gollem/lib/Gollem.php                              |    1 +
  hermes/js/hermes.js                                |    1 +
  hermes/lib/Ajax/Application/Handler.php            |   11 +-
  hermes/templates/dynamic/deliverables.inc          |    2 +
  hermes/themes/default/dynamic/screen.css           |    6 +-
  horde/admin/cmdshell.php                           |    3 +-
  horde/admin/phpshell.php                           |    2 +
  horde/admin/sqlshell.php                           |    5 +-
  horde/config/conf.xml                              |    5 +-
  horde/docs/CHANGES                                 |    1 +
  horde/js/weatherblockmap.js                        |   33 +
  horde/lib/Block/Weather.php                        |   25 +-
  horde/lib/Test.php                                 |    2 +-
  horde/lib/View/Sidebar.php                         |   20 +-
  horde/package.xml                                  |   12 +-
  horde/templates/admin/cmdshell.html.php            |    2 +
  horde/templates/admin/phpshell.html.php            |    2 +
  horde/templates/admin/sqlshell.html.php            |    2 +
  horde/templates/block/weather.html.php             |  144 +---
  horde/templates/block/weather_content.html.php     |  127 +++
  horde/themes/default/block/screen.css              |   28 +-
  imp/config/hooks.php.dist                          |   20 +
  imp/docs/CHANGES                                   |    1 +
  imp/lib/Ajax/Application/Handler/Dynamic.php       |    2 +-
  imp/lib/Auth.php                                   |    9 +
  imp/lib/Compose.php                                |   12 +-
  imp/lib/Mime/Viewer/Html.php                       |    2 +-
  imp/lib/Prefs/Special/PgpPrivateKey.php            |    1 +
  imp/lib/Smime.php                                  |    2 +-
  imp/package.xml                                    |    1 +
  imp/templates/prefs/pgpprivatekey.html.php         |    2 +
  ingo/lib/Basic/Forward.php                         |    8 +-
  ingo/lib/Basic/Spam.php                            |    8 +-
  ingo/lib/Basic/Vacation.php                        |    8 +-
  kronolith/lib/Ajax/Application/Handler.php         |   91 ++-
  kronolith/lib/Api.php                              |   13 +-
  kronolith/lib/Application.php                      |    8 +-
  kronolith/lib/Event.php                            |   20 +-
  kronolith/lib/Kronolith.php                        |   19 +-
  nag/app/controllers/SaveTask.php                   |    3 -
  nag/lib/Api.php                                    |    4 +-
  nag/lib/Driver.php                                 |    5 +
  nag/lib/Search.php                                 |   27 +-
  nag/lib/TagBrowser.php                             |    9 +-
  nag/lib/Task.php                                   |   49 +-
  nag/task.php                                       |    2 -
  trean/data.php                                     |   17 +-
  trean/docs/CHANGES                                 |    1 +
  trean/lib/Data/Html.php                            |   86 ++
  trean/package.xml                                  |    5 +-
  turba/lib/Api.php                                  |   27 +-
  turba/lib/Driver.php                               |    4 +
  turba/lib/Driver/Kolab.php                         |    2 +-
  turba/lib/Driver/Sql.php                           |    4 +-
  turba/lib/Driver/Vbook.php                         |   13 +-
  turba/lib/Turba.php                                |    1 +
  whups/lib/Api.php                                  |    6 +-
  whups/lib/Driver.php                               |   24 +-
  whups/lib/Driver/Sql.php                           |   48 +-
  142 files changed, 5304 insertions(+), 1930 deletions(-)

http://github.com/horde/horde/commit/1dfebf6fdad4391f520bf2265181d432368df3b8

v.henkel@wenzel-elektronik.de 2015-11-30 08:34:52
webmail does not present my example "bad.ics" with 7am.
It shows begin 3:00 am, end 3:29am.
This is wrong.
I have attached my screen shot.

After accepting this invitation received by email, the event is 
inserted into kronolith calendar  with 7:00 am.
This is wrong again, but in line of course with webmail presentation.

> Can you be more specific as to what you are seeing that is 
> incorrect? I created a unit test for this and it works as expected. 
> That is, the vTimezone is correctly parsed, the DTSTART of the event 
> in your example file is represented as 3am on 10/9 in 
> America/New_York. This, converted to UTC yields a time of 7am since 
> this date is within DST and has an offset of UTC - 4 hours.


Michael Rubinsky <mrubinsk@horde.org> 2015-12-02 13:47:13
7AM is the correct time, if you are viewing it in UTC.

v.henkel@wenzel-elektronik.de 2015-12-02 17:09:19
Hi Michael,
I apologize for contractional statements in my last response  and the 
screen shot attached.
To be more precise now:
- the item in "bad.ics"  is entered here with 3 am (german winter time)
    instead of 7 am, as shown in the screenshot.
- please ckeck the attached file "Bildschirmfoto vom 2015-11-30 09_28_42.png"

as soon as the timezone definition is changed to a more recent date, 
everything is fine:
please check the difference between "good.ics" (attached here) and 
former "bad.ics"

$diff good.ics bad.ics
8c8
< DTSTART:20010101T020000
---
> DTSTART:16010101T020000
14c14
< DTSTART:20010101T020000
---
> DTSTART:16010101T020000

the item in "good.ics" is shown here correctly at 9am german winter 
time 07am UTC

hence, I am still convinced, there must be a serious bug in SW or 
environment. hopefully you can reproduce it now.
BR

> 7AM is the correct time, if you are viewing it in UTC.


Michael Rubinsky <mrubinsk@horde.org> 2015-12-02 17:22:11
> Hi Michael,
> I apologize for contractional statements in my last response  and 
> the screen shot attached.
> To be more precise now:
> - the item in "bad.ics"  is entered here with 3 am (german winter time)

No, it's not. According to the data in the bad.ics file, it's entered 
at 3am "Eastern Standard Time" - and is even specified in the ics file 
as UTC -5.


v.henkel@wenzel-elektronik.de 2015-12-02 18:47:08
why is good.ics and bad.ics that different in HORDE?
I  still think, that they should give the same results.

>> Hi Michael,
>> I apologize for contractional statements in my last response  and the
>> screen shot attached.
>> To be more precise now:
>> - the item in "bad.ics"  is entered here with 3 am (german winter time)
>
> No, it's not. According to the data in the bad.ics file, it's 
> entered at 3am "Eastern Standard Time" - and is even specified in 
> the ics file as UTC -5.
>


Michael Rubinsky <mrubinsk@horde.org> 2015-12-02 23:32:38
I have no idea. I can't reproduce that. Both ics files behave 
identically for me. I've added a separate test with the good.ics file 
and it passes. Maybe your timezone database is old/incorrect/corrupt?

Git Commit <commits@lists.horde.org> 2015-12-02 23:34:11
Changes have been made in Git (master):

commit 94273fbbe3b61b75ef306ce091e77ef0e9ad3824
Author: Michael J Rubinsky <mrubinsk@horde.org>
Date:   Wed Dec 2 18:33:25 2015 -0500

     Add additional (passing) test.

     Related to Bug: 14132

  framework/Icalendar/package.xml                    |    6 ++-
  .../Icalendar/test/Horde/Icalendar/ParseTest.php   |   11 +++++
  .../test/Horde/Icalendar/fixtures/bug14132_2.ics   |   46 
++++++++++++++++++++
  3 files changed, 61 insertions(+), 2 deletions(-)

http://github.com/horde/horde/commit/94273fbbe3b61b75ef306ce091e77ef0e9ad3824