Make WordPress Core

Opened 4 years ago

Last modified 3 months ago

#53023 new defect (bug)

_wp_json_convert_string type mismatch: returns string on success; false on failure

Reported by: hellofromtonya's profile hellofromTonya Owned by:
Milestone: Awaiting Review Priority: normal
Severity: normal Version: 4.1.4
Component: Formatting Keywords: has-patch
Focuses: docs Cc:

Description

The private function _wp_json_convert_string (which converts a string to UTF-8) also returns false, though its @return specifies only string.

How? `mb_convert_encoding` returns a string on success and a false on failure.

Is this a bug or docs fix? It's both.

Reviewing its context, it's used by _wp_json_sanity_check to convert IDs and data value. The IDs are the problem. How so? Each ID is used as either a key or project for referencing the data value.

What happens if the conversion to UTF-8 fails? The key or property would either be an empty string or false. That's problematic as it can cause unexpected JSON encoding results.

For example, this 3v4l snippet simulates the convert encoding failure to view the results through the JSON encoding process. Notice how the returned JSON is invalid when it fails. (Note: This snippet is forcing a failure.)

Change History (2)

#1 @desrosj
3 months ago

#57172 was marked as a duplicate.

This ticket was mentioned in PR #7572 on WordPress/wordpress-develop by @debarghyabanerjee.


3 months ago
#2

  • Keywords has-patch added

Trac Ticket: Core-53023

## Summary

This pull request addresses a critical issue in the _wp_json_convert_string function, which is responsible for converting strings to UTF-8 for safe JSON encoding. The previous implementation did not handle conversion failures appropriately, potentially leading to invalid JSON output. This update ensures that the function consistently returns a string, mitigating unexpected behavior in subsequent JSON encoding processes.

## Changes Made

  • Error Handling Improvement: If mb_convert_encoding fails and returns false, the function now explicitly returns an empty string. This change prevents invalid keys or properties in JSON data.
  • Code Clarity: The logic for determining the string encoding has been streamlined to enhance readability and maintainability.
  • Documentation Update: The function's PHPDoc has been revised to clarify that the function will return an empty string if conversion fails, ensuring alignment between documentation and behavior.

## Implications:

  • This update enhances the robustness of the JSON encoding process by ensuring that all outputs from _wp_json_convert_string are valid strings.
  • Developers using this function can expect more predictable behavior, as the risk of generating invalid JSON due to conversion errors has been significantly reduced.
Note: See TracTickets for help on using tickets.