mirror of
https://github.com/baptisteArno/typebot.io.git
synced 2026-06-25 21:01:54 +08:00
🐛 (engine) Sanitize variable value before saving to avoid db insert failure
This commit is contained in:
parent
4e9d4fce0a
commit
b041842e4a
@ -71,8 +71,10 @@ const updateTypebotVariables = ({
|
||||
const serializedNewVariables = newVariables.map((variable) => ({
|
||||
...variable,
|
||||
value: Array.isArray(variable.value)
|
||||
? variable.value.map(safeStringify)
|
||||
: safeStringify(variable.value),
|
||||
? variable.value.map((value) =>
|
||||
sanitizeNewVariableValue(safeStringify(value)),
|
||||
)
|
||||
: sanitizeNewVariableValue(safeStringify(variable.value)),
|
||||
}));
|
||||
|
||||
let setVariableHistoryIndex = state.currentSetVariableHistoryIndex ?? 0;
|
||||
@ -106,3 +108,19 @@ const updateTypebotVariables = ({
|
||||
setVariableHistoryIndex,
|
||||
};
|
||||
};
|
||||
|
||||
const sanitizeNewVariableValue = (value: string | null): string | null =>
|
||||
value ? sanitizeString(value) : null;
|
||||
|
||||
export const sanitizeString = (input: string): string => {
|
||||
// 1. Replace unpaired surrogate halves with <20>
|
||||
let output = input.replace(
|
||||
/([\uD800-\uDBFF](?![\uDC00-\uDFFF]))|((?<![\uD800-\uDBFF])[\uDC00-\uDFFF])/g,
|
||||
"<22>",
|
||||
);
|
||||
|
||||
// 2. Escape lone backslashes that could break downstream JSON parsing
|
||||
output = output.replace(/\\(?![\\ntbrf"'u])/g, "\\\\");
|
||||
|
||||
return output;
|
||||
};
|
||||
|
||||
Loading…
Reference in New Issue
Block a user