Skip to content

[Bug] Emoji triggers PDF-export crash and restarts container (CodiMD 2.6.0) #1932

@AriesyuGTH

Description

@AriesyuGTH

Describe the bug

Exporting a note to PDF in CodiMD 2.6.0 crashes PhantomJS whenever the note contains certain emoji characters, which restarts the whole container.

To Reproduce

  1. Create or edit a note.
  2. Insert any emoji (e.g. 😀).
  3. Click Export → PDF.
  4. The request hangs and the container restarts.

Expected behavior

  • A PDF should be generated successfully.
  • The service should remain online.

Actual behavior

  • PDF generation fails.
  • docker logs show PhantomJS crashing with SIGFPE.
  • The CodiMD container restarts automatically.

Environment

Item Value
CodiMD ver. 2.6.0
Deployment docker-compose
Node ver. 16.20.2 (image default)
Base OS Debian Buster
PDF engine markdown-pdf + PhantomJS

docker-compose excerpt (masked)

click to expand
services:
  codimd:
    image: <PRIVATE_REGISTRY>/hackmdio/hackmd:2.6.0
    environment:
      CMD_URL_PATH: codimd
      CMD_DOMAIN: <YOUR_DOMAIN>
      CMD_PROTOCOL_USESSL: "true"
      QT_QPA_PLATFORM: ""
      # Database
      CMD_DB_URL: postgres://codimd:<MASKED_PW>@codimd_db/codimd
      # Misc
      CMD_EMAIL: "false"
      CMD_PLANTUML_SERVER: https://<YOUR_DOMAIN>/plantuml
      CMD_ALLOW_ANONYMOUS: "false"
      CMD_ALLOW_ANONYMOUS_EDITS: "false"
      CMD_CSP_ENABLE: "false"

Logs (full excerpt)

2025-07-09T06:13:04.445Z info:  <MASKED_IP> - - [09/Jul/2025:06:13:04 +0000] "GET /me HTTP/1.1" 304 - "https://<YOUR_DOMAIN>/codimd/ixLMZtInSNiOnrbOkQ-Q_w" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36 Edg/138.0.0.0"
2025-07-09T06:13:06.517Z info:  <MASKED_IP> - - [09/Jul/2025:06:13:06 +0000] "GET /uploads/upload_845dbee74d2337302b91fb126a4691db.png HTTP/1.1" 200 32405 "https://<YOUR_DOMAIN>/codimd/ixLMZtInSNiOnrbOkQ-Q_w" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36 Edg/138.0.0.0"
2025-07-09T06:13:20.968Z info:  deserializeUser: c35f23dd-2732-46b7-9283-15b14eac234b
2025-07-09T06:13:21.478Z error: uncaughtException: Command failed: /home/hackmd/app/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs /home/hackmd/app/node_modules/markdown-pdf/phantom/render.js /tmp/tmp-<MASKED>.html /tmp/tmp-<MASKED>.pdf /home/hackmd/app /home/hackmd/app/node_modules/markdown-pdf/runnings.js /home/hackmd/app/node_modules/markdown-pdf/css/pdf.css /home/hackmd/app/node_modules/highlight.js/styles/github-gist.css A4 portrait 2cm 0 10000
PhantomJS has crashed. Please read the bug reporting guide at
<http://phantomjs.org/bug-reporting.html> and file a bug report.
Error: Command failed: /home/hackmd/app/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs /home/hackmd/app/node_modules/markdown-pdf/phantom/render.js /tmp/tmp-<MASKED>.html /tmp/tmp-<MASKED>.pdf /home/hackmd/app /home/hackmd/app/node_modules/markdown-pdf/runnings.js /home/hackmd/app/node_modules/markdown-pdf/css/pdf.css /home/hackmd/app/node_modules/highlight.js/styles/github-gist.css A4 portrait 2cm 0 10000
PhantomJS has crashed. Please read the bug reporting guide at
<http://phantomjs.org/bug-reporting.html> and file a bug report.
    at ChildProcess.exithandler (node:child_process:402:12)
    at ChildProcess.emit (node:events:513:28)
    at maybeClose (node:internal/child_process:1100:16)
    at Socket.<anonymous> (node:internal/child_process:458:11)
    at Socket.emit (node:events:513:28)
    at Pipe.<anonymous> (node:net:301:12)
2025-07-09T06:13:21.481Z error:  Process will exit now.
Info: try to connect to tcp://codimd_db in port 5432
2025/07/09 06:13:22 portchecker.go:56: dial tcp codimd_db:5432: connect: connection success

Possible cause / context

  • Matches Rendering Emojis hajareshyam/pdf-creator-node#45 — PhantomJS cannot render certain emoji/Unicode glyphs.
  • Removing all emoji lets the export succeed → strong evidence of an encoding issue.
  • PhantomJS is unmaintained; CodiMD relies on it via markdown-pdf.

Potential solutions

  1. Upgrade to CodiMD 3.x (if it has moved to a Chromium/Puppeteer backend).
  2. Replace PhantomJS with Puppeteer/Playwright in a custom build.
  3. Test latest phantomjs-prebuilt patch to confirm whether the crash persists.

Help wanted

  • Can maintainers reproduce this crash with an emoji-containing note?
  • Is there an official plan to migrate away from PhantomJS?
  • Any patch or workaround would be greatly appreciated.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions