Skip to content

Frontend chart rendering fatals when settings series is false #1368

Description

@pirate-bot

Summary

Rendering a Visualizer chart can terminate the frontend request with TypeError: count(): Argument #1 ($value) must be of type Countable|array, bool given when the chart's stored settings contain a boolean series value.

Expected behavior: a chart with an invalid or legacy series-settings value is handled without a fatal frontend error.

Actual behavior: the chart shortcode triggers an uncaught TypeError before the chart is rendered.

Impact: affected pages fail during content rendering; telemetry recorded 1,624 occurrences across two sites.

Customer context

  • Product / area: Visualizer frontend shortcode rendering
  • Version: 4.0.7
  • Environment: WordPress 6.8.8, PHP 8.1.34
  • Integration / third party: The representative trace includes Avada/Fusion Builder shortcode rendering; the failure originates in Visualizer.
  • Reported error / symptom: count() received bool in Visualizer frontend chart-data processing.
  • Impact: 1,624 telemetry occurrences across 2 sites between 2026-08-27 and 2026-08-29.

Reproduction notes

  1. Create or identify a Visualizer chart with stored visualizer-settings containing a series key whose value is false.
  2. Render that chart through the [visualizer id="..."] shortcode on a PHP 8.1 site.
  3. Observed in production telemetry: frontend rendering reaches getChartData() and throws the reported count() TypeError.

Local runtime reproduction was not performed; the production stack trace and v4.0.7 source directly match this input path.

Diagnosis

Conclusion

Telemetry records an uncaught TypeError in Visualizer_Module_Frontend::getChartData() while rendering a frontend shortcode. The inspected v4.0.7 code calls count( $settings['series'] ) after only checking that the key exists, not that its value is countable. Since the captured argument is bool, this exact branch can fatal on PHP 8.1.

Where this likely occurs

  • classes/Visualizer/Module/Frontend.phpVisualizer_Module_Frontend::renderChart() lines 302-340 invokes getChartData() before rendering the shortcode output.
  • classes/Visualizer/Module/Frontend.phpVisualizer_Module_Frontend::getChartData() lines 734-775 loads visualizer-settings; lines 753-759 call count() on settings['series'] and then mutate it.
  • Git history attributes that block to commit 8dc5344cd (Fix chart render issue on frontend side), and it is present from v3.7.1 through v4.0.7. No release boundary showing a previously working product version was identified.

Engineering notes

  • The source path is Visualizer free-plugin code, not the bundled Themeisle SDK; telemetry also marks SDK involvement as false.
  • The guard at line 753 only establishes key presence. It permits a stored boolean value to reach PHP's count() call.
  • The trace reaches Visualizer from nested Fusion Builder shortcodes, but Visualizer's own frontend method is the direct fatal location. The inspected path does not establish whether the invalid metadata was created by Visualizer, an older release, a Pro workflow, or another integration.

Test coverage status

  • tests/test-ajax.php lines 100-134 covers settings sanitization through the classic editor save route.
  • No relevant frontend shortcode or getChartData() coverage was found during inspection. The inspected test coverage does not exercise a stored visualizer-settings value whose series key is boolean.

What to verify or explore next

  • Reproduce with a Visualizer chart whose stored settings include series => false, then render [visualizer id="..."] on PHP 8.1.
  • Check comparable chart metadata created by classic editor, Gutenberg, import, and Pro-enabled workflows.
  • Run the PHPUnit suite, with focused coverage around frontend shortcode rendering if such a suite exists outside the inspected paths.

Unknowns / follow-up

  • The available telemetry does not include the affected chart metadata or the workflow that persisted the boolean value.
  • The current inspection did not reproduce against a local WordPress runtime.

Confidence

Confidence: 98/100

Production telemetry provides a repeatable PHP 8.1 fatal at Visualizer's own frontend chart-data method, and the inspected v4.0.7 source passes settings['series'] to count() without validating it is countable. The telemetry's boolean argument proves this reachable input shape.

Crash telemetry

Occurrences 1624
Distinct sites 2
First seen 2026-08-27 21:59 UTC
Last seen 2026-08-29 05:29 UTC
Crash location product:classes/Visualizer/Module/Frontend.php:753
Request context frontend
Inside Themeisle SDK no
Product versions 4.0.7
WP versions 6.8.8
PHP versions 8.1.34
SDK versions 3.3.57

Source: automated crash report — visualizer, fingerprint be99bfef9b69efe3a682acbc2c11761c
Generated by bug-report-triage (ID: bug-report-triage_6a9275bdde8d92.68013411)

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions