avoid unprintable characters for StringDataType and escape special chars for JSON, formattting
This commit is contained in:
@@ -158,26 +158,36 @@ result_t StringDataType::readSymbols(SymbolString& input, const bool isMaster,
|
|||||||
incr = -1;
|
incr = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (outputFormat & OF_JSON)
|
if (outputFormat & OF_JSON) {
|
||||||
output << '"';
|
output << '"';
|
||||||
|
}
|
||||||
|
output << setfill('0') << (m_isHex ? hex : dec);
|
||||||
for (size_t offset = start, i = 0; i < count; offset += incr, i++) {
|
for (size_t offset = start, i = 0; i < count; offset += incr, i++) {
|
||||||
ch = input[baseOffset + offset];
|
ch = input[baseOffset + offset];
|
||||||
if (m_isHex) {
|
if (m_isHex) {
|
||||||
if (i > 0)
|
if (i > 0)
|
||||||
output << ' ';
|
output << ' ';
|
||||||
output << setw(2) << hex << setfill('0') << static_cast<unsigned>(ch);
|
output << setw(2) << static_cast<unsigned>(ch);
|
||||||
} else {
|
} else {
|
||||||
if (ch < 0x20)
|
if (ch == 0x00) {
|
||||||
ch = (unsigned char)m_replacement;
|
|
||||||
if (ch == 0x00)
|
|
||||||
terminated = true;
|
terminated = true;
|
||||||
else if (!terminated)
|
} else if (!terminated) {
|
||||||
output << setw(0) << dec << static_cast<char>(ch);
|
if (ch < 0x20) {
|
||||||
|
ch = (unsigned char)m_replacement;
|
||||||
|
} else if (!isprint(ch)) {
|
||||||
|
ch = '?';
|
||||||
|
} else if (outputFormat & OF_JSON) {
|
||||||
|
if (ch == '"' || ch == '\\') {
|
||||||
|
output << '\\'; // escape
|
||||||
|
}
|
||||||
|
}
|
||||||
|
output << static_cast<char>(ch);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (outputFormat & OF_JSON)
|
if (outputFormat & OF_JSON) {
|
||||||
output << '"';
|
output << '"';
|
||||||
|
}
|
||||||
return RESULT_OK;
|
return RESULT_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user