mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge
synced 2024-09-10 08:16:48 +02:00
Bangle.js - fix corruption in images with a certain sequence of chars
This commit is contained in:
parent
ae3fc3ed48
commit
4c27f43fea
@ -283,19 +283,34 @@ public class BangleJSDeviceSupport extends AbstractBTLEDeviceSupport {
|
|||||||
/* Convert a string, escaping chars we can't send over out UART connection */
|
/* Convert a string, escaping chars we can't send over out UART connection */
|
||||||
String s = (String)v;
|
String s = (String)v;
|
||||||
String json = "\"";
|
String json = "\"";
|
||||||
|
//String rawString = "";
|
||||||
for (int i=0;i<s.length();i++) {
|
for (int i=0;i<s.length();i++) {
|
||||||
int ch = (int)s.charAt(i);
|
int ch = (int)s.charAt(i); // 0..255
|
||||||
if (ch<8) json += "\\"+ch;
|
int nextCh = (int)(i+1<s.length() ? s.charAt(i+1) : 0); // 0..255
|
||||||
else if (ch==8) json += "\\b";
|
//rawString = rawString+ch+",";
|
||||||
|
if (ch<8) {
|
||||||
|
// if the next character is a digit, it'd be interpreted
|
||||||
|
// as a 2 digit octal character, so we can't use `\0` to escape it
|
||||||
|
if (nextCh>='0' && nextCh<='7') json += "\\x0" + ch;
|
||||||
|
else json += "\\" + ch;
|
||||||
|
} else if (ch==8) json += "\\b";
|
||||||
else if (ch==9) json += "\\t";
|
else if (ch==9) json += "\\t";
|
||||||
else if (ch==10) json += "\\n";
|
else if (ch==10) json += "\\n";
|
||||||
else if (ch==11) json += "\\v";
|
else if (ch==11) json += "\\v";
|
||||||
else if (ch==12) json += "\\f";
|
else if (ch==12) json += "\\f";
|
||||||
else if (ch==34) json += "\\\""; // quote
|
else if (ch==34) json += "\\\""; // quote
|
||||||
else if (ch==92) json += "\\\\"; // slash
|
else if (ch==92) json += "\\\\"; // slash
|
||||||
else if (ch<32 || ch==26 || ch==27 || ch==127 || ch==173) json += "\\x"+Integer.toHexString((ch&255)|256).substring(1);
|
else if (ch<32 || ch==127 || ch==173)
|
||||||
|
json += "\\x"+Integer.toHexString((ch&255)|256).substring(1);
|
||||||
else json += s.charAt(i);
|
else json += s.charAt(i);
|
||||||
}
|
}
|
||||||
|
// if it was less characters to send base64, do that!
|
||||||
|
if (json.length() > 5+(s.length()*4/3)) {
|
||||||
|
byte[] bytes = s.getBytes(StandardCharsets.ISO_8859_1);
|
||||||
|
return "atob(\""+Base64.encodeToString(bytes, Base64.DEFAULT).replaceAll("\n","")+"\")";
|
||||||
|
}
|
||||||
|
// for debugging...
|
||||||
|
//addReceiveHistory("\n---------------------\n"+rawString+"\n---------------------\n");
|
||||||
return json + "\"";
|
return json + "\"";
|
||||||
} else if (v instanceof JSONArray) {
|
} else if (v instanceof JSONArray) {
|
||||||
JSONArray a = (JSONArray)v;
|
JSONArray a = (JSONArray)v;
|
||||||
|
Loading…
Reference in New Issue
Block a user