JavaScript Bug - deserializeBinary uint64 field to a unsafe int and not correct number
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Anfängerfreundlichkeit
- 35/100
- Issue-Typ
- Bug
- Klarheit
- Muss geklärt werden
- Aktivitätsstatus
- Veraltet
- Tech-Stack
- javascript
- Bereich
- backend-api-design
Rechercherichtung
Beginne mit den uint64-Feldern in InitConnect.proto und verfolge die generierte InitConnect_pb.js durch Response.deserializeBinary() und toObject(). Ermittle, wie Werte jenseits von Number.MAX_SAFE_INTEGER dargestellt werden sollten, und überprüfe anschließend, dass connID einen Roundtrip durchläuft, ohne den ursprünglichen Wert zu ändern.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
I use protoc-3.6.0-osx-x86_64 to convert xx.proto to xx_pb.js and npm install google-protobuf(^3.6.0)
InitConnect.proto
syntax = "proto2";
package InitConnect;
import "Common.proto";
message C2S
{
required int32 clientVer = 1; //客户端版本号,clientVer = "."以前的数 * 100 + "."以后的,举例:1.1版本的clientVer为1 * 100 + 1 = 101,2.21版本为2 * 100 + 21 = 221
required string clientID = 2; //客户端唯一标识,无生具体生成规则,客户端自己保证唯一性即可
optional bool recvNotify = 3; //此连接是否接收市场状态、交易需要重新解锁等等事件通知,true代表接收,FutuOpenD就会向此连接推送这些通知,反之false代表不接收不推送
}
message S2C
{
required int32 serverVer = 1; //FutuOpenD的版本号
required uint64 loginUserID = 2; //FutuOpenD登陆的牛牛用户ID
required uint64 connID = 3; //此连接的连接ID,连接的唯一标识
required string connAESKey = 4; //此连接后续AES加密通信的Key,固定为16字节长字符串
required int32 keepAliveInterval = 5; //心跳保活间隔
}
message Request
{
required C2S c2s = 1;
}
message Response
{
required int32 retType = 1 [default = -400]; //返回结果,参见Common.RetType的枚举定义
optional string retMsg = 2; //返回结果描述
optional int32 errCode = 3; //错误码,客户端一般通过retType和retMsg来判断结果和详情,errCode只做日志记录,仅在个别协议失败时对账用
optional S2C s2c = 4;
}
I convert InitConnect.proto to InitConnect_pb.js And Import it to node.js code
const InitConnectMessage = require("InitConnect_pb.js")
//I get PackageBody_Buffer from net, then deserializeBinary
let ResponseBody_Object = InitConnectMessage.Response.deserializeBinary(PackageBody_Buffer);
ResponseBody_Object = ResponseBody_Object.toObject();
console.log(ResponseBody_Object)
The log is :
{ rettype: 0,
retmsg: '',
errcode: 0,
s2c:
{ serverver: 100,
loginuserid: 2131552,
connid: 167141872653707230,
connaeskey: 'D7279ECAA5CF51E8',
keepaliveinterval: 10 } }
As the result, the deserialized connid is 167141872653707230, more than js Number.MAX_SAFE_INTEGER// → 9_007_199_254_740_991
Moreover the deserialized connid is not equal to the original connid!
- Vorherrschende Sprache
- JavaScript
- Sterne
- 471
- Forks
- 91
- Ø Merge
- 3 Std. 57 Min.
- Gemergte PRs (30 T.)
- 2
Beitragsleitfaden
Für dieses Repository ist kein Beitragsleitfaden indexiert
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus protocolbuffers/protobuf-javascript
-
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 25/100
-
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 30/100
protocolbuffers/protobuf-javascript#248 · 1 Kommentar · 13 Reaktionen ·
-
question
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 45/100
protocolbuffers/protobuf-javascript#222 · 9 Kommentare ·
-
Why map.js sort keys? Offenenhancement port-fix triaged
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 35/100
protocolbuffers/protobuf-javascript#185 · 1 Kommentar ·
-
enhancement port-fix triaged
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 35/100
protocolbuffers/protobuf-javascript#182 · 3 Kommentare · 1 Reaktion ·
Alle Issues in protocolbuffers/protobuf-javascript
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
-
area-deployment area-integrations triage:bot-seen
Schwierigkeit 2/5 Ein halber Tag Anfängerfreundlichkeit 86/100
-
Issue-Bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
sugarlabs/musicblocks#8924 ·
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 90/100
ArduPilot/ardupilot_wiki#8088 ·
-
[BUG] createTool tools cannot be registered with Mastra when exactOptionalPropertyTypes is enabled Offencustomer-eng status: needs triage
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 84/100