Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Account sign-up fatals when the Optimole API returns an empty or non-JSON response

Abierto Apto para principiantes
#1,200 3 comentarios 0 reacciones 1 asignado Ver en GitHub

Los mantenedores suelen responder en 1 día

@girishpanchal30 ya está trabajando en esto.

Desde el 29/10/2026.

  • #1195 de @pirate-bot — abierto

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
85/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
php
Área
api

Línea de trabajo

Lee inc/rest.php alrededor de las líneas 467-482, donde register_service() trata false como un WP_Error, y compáralo con los hermanos protegidos connect() y select_application() cerca de las líneas 377-390. Revisa inc/api.php en las líneas 180-191 y 217-228 para confirmar las rutas en las que request() devuelve false. Reproduce el problema con el fragmento de WP-CLI o con la llamada stubbed a register_service(), luego haz que las llamadas a los métodos de error sean condicionales a is_wp_error() y devuelve la respuesta simple "Error creating account." para false. Está terminado cuando los casos de cuerpo vacío, HTML 502, sin code y no 200 sin error devuelven todos code: error, mientras la rama de WP_Error sigue comportándose como antes.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

bug
Description

When an admin creates an Optimole account from the plugin dashboard (POST /optml/v1/register_service), Optml_Api::request() returns false if the API answers with an empty body, a non-JSON body (for example a proxy's HTML 502 page), JSON without a code key, or a non-200 code without an error key.

register_service() sends false into the same branch as WP_Error and calls $user->get_error_code() on it. This throws Error: Call to a member function get_error_code() on false. WordPress then returns a 500 "There has been a critical error on this website." and the dashboard shows its generic REST error instead of "Error creating account.".

Expected: when the API returns false, the endpoint should return the normal code: error response ("Error creating account."), as it did up to 3.11.3 and as connect() and select_application() already do.

Step-by-step reproduction instructions
  1. On a test site with Optimole 4.2.17 active and not connected, run this command. It fakes an empty 502 reply from the account API through pre_http_request, so no real request is sent. Replace 1 with an administrator's user ID.
    wp eval '
    add_filter( "pre_http_request", function ( $pre, $args, $url ) {
        return false !== strpos( $url, "complete_register_remote" )
            ? [ "headers" => [], "body" => "", "response" => [ "code" => 502, "message" => "Bad Gateway" ], "cookies" => [], "filename" => null ]
            : $pre;
    }, 10, 3 );
    wp_set_current_user( 1 );
    $r = new WP_REST_Request( "POST", "/optml/v1/register_service" );
    $r->set_param( "email", "[email protected]" );
    var_dump( rest_do_request( $r )->get_data() );
    '
    
  2. Result: PHP Fatal error: Uncaught Error: Call to a member function get_error_code() on false in .../inc/rest.php:468.
  3. Expected: an array with code => error and message => "Error creating account.".
  4. Same outcome without WP-CLI: I loaded the real inc/api.php and inc/rest.php from v4.2.17 with WordPress functions stubbed and called register_service() with canned API bodies (PHP 8.4.19):
    == empty body ==
    UNCAUGHT Error: Call to a member function get_error_code() on false at rest.php:468
    == HTML 502 page from a proxy ==
    UNCAUGHT Error: Call to a member function get_error_code() on false at rest.php:468
    == JSON without code ==
    UNCAUGHT Error: Call to a member function get_error_code() on false at rest.php:468
    == JSON code 500, no error key ==
    UNCAUGHT Error: Call to a member function get_error_code() on false at rest.php:468
    == control: JSON code 400 with error ==
    returned WP_REST_Response {"data":null,"message":"Error creating account. Some API error","code":"error"}
    
Screenshots, screen recording, code snippet or Help Scout ticket

false takes the WP_Error branch and is used as an object:
https://github.com/Codeinwp/optimole-wp/blob/v4.2.17/inc/rest.php#L467-L468

if ( $user === false || is_wp_error( $user ) ) {
    if ( $user->get_error_code() === 'domain_not_accessible' ) {

The same $user->get_error_message() call is repeated at https://github.com/Codeinwp/optimole-wp/blob/v4.2.17/inc/rest.php#L482.

The places where request() returns false:
https://github.com/Codeinwp/optimole-wp/blob/v4.2.17/inc/api.php#L180-L191 and https://github.com/Codeinwp/optimole-wp/blob/v4.2.17/inc/api.php#L217-L228

if ( empty( $response ) ) { return false; }
$response = json_decode( $response, true );
...
if ( ! isset( $response['code'] ) ) { return false; }

The sibling handlers already guard the error-object calls with is_wp_error(): https://github.com/Codeinwp/optimole-wp/blob/v4.2.17/inc/rest.php#L377-L390

Core does not catch the error (call_user_func( $handler['callback'], $request ) in WP_REST_Server::respond_to_request(), wp-includes/rest-api/class-wp-rest-server.php:1293 in WordPress 7.1.3). The fatal handler answers with HTTP 500 (wp-includes/class-wp-fatal-error-handler.php:212).

A likely fix is to only call get_error_code() / get_error_message() when is_wp_error( $user ), and return the plain "Error creating account." response for false.

Environment info
  • Optimole 4.2.17 (the code is the same on master at 63f3f7c)
  • Any WordPress version the plugin supports (5.5 and later; core lines cited from 7.1.3)
  • PHP 7.4 and later. Calling a method on false throws Error on every PHP 7 and 8 version. Reproduced on PHP 8.4.19.
Is the issue you are reporting a regression

Yes. Up to 3.11.3, register_service() returned "Error creating account." for false without calling any method on it (https://github.com/Codeinwp/optimole-wp/blob/v3.11.3/inc/rest.php#L357-L366). The $user->get_error_code() call first ships in 3.12.0.

Found while writing the WordPress compatibility checks for Optimole.

Lenguaje dominante
PHP
Estrellas
74
Forks
14
Merge medio
1 d 22 h
PR fusionados (30 d)
29

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de Codeinwp/optimole-wp

Todos los issues de Codeinwp/optimole-wp

Issues similares

Más issues de PHP

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.