Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
-
None
Description
We have PHP frontend and Java backend. Thrift is used for interaction between the two, entities are serialized and deserialized using TJsonProtocol.
Whenever a string in a thrift entity contains a slash "/", PHP's implementation, that uses json_encode under the hood, escapes it:
"Translation eng/rus" => "Translation eng\/rus". So the payload may look like this:
{"1":{"str":"Translation rus\/eng"}}
(assuming that the entity only has this one string property)
Java cannot handle this input and fails with:
org.apache.thrift.protocol.TProtocolException: Expected control char
Java does not allow a slash to be escaped.
Thrift version is 0.9.1
Any advice on what to do for a temporary solution? Should we fix Java side or PHP side?
As per json.org, a slash CAN be escaped. To me it looks more like Java is not standard compliant in this case. At the same time, however, I don't like the ambiguity of the standard allowing both unescaped and escaped slash.