Make WordPress Core

Opened 6 years ago

Last modified 3 months ago

#44977 new defect (bug)

Transient fill fail delete to itself if it's timeout option is missing

Reported by: nlozovan's profile nlozovan Owned by:
Milestone: Awaiting Review Priority: normal
Severity: normal Version:
Component: Options, Meta APIs Keywords: needs-patch
Focuses: Cc:

Description (last modified by SergeyBiryukov)

Just faced this issue - for some reason, the transient was not deleting itself. While checking the DB, the option with the transient was there, while the timeout option was missing (probably a glitch while saving to DB).
Now, if you check get_transient() in option.php (quick link https://core.trac.wordpress.org/browser/tags/4.9.8/src/wp-includes/option.php#L0 ) you can see that these are deleted only if both exist and both pass the test:

[...]
 if ( false !== $timeout && $timeout < time() ) { DELETING TRANSIENT}
[...]

Otherwise transient will hang... forever. This should be tuned up so it also checks that these options exist, and delete transient if timeout is absolete.

Change History (3)

#1 @mukesh27
6 years ago

  • Component changed from General to Cache API

#2 @SergeyBiryukov
6 years ago

  • Component changed from Cache API to Options, Meta APIs
  • Description modified (diff)
  • Summary changed from Transient fill fail delete itself if it's timeout option is absolete to Transient fill fail delete to itself if it's timeout option is missing

#3 @geekofshire
3 months ago

How should we handle transients that are saved without a timeout due to a glitch? Should we add a check for this wherever we delete the transient?
if ( false === $timeout || ( false !== $timeout && $timeout < time() ) ) {

Note: See TracTickets for help on using tickets.