[wp-trac] [WordPress Trac] #57035: Error in current_time() function when using timestamp and no value for gmt_offset

WordPress Trac noreply at wordpress.org
Tue Nov 8 13:40:59 UTC 2022


#57035: Error in current_time() function when using timestamp and no value for
gmt_offset
----------------------------+---------------------
 Reporter:  Nick_theGeek    |       Owner:  (none)
     Type:  defect (bug)    |      Status:  new
 Priority:  normal          |   Milestone:  6.2
Component:  Date/Time       |     Version:  6.1
 Severity:  normal          |  Resolution:
 Keywords:  has-patch php8  |     Focuses:
----------------------------+---------------------
Changes (by SergeyBiryukov):

 * keywords:  has-patch => has-patch php8
 * component:  General => Date/Time
 * milestone:  Awaiting Review => 6.2


Old description:

> This may be a but of an edge case, but if the gmt_offset is not set
> correctly a string is returned and then used in math to multiply against
> HOUR_IN_SECONDS.
>
> In PHP 7 and earlier this is dismissed as a warning so processing
> continues, but in PHP 8 this throws a fatal error.
>
> It looks like the function has some typecasting, but it is placed in the
> wrong spot.
>
> `
>         // Don't use non-GMT timestamp, unless you know the difference
> and really need to.
>         if ( 'timestamp' === $type || 'U' === $type ) {
>                 return $gmt ? time() : time() + (int) ( get_option(
> 'gmt_offset' ) * HOUR_IN_SECONDS );
>         }
> `
>
> Should be
>
> `
>         // Don't use non-GMT timestamp, unless you know the difference
> and really need to.
>         if ( 'timestamp' === $type || 'U' === $type ) {
>                 return $gmt ? time() : time() + ( (int) get_option(
> 'gmt_offset' ) * HOUR_IN_SECONDS );
>         }
> `
>
> Again, this is potentially an edge case. Another ticket was reported and
> closed when the user discovered a work around, but I think this fix is
> pretty simple and will solve for weird edge cases that can break sites in
> php8.
> https://core.trac.wordpress.org/ticket/56358

New description:

 This may be a but of an edge case, but if the gmt_offset is not set
 correctly a string is returned and then used in math to multiply against
 HOUR_IN_SECONDS.

 In PHP 7 and earlier this is dismissed as a warning so processing
 continues, but in PHP 8 this throws a fatal error.

 It looks like the function has some typecasting, but it is placed in the
 wrong spot.

 {{{
         // Don't use non-GMT timestamp, unless you know the difference and
 really need to.
         if ( 'timestamp' === $type || 'U' === $type ) {
                 return $gmt ? time() : time() + (int) ( get_option(
 'gmt_offset' ) * HOUR_IN_SECONDS );
         }
 }}}

 Should be

 {{{
         // Don't use non-GMT timestamp, unless you know the difference and
 really need to.
         if ( 'timestamp' === $type || 'U' === $type ) {
                 return $gmt ? time() : time() + ( (int) get_option(
 'gmt_offset' ) * HOUR_IN_SECONDS );
         }
 }}}

 Again, this is potentially an edge case. Another ticket, #56358, was
 reported and closed when the user discovered a work around, but I think
 this fix is pretty simple and will solve for weird edge cases that can
 break sites in php8.

--

-- 
Ticket URL: <https://core.trac.wordpress.org/ticket/57035#comment:2>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list