[
https://issues.apache.org/jira/browse/THRIFT-4278?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jens Geyer updated THRIFT-4278:
-------------------------------
Description:
Create TBufferedTransport by using its receiver funciton. and using
TCompactProtocol to communicate. But this object lack of `rstack` and `rpos`.
It make app crash.
details:
{code}
struct CliRoomData
{
10: i32 roomId
20: string roomName
30: i32 masterUserId
40: map<i32, CliRoomUserData> mapUserData // key:
user id value: CliRoomUserData
50: map<i32, CliRoomLevelData> mapLevelData // key:
level id value: CliRoomLevelData
60: optional string groupId
}
{code}
generated code which crashes the app:
{code}
// input haven't property `rstack` and `rpos`
if (input.rstack.length > input.rpos[input.rpos.length -1] + 1) {
input.rstack.pop();
}
{code}
code about the crash
{code}
const entity = new Protocols[className]() // create the thrift object to read
from protocol
return new Promise((resolve, reject) => {
const receiver = thrift.TBufferedTransport.receiver((reader) => { //
create buffered using library
const protocol = new thrift.TCompactProtocol(reader)
entity.read(protocol) // crash the app
resolve(entity)
})
receiver(payload)
})
{code}
was:
Create TBufferedTransport by using its receiver funciton. and using
TCompactProtocol to communicate. But this object lack of `rstack` and `rpos`.
It make app crash.
details:
{code title:thrift file}
struct CliRoomData
{
10: i32 roomId
20: string roomName
30: i32 masterUserId
40: map<i32, CliRoomUserData> mapUserData // key:
user id value: CliRoomUserData
50: map<i32, CliRoomLevelData> mapLevelData // key:
level id value: CliRoomLevelData
60: optional string groupId
}
{code}
generated code which crashes the app:
{code}
// input haven't property `rstack` and `rpos`
if (input.rstack.length > input.rpos[input.rpos.length -1] + 1) {
input.rstack.pop();
}
{code}
code about the crash
{code}
const entity = new Protocols[className]() // create the thrift object to read
from protocol
return new Promise((resolve, reject) => {
const receiver = thrift.TBufferedTransport.receiver((reader) => { //
create buffered using library
const protocol = new thrift.TCompactProtocol(reader)
entity.read(protocol) // crash the app
resolve(entity)
})
receiver(payload)
})
{code}
> Thrift Node.js library crashes app
> ----------------------------------
>
> Key: THRIFT-4278
> URL: https://issues.apache.org/jira/browse/THRIFT-4278
> Project: Thrift
> Issue Type: Bug
> Components: Node.js - Library
> Affects Versions: 0.10.0
> Reporter: TianYI Wen
>
> Create TBufferedTransport by using its receiver funciton. and using
> TCompactProtocol to communicate. But this object lack of `rstack` and `rpos`.
> It make app crash.
> details:
> {code}
> struct CliRoomData
> {
> 10: i32 roomId
> 20: string roomName
> 30: i32 masterUserId
> 40: map<i32, CliRoomUserData> mapUserData // key:
> user id value: CliRoomUserData
> 50: map<i32, CliRoomLevelData> mapLevelData // key:
> level id value: CliRoomLevelData
> 60: optional string groupId
> }
> {code}
> generated code which crashes the app:
> {code}
> // input haven't property `rstack` and `rpos`
> if (input.rstack.length > input.rpos[input.rpos.length -1] + 1) {
> input.rstack.pop();
> }
> {code}
> code about the crash
> {code}
> const entity = new Protocols[className]() // create the thrift object to
> read from protocol
> return new Promise((resolve, reject) => {
> const receiver = thrift.TBufferedTransport.receiver((reader) => { //
> create buffered using library
> const protocol = new thrift.TCompactProtocol(reader)
> entity.read(protocol) // crash the app
> resolve(entity)
> })
> receiver(payload)
> })
> {code}
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)