2019-04-25 Fred Gleason <fredg@paravelsystems.com>

* Fixed a bug in escaping JSON strings that failed to handle
	control characters properly.
This commit is contained in:
Fred Gleason 2019-04-26 18:27:32 -04:00
parent 62a0914e05
commit f8b223ec05
2 changed files with 29 additions and 10 deletions

View File

@ -18605,3 +18605,6 @@
2019-04-24 Fred Gleason <fredg@paravelsystems.com>
* Removed the 'Cart Data Dump (fixed width)' report from
rdlibrary(1).
2019-04-25 Fred Gleason <fredg@paravelsystems.com>
* Fixed a bug in escaping JSON strings that failed to handle
control characters properly.

View File

@ -1070,23 +1070,39 @@ QString RDJsonField(const QString &name,unsigned value,int padding,bool final)
QString RDJsonField(const QString &name,const QString &value,int padding,
bool final)
{
QString str=value;
QString ret;
QString comma=",";
if(final) {
comma="";
}
str.replace("\\","\\\\");
str.replace("\"","\\\"");
str.replace("/","\\/");
str.replace("\b","\\b");
str.replace("\f","\\f");
str.replace("\n","\\n");
str.replace("\r","\\r");
str.replace("\t","\\t");
for(int i=0;i<value.length();i++) {
QChar c=value.at(i);
switch(c.category()) {
case QChar::Other_Control:
ret+=QString().sprintf("\\u%04X",c.unicode());
break;
return RDJsonPadding(padding)+"\""+name+"\": \""+str+"\""+comma+"\r\n";
default:
switch(c.unicode()) {
case 0x22: // Quote
ret+="\\\"";
break;
case 0x5C: // Backslash
ret+="\\\\";
break;
default:
ret+=c;
break;
}
break;
}
}
return RDJsonPadding(padding)+"\""+name+"\": \""+ret+"\""+comma+"\r\n";
}