Files
miku-discord/readmes/MEMORY_EDITOR_ESCAPING_FIX.md
koko210Serve c708770266 reorganize: consolidate all documentation into readmes/
- Moved 20 root-level markdown files to readmes/
- Includes COMMANDS.md, CONFIG_README.md, all UNO docs, all completion reports
- Added new: MEMORY_EDITOR_FEATURE.md, MEMORY_EDITOR_ESCAPING_FIX.md,
  CONFIG_SOURCES_ANALYSIS.md, MCP_TOOL_CALLING_ANALYSIS.md, and others
- Root directory is now clean of documentation clutter
2026-03-04 00:19:49 +02:00

2.5 KiB

JavaScript String Escaping Bug - FIXED

Issue

When editing memories that contained quotes, newlines, or other special characters, the Edit button would throw:

Uncaught SyntaxError: "" literal not terminated before end of script

Root Cause

The original code passed JSON data directly into the HTML onclick attribute:

const factData = JSON.stringify(fact).replace(/'/g, "\\'");
html += `<button onclick='showEditMemoryModal("declarative", "${fact.id}", ${factData})'>✏️</button>`;

Problem: When the fact content contained characters like:

  • Double quotes: "My favorite song is "Monitoring""
  • Newlines: "Line 1\nLine 2"
  • Backslashes: "Path: C:\Users\Name"

The escaping with .replace(/'/g, "\\'") only handled single quotes, causing syntax errors in the generated HTML.

Solution

Encode the data using encodeURIComponent:

const factDataEncoded = encodeURIComponent(JSON.stringify(fact));
html += `<button onclick='showEditMemoryModal("declarative", "${fact.id}", "${factDataEncoded}")'>✏️</button>`;

Decode in the modal function:

function showEditMemoryModal(collection, pointId, memoryData) {
  const decodedData = typeof memoryData === 'string' ? decodeURIComponent(memoryData) : memoryData;
  const memory = typeof decodedData === 'string' ? JSON.parse(decodedData) : decodedData;
  // ... rest of function
}

Why This Works

  • encodeURIComponent() converts all special characters to URL-safe percent-encoded format
  • The encoded string is safe to use in HTML attributes
  • decodeURIComponent() converts it back to the original JSON string
  • JSON.parse() then converts it to a JavaScript object

Files Modified

  • /bot/static/index.html:
    • Line ~5356: loadFacts() function - changed factData to factDataEncoded
    • Line ~5400: loadEpisodicMemories() function - changed memData to memDataEncoded
    • Line ~5535: showEditMemoryModal() function - added decodeURIComponent step

Testing

Before Fix:

// Memory with quotes
Content: 'My favorite song is "Monitoring"'
Result:  Syntax error when clicking Edit button

After Fix:

// Memory with quotes
Content: 'My favorite song is "Monitoring"'
Encoded: 'My%20favorite%20song%20is%20%22Monitoring%22'
Result:  Modal opens correctly with content displayed

Status

FIXED - Encoding/decoding properly handles all special characters

Restart Required

After making these changes, restart the container:

docker restart miku-bot