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

Reply via email to