Patch 2017-03-24 15:45 GMT+01:00 Martin Hejnfelt (JIRA) <j...@apache.org>:
> Martin Hejnfelt created THRIFT-4132: > --------------------------------------- > > Summary: Generated JavaScript code is missing a undefined > check > Key: THRIFT-4132 > URL: https://issues.apache.org/jira/browse/THRIFT-4132 > Project: Thrift > Issue Type: Bug > Components: JSON - Compiler > Affects Versions: 0.10.0 > Environment: All > Reporter: Martin Hejnfelt > > > The generated code of a *_result object can take an "args" argument to its > "constructor". However, at least when using WebSocket, the *_result object > is not passed an "args" parameter, hence args is undefined. However the > code still makes an instanceof test on args, causing an exception to be > thrown at least on newer browsers (Tested on Chrome 57 and Firefox 52). > Adding an "args !== undefined &&" in front of this, makes everything work > nicely again. > > > > -- > This message was sent by Atlassian JIRA > (v6.3.15#6346) > -- Martin Hejnfelt
From 2fe2b0fdf0deb0eb6dcfb3989d6e5535bb77adb0 Mon Sep 17 00:00:00 2001 From: Martin Hejnfelt <m...@newtec.dk> Date: Fri, 24 Mar 2017 15:13:37 +0100 Subject: [PATCH] js: Fix missing args !== undefined in generated code The generated JavaScript code in the result.read methods is missing a check if the args parameter is undefined, without this it seems that at least newer js renderers are throwing an exception. --- compiler/cpp/src/thrift/generate/t_js_generator.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/cpp/src/thrift/generate/t_js_generator.cc b/compiler/cpp/src/thrift/generate/t_js_generator.cc index b567181..c272bb2 100644 --- a/compiler/cpp/src/thrift/generate/t_js_generator.cc +++ b/compiler/cpp/src/thrift/generate/t_js_generator.cc @@ -736,7 +736,7 @@ void t_js_generator::generate_js_struct_definition(ofstream& out, for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) { t_type* t = get_true_type((*m_iter)->get_type()); if (t->is_xception()) { - out << indent() << "if (args instanceof " << js_type_namespace(t->get_program()) + out << indent() << "if (args !== undefined && args instanceof " << js_type_namespace(t->get_program()) << t->get_name() << ") {" << endl << indent() << indent() << "this." << (*m_iter)->get_name() << " = args;" << endl << indent() << indent() << "return;" << endl << indent() << "}" << endl; -- 2.1.4