Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Xls Writer - Correct Timestamp Bug, Improve Coverage #1493

Merged
merged 9 commits into from
Jun 19, 2020
Merged

Xls Writer - Correct Timestamp Bug, Improve Coverage #1493

merged 9 commits into from
Jun 19, 2020

Conversation

oleibman
Copy link
Collaborator

This is:

- [x] a bugfix
- [ ] a new feature

Checklist:

Why this change is needed?

The Xls Writer sets its timestamp incorrectly. The problem is actually
in Shared/Ole::localDateToOLE, which converts its timestamp using
gmmktime; mktime is correct. If I save a file at 3:00 p.m. in San Francisco,
this bug means the time is actually recorded as 3:00 p.m. UTC.
A consequence of this is that if you use Phpspreadsheet to read the
file and save it as a new Xls, the creation timestamp goes further
and further back in time with each generation (or further forward
if east of Greenwich). One of the tests added confirms that
the creation timestamp is consistent with the start and end times
of the test.

The major change in coverage is adding tests to save GIF and BMP
images, which aren't supported in Xls, but are converted to PNG
in the PhpSpreadsheet code.

Resync with base project
I believe that Xls Writer is 100% covered now.

The Xls Writer sets its timestamp incorrectly. The problem is actually
in Shared/Ole::localDateToOLE, which converts its timestamp using
gmmktime; mktime is correct. If I save a file at 3:00 p.m. in San Francisco,
this bug means the time is actually recorded as 3:00 p.m. UTC.
A consequence of this is that if you use Phpspreadsheet to read the
file and save it as a new Xls, the creation timestamp goes further
and further back in time with each generation (or further forward
if east of Greenwich). One of the tests added confirms that
the creation timestamp is consistent with the start and end times
of the test.

The major change in coverage is adding tests to save GIF and BMP
images, which aren't supported in Xls, but are converted to PNG
in the PhpSpreadsheet code.
The location of the new BMP and GIF files was mis-coded in such a way
that Windows allowed the error, but Unix didn't.
Mktime uses int arguments rather than string.
Copy link
Member

@PowerKiKi PowerKiKi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Small simplification before being merged.

src/PhpSpreadsheet/Writer/Xls.php Outdated Show resolved Hide resolved
oleibman added 3 commits May 31, 2020 11:06
Recommendation from PowerKiki
Asserted that drawing was a MemoryDrawing, but Scrutinizer
doesn't think it will always have MemoryDrawing properties.
Seeing if I can influence it.
It didn't find errors in my package - it just didn't start.
Trying again half an hour later to see if timing was the issue.
@oleibman oleibman requested a review from PowerKiKi May 31, 2020 20:38
@MarkBaker
Copy link
Member

Thank you for the fix

@MarkBaker MarkBaker merged commit b3d30f4 into PHPOffice:master Jun 19, 2020
@oleibman oleibman deleted the xlsgifbmp branch November 2, 2020 01:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

3 participants