Opened 17 months ago
Closed 3 months ago
#58986 closed defect (bug) (fixed)
TypeError: Unsupported operand types: string * int *
Reported by: | nurielmeni | Owned by: | hellofromTonya |
---|---|---|---|
Milestone: | 6.7 | Priority: | normal |
Severity: | normal | Version: | 6.2.2 |
Component: | Date/Time | Keywords: | has-patch has-unit-tests needs-testing php80 commit |
Focuses: | rest-api, php-compatibility | Cc: |
Description (last modified by )
Path: /wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php
File: class-wp-rest-posts-controller.php
Line: 1833
Expression Error: get_option('gmt_offset') * HOUR_IN_SECONDS
Rais Exception: TypeError: Unsupported operand types: string * int
Suggested Fix: intval(get_option('gmt_offset')) * HOUR_IN_SECONDS
Thanks
Attachments (3)
Change History (27)
#1
@
17 months ago
- Component changed from REST API to Date/Time
- Description modified (diff)
- Focuses rest-api added
- Keywords needs-patch added
@
16 months ago
Implemented a patch to perform a type cast on 'gmt_offset'. Additionally, incorporated a standard practice by introducing a default value of 0.
#3
@
16 months ago
- Keywords has-patch added; needs-patch removed
Resolved the problem of unsupported operand types: string * int *. Additionally, adhered to the standard practice by setting 0 as the default value.
#4
@
16 months ago
- Keywords needs-patch added; has-patch removed
- Resolution set to invalid
- Status changed from new to closed
GMT offsets can be fractional, as noted in this ticket 57035 comment so intval
or casting to an int cause regression for those fractional time zones.
#5
@
16 months ago
- Resolution invalid deleted
- Status changed from closed to reopened
Reopening, as this would need a (new) patch that considers fractional offsets.
This ticket was mentioned in PR #5092 on WordPress/wordpress-develop by Zebedeu.
16 months ago
#6
- Keywords has-patch added; needs-patch removed
Previously, using the function or casting to to convert the GMT offset to a fractional decimal number could cause regression problems for fractional timezones. Now, we use the function to correctly convert the GMT offset to a decimal number. This resolves the issue of incorrect conversion of fractional timezones. fixes:
Trac ticket: https://core.trac.wordpress.org/ticket/58986
props marcio-zebedeu
#7
@
16 months ago
- Keywords has-unit-tests added
- New method added
current_gmt_offset
which reads the offset and type casts to float, with a default of 0. - Replaced all Core instances of
get_option( 'gmt_offset' )
with the function to guarantee a float in every instance, avoiding type cast issues/errors. - Added Unit Tests to the date and datetime groups
- Also addresses ticket #57035.
This patch is here.
This ticket was mentioned in PR #5094 on WordPress/wordpress-develop by @rleeson.
16 months ago
#8
Edge cases of a missing/invalid GMT offset can cause type casting error. Additionally, Core contained multiple direct calls to retrieve this option with an inconsistent usage and an apparent misconception in some resolutions that the offset was an integer, where it is actually a float/double.
To address the issue, I added current_gtm_offset
to ensure a valid float, with default offset of 0, and further replaced all instances of the direct data retrieval with this function as a proxy.
Trac tickets: Ticket #58986 and Ticket # 57035
This ticket was mentioned in Slack in #core by oglekler. View the logs.
15 months ago
#10
@
15 months ago
- Keywords needs-testing dev-feedback added
This ticket was discussed during a bug scrub.
It needs testing and dev review. Please check that Unit tests are covering all possible cases and address both declared tickets.
Add props: @mukesh27
This ticket was mentioned in Slack in #core-test by oglekler. View the logs.
15 months ago
This ticket was mentioned in Slack in #core by nicolefurlan. View the logs.
14 months ago
#13
@
14 months ago
- Milestone changed from 6.4 to 6.5
This ticket was discussed in today's bug scrub.
We decided to move this (and #57035) to 6.5. Per @hellofromTonya:
I'm concerned about both of these tickets going in this late in the release due to the lack of test coverage and testing. Why? Casting with
inval()
for the one and(float)
for the other may have side effects. Thinking it needs a contextual dive into how the code got to the current state to avoid potentially introducing a regression.
@SergeyBiryukov or @rarst if you have time to review and have confidence in this fix, don't hesitate to pull it back into the 6.4 milestone.
Props to @hellofromTonya :)
This ticket was mentioned in Slack in #core by chaion07. View the logs.
10 months ago
#15
@
10 months ago
Hello @nurielmeni and thanks for reporting this. We reviewed this ticket during a recent bug-scrub session here's the summary of the feedback received:
- We would want to check with @SergeyBiryukov if you have time to review this or we should move this to Future Release.
- We would also want to understand what additional test coverage would be helpful to increase confidence enough (P.S. we realized that the patches already include more tests, so understanding what would be helpful to add might be useful for folks working on it)
Cheers!
Props to @mikeschroder & @mukesh27
This ticket was mentioned in Slack in #core by rajinsharwar. View the logs.
10 months ago
#18
@
10 months ago
- Milestone changed from 6.5 to Future Release
Seems like this is on punt mode form 6.4, and is pending some decisions from the component maintainers.
https://core.trac.wordpress.org/ticket/58986#comment:13
Unfortunately, we might need to punt this to a Future Release until we have some activity on this.
Props to @hellofromTonya!
#19
@
9 months ago
Found this while reviewing another ticket
A related report where /wp-admin/options.general.php can break https://core.trac.wordpress.org/ticket/56358#comment:6
#20
@
5 months ago
- Keywords changes-requested added
- Milestone changed from Future Release to 6.7
- Owner set to hellofromTonya
- Status changed from reopened to assigned
I think this ticket goes with #57035.
As I noted in [57035#comment:39]:
I'm thinking this area needs a deeper contextual dive as well as consideration and testing to raise confidence of no side effects or regressions being introduced. It'll also need more test coverage (happy and unhappy paths).
The challenges:
- robust solution to handle all timezones include partial hour timezones.
The
gmt_offset
can be a float/double for partial-hour timezones such as +5:30 UTC for India and Sri Lanka.
- review of what values
gmt_offset
should and could have.- and cross-version compatibility for the PHP versions WP supports.
I'm also curious of how this is solved in other projects.
Pulling it into 6.7 and self-assigning with intent to help shepherd the effort for this ticket and #57035.
Also marking the current patches as changes-requested
as there's more work to do. That said, I'm yet convinced any of the patches are the way forward. I think that's the place to start -> figure out the way forward and then build a patch for it.
#22
@
4 months ago
I've created a PR for this and the related tickets to cast the gmt offset throughout the code base. I'm happy to hear suggestions for alternative approaches too.
#23
@
3 months ago
- Keywords commit added; dev-feedback changes-requested removed
PR 7233 is ready for commit. Spoke with @peterwilsoncc who will do the commit.
Copying my approval in the PR:
[As I previously noted](https://github.com/WordPress/wordpress-develop/pull/7233#issuecomment-2327431927), this baby step resolves the immediate issue and uses the existing pattern committed in https://core.trac.wordpress.org/changeset/58923.
Ideally these changes would have full test coverage. That said, in talking with @peterwilsoncc, he shared:
The tests are there for current features and the upgrade tests should catch anything in the ugrade routine
Getting this committed early enough gives a longer soak time to hopefully uncover any issues.
I think this is ready enough for commit ✅
Hi and thanks for the ticket!
WP_REST_Posts_Controller::prepare_item_for_response()
probably needs the same change as thecurrent_time()
function in #57035. Note: the offset is not always an integer (#57998).