You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Xiao Wang (JIRA)" <ji...@apache.org> on 2019/01/07 09:31:00 UTC
[jira] [Created] (THRIFT-4727) javascript compiler generates struct
code with duplicate `case 0` statements
Xiao Wang created THRIFT-4727:
---------------------------------
Summary: javascript compiler generates struct code with duplicate `case 0` statements
Key: THRIFT-4727
URL: https://issues.apache.org/jira/browse/THRIFT-4727
Project: Thrift
Issue Type: Bug
Components: JavaScript - Compiler
Affects Versions: 0.11.0, 0.10.0, 0.9, 0.8, 0.7
Reporter: Xiao Wang
*Reproducible steps:*
Javascript compiler would always generate duplicate `case 0` codes;
1. Below is a demo IDL file:
{code:java}
// test.thrift
struct Obj {
1: string name;
}
service Test {
Obj test()
}
{code}
2. Generate code using
{code:java}
thrift -r --gen js:node test.thrift{code}
3. The related problematic code is like below:
{code:java}
// part of Test.js
......
Test_test_result.prototype.read = function(input) {
input.readStructBegin();
while (true)
{
var ret = input.readFieldBegin();
var fname = ret.fname;
var ftype = ret.ftype;
var fid = ret.fid;
if (ftype == Thrift.Type.STOP) {
break;
}
switch (fid)
{
case 0:
if (ftype == Thrift.Type.STRUCT) {
this.success = new ttypes.Obj();
this.success.read(input);
} else {
input.skip(ftype);
}
break;
case 0:
input.skip(ftype);
break;
default:
input.skip(ftype);
}
input.readFieldEnd();
}
input.readStructEnd();
return;
};
......{code}
*_Root cause:_*
The code makes this bug was imported due to bugfix [THRIFT-1089|https://issues.apache.org/jira/browse/THRIFT-1089].
Commit address:[https://github.com/apache/thrift/commit/da6e6ae91894bc52fc04234fbd2610f8969399f4.]
*_Potential fix:_*
I think remove below code should fix this problem:
{code:java}
if (fields.size() == 1) {
// pseudo case to make jslint happy
indent(out) << "case 0:" << endl;
indent(out) << " input.skip(ftype);" << endl;
indent(out) << " break;" << endl;
}
{code}
This code seems to satisfy jslint about 8 years ago, but now this also fails the static code scan both in jslint and sonarqube default profile.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)