From 621e2e71c86eb2fbc0155686959a67c2f6edc0b2 Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 4 Apr 2023 16:35:50 +0200 Subject: [PATCH] JS: Don't try to parse "get=" as a method prop --- .../src/com/semmle/jcorn/Parser.java | 1 + .../tests/exprs/output/trap/patterns.js.trap | 550 ++++++++++++++++-- 2 files changed, 516 insertions(+), 35 deletions(-) diff --git a/javascript/extractor/src/com/semmle/jcorn/Parser.java b/javascript/extractor/src/com/semmle/jcorn/Parser.java index a5a6dc4e0d1..aac1c425e77 100644 --- a/javascript/extractor/src/com/semmle/jcorn/Parser.java +++ b/javascript/extractor/src/com/semmle/jcorn/Parser.java @@ -2069,6 +2069,7 @@ public class Parser { pi.value = this.parseMethod(pi.isGenerator, pi.isAsync); } else if (this.options.ecmaVersion() >= 5 && !pi.computed + && !pi.isPattern && pi.key instanceof Identifier && (((Identifier) pi.key).getName().equals("get") || ((Identifier) pi.key).getName().equals("set")) diff --git a/javascript/extractor/tests/exprs/output/trap/patterns.js.trap b/javascript/extractor/tests/exprs/output/trap/patterns.js.trap index b368d0e2d43..18c8b4851ed 100644 --- a/javascript/extractor/tests/exprs/output/trap/patterns.js.trap +++ b/javascript/extractor/tests/exprs/output/trap/patterns.js.trap @@ -9,40 +9,520 @@ hasLocation(#10000,#10002) #20000=@"global_scope" scopes(#20000,0) #20001=@"script;{#10000},1,1" +#20002=* +lines(#20002,#20001,"var { get, set } = x;"," +") +#20003=@"loc,{#10000},1,1,1,21" +locations_default(#20003,#10000,1,1,1,21) +hasLocation(#20002,#20003) +#20004=* +lines(#20004,#20001,"var { get = 1 } = x;"," +") +#20005=@"loc,{#10000},2,1,2,20" +locations_default(#20005,#10000,2,1,2,20) +hasLocation(#20004,#20005) +#20006=* +lines(#20006,#20001,"var { set = 1 } = x;"," +") +#20007=@"loc,{#10000},3,1,3,20" +locations_default(#20007,#10000,3,1,3,20) +hasLocation(#20006,#20007) +#20008=* +lines(#20008,#20001,"var { get = 1, set = 1 } = x;"," +") +#20009=@"loc,{#10000},4,1,4,29" +locations_default(#20009,#10000,4,1,4,29) +hasLocation(#20008,#20009) +numlines(#20001,4,4,0) +#20010=* +tokeninfo(#20010,7,#20001,0,"var") +#20011=@"loc,{#10000},1,1,1,3" +locations_default(#20011,#10000,1,1,1,3) +hasLocation(#20010,#20011) +#20012=* +tokeninfo(#20012,8,#20001,1,"{") +#20013=@"loc,{#10000},1,5,1,5" +locations_default(#20013,#10000,1,5,1,5) +hasLocation(#20012,#20013) +#20014=* +tokeninfo(#20014,6,#20001,2,"get") +#20015=@"loc,{#10000},1,7,1,9" +locations_default(#20015,#10000,1,7,1,9) +hasLocation(#20014,#20015) +#20016=* +tokeninfo(#20016,8,#20001,3,",") +#20017=@"loc,{#10000},1,10,1,10" +locations_default(#20017,#10000,1,10,1,10) +hasLocation(#20016,#20017) +#20018=* +tokeninfo(#20018,6,#20001,4,"set") +#20019=@"loc,{#10000},1,12,1,14" +locations_default(#20019,#10000,1,12,1,14) +hasLocation(#20018,#20019) +#20020=* +tokeninfo(#20020,8,#20001,5,"}") +#20021=@"loc,{#10000},1,16,1,16" +locations_default(#20021,#10000,1,16,1,16) +hasLocation(#20020,#20021) +#20022=* +tokeninfo(#20022,8,#20001,6,"=") +#20023=@"loc,{#10000},1,18,1,18" +locations_default(#20023,#10000,1,18,1,18) +hasLocation(#20022,#20023) +#20024=* +tokeninfo(#20024,6,#20001,7,"x") +#20025=@"loc,{#10000},1,20,1,20" +locations_default(#20025,#10000,1,20,1,20) +hasLocation(#20024,#20025) +#20026=* +tokeninfo(#20026,8,#20001,8,";") +#20027=@"loc,{#10000},1,21,1,21" +locations_default(#20027,#10000,1,21,1,21) +hasLocation(#20026,#20027) +#20028=* +tokeninfo(#20028,7,#20001,9,"var") +#20029=@"loc,{#10000},2,1,2,3" +locations_default(#20029,#10000,2,1,2,3) +hasLocation(#20028,#20029) +#20030=* +tokeninfo(#20030,8,#20001,10,"{") +#20031=@"loc,{#10000},2,5,2,5" +locations_default(#20031,#10000,2,5,2,5) +hasLocation(#20030,#20031) +#20032=* +tokeninfo(#20032,6,#20001,11,"get") +#20033=@"loc,{#10000},2,7,2,9" +locations_default(#20033,#10000,2,7,2,9) +hasLocation(#20032,#20033) +#20034=* +tokeninfo(#20034,8,#20001,12,"=") +#20035=@"loc,{#10000},2,11,2,11" +locations_default(#20035,#10000,2,11,2,11) +hasLocation(#20034,#20035) +#20036=* +tokeninfo(#20036,3,#20001,13,"1") +#20037=@"loc,{#10000},2,13,2,13" +locations_default(#20037,#10000,2,13,2,13) +hasLocation(#20036,#20037) +#20038=* +tokeninfo(#20038,8,#20001,14,"}") +#20039=@"loc,{#10000},2,15,2,15" +locations_default(#20039,#10000,2,15,2,15) +hasLocation(#20038,#20039) +#20040=* +tokeninfo(#20040,8,#20001,15,"=") +#20041=@"loc,{#10000},2,17,2,17" +locations_default(#20041,#10000,2,17,2,17) +hasLocation(#20040,#20041) +#20042=* +tokeninfo(#20042,6,#20001,16,"x") +#20043=@"loc,{#10000},2,19,2,19" +locations_default(#20043,#10000,2,19,2,19) +hasLocation(#20042,#20043) +#20044=* +tokeninfo(#20044,8,#20001,17,";") +#20045=@"loc,{#10000},2,20,2,20" +locations_default(#20045,#10000,2,20,2,20) +hasLocation(#20044,#20045) +#20046=* +tokeninfo(#20046,7,#20001,18,"var") +#20047=@"loc,{#10000},3,1,3,3" +locations_default(#20047,#10000,3,1,3,3) +hasLocation(#20046,#20047) +#20048=* +tokeninfo(#20048,8,#20001,19,"{") +#20049=@"loc,{#10000},3,5,3,5" +locations_default(#20049,#10000,3,5,3,5) +hasLocation(#20048,#20049) +#20050=* +tokeninfo(#20050,6,#20001,20,"set") +#20051=@"loc,{#10000},3,7,3,9" +locations_default(#20051,#10000,3,7,3,9) +hasLocation(#20050,#20051) +#20052=* +tokeninfo(#20052,8,#20001,21,"=") +#20053=@"loc,{#10000},3,11,3,11" +locations_default(#20053,#10000,3,11,3,11) +hasLocation(#20052,#20053) +#20054=* +tokeninfo(#20054,3,#20001,22,"1") +#20055=@"loc,{#10000},3,13,3,13" +locations_default(#20055,#10000,3,13,3,13) +hasLocation(#20054,#20055) +#20056=* +tokeninfo(#20056,8,#20001,23,"}") +#20057=@"loc,{#10000},3,15,3,15" +locations_default(#20057,#10000,3,15,3,15) +hasLocation(#20056,#20057) +#20058=* +tokeninfo(#20058,8,#20001,24,"=") +#20059=@"loc,{#10000},3,17,3,17" +locations_default(#20059,#10000,3,17,3,17) +hasLocation(#20058,#20059) +#20060=* +tokeninfo(#20060,6,#20001,25,"x") +#20061=@"loc,{#10000},3,19,3,19" +locations_default(#20061,#10000,3,19,3,19) +hasLocation(#20060,#20061) +#20062=* +tokeninfo(#20062,8,#20001,26,";") +#20063=@"loc,{#10000},3,20,3,20" +locations_default(#20063,#10000,3,20,3,20) +hasLocation(#20062,#20063) +#20064=* +tokeninfo(#20064,7,#20001,27,"var") +#20065=@"loc,{#10000},4,1,4,3" +locations_default(#20065,#10000,4,1,4,3) +hasLocation(#20064,#20065) +#20066=* +tokeninfo(#20066,8,#20001,28,"{") +#20067=@"loc,{#10000},4,5,4,5" +locations_default(#20067,#10000,4,5,4,5) +hasLocation(#20066,#20067) +#20068=* +tokeninfo(#20068,6,#20001,29,"get") +#20069=@"loc,{#10000},4,7,4,9" +locations_default(#20069,#10000,4,7,4,9) +hasLocation(#20068,#20069) +#20070=* +tokeninfo(#20070,8,#20001,30,"=") +#20071=@"loc,{#10000},4,11,4,11" +locations_default(#20071,#10000,4,11,4,11) +hasLocation(#20070,#20071) +#20072=* +tokeninfo(#20072,3,#20001,31,"1") +#20073=@"loc,{#10000},4,13,4,13" +locations_default(#20073,#10000,4,13,4,13) +hasLocation(#20072,#20073) +#20074=* +tokeninfo(#20074,8,#20001,32,",") +#20075=@"loc,{#10000},4,14,4,14" +locations_default(#20075,#10000,4,14,4,14) +hasLocation(#20074,#20075) +#20076=* +tokeninfo(#20076,6,#20001,33,"set") +#20077=@"loc,{#10000},4,16,4,18" +locations_default(#20077,#10000,4,16,4,18) +hasLocation(#20076,#20077) +#20078=* +tokeninfo(#20078,8,#20001,34,"=") +#20079=@"loc,{#10000},4,20,4,20" +locations_default(#20079,#10000,4,20,4,20) +hasLocation(#20078,#20079) +#20080=* +tokeninfo(#20080,3,#20001,35,"1") +#20081=@"loc,{#10000},4,22,4,22" +locations_default(#20081,#10000,4,22,4,22) +hasLocation(#20080,#20081) +#20082=* +tokeninfo(#20082,8,#20001,36,"}") +#20083=@"loc,{#10000},4,24,4,24" +locations_default(#20083,#10000,4,24,4,24) +hasLocation(#20082,#20083) +#20084=* +tokeninfo(#20084,8,#20001,37,"=") +#20085=@"loc,{#10000},4,26,4,26" +locations_default(#20085,#10000,4,26,4,26) +hasLocation(#20084,#20085) +#20086=* +tokeninfo(#20086,6,#20001,38,"x") +#20087=@"loc,{#10000},4,28,4,28" +locations_default(#20087,#10000,4,28,4,28) +hasLocation(#20086,#20087) +#20088=* +tokeninfo(#20088,8,#20001,39,";") +#20089=@"loc,{#10000},4,29,4,29" +locations_default(#20089,#10000,4,29,4,29) +hasLocation(#20088,#20089) +#20090=* +tokeninfo(#20090,0,#20001,40,"") +#20091=@"loc,{#10000},5,1,5,0" +locations_default(#20091,#10000,5,1,5,0) +hasLocation(#20090,#20091) toplevels(#20001,0) -#20002=@"loc,{#10000},1,1,1,1" -locations_default(#20002,#10000,1,1,1,1) -hasLocation(#20001,#20002) -#20003=* -js_parse_errors(#20003,#20001,"Error: Unexpected token","var { get = 1 } = x; -") -#20004=@"loc,{#10000},2,11,2,11" -locations_default(#20004,#10000,2,11,2,11) -hasLocation(#20003,#20004) -#20005=* -lines(#20005,#20001,"var { get, set } = x;"," -") -#20006=@"loc,{#10000},1,1,1,21" -locations_default(#20006,#10000,1,1,1,21) -hasLocation(#20005,#20006) -#20007=* -lines(#20007,#20001,"var { get = 1 } = x;"," -") -#20008=@"loc,{#10000},2,1,2,20" -locations_default(#20008,#10000,2,1,2,20) -hasLocation(#20007,#20008) -#20009=* -lines(#20009,#20001,"var { set = 1 } = x;"," -") -#20010=@"loc,{#10000},3,1,3,20" -locations_default(#20010,#10000,3,1,3,20) -hasLocation(#20009,#20010) -#20011=* -lines(#20011,#20001,"var { get = 1, set = 1 } = x;"," -") -#20012=@"loc,{#10000},4,1,4,29" -locations_default(#20012,#10000,4,1,4,29) -hasLocation(#20011,#20012) -numlines(#20001,4,0,0) -numlines(#10000,4,0,0) +#20092=@"loc,{#10000},1,1,5,0" +locations_default(#20092,#10000,1,1,5,0) +hasLocation(#20001,#20092) +#20093=@"var;{get};{#20000}" +variables(#20093,"get",#20000) +#20094=@"var;{set};{#20000}" +variables(#20094,"set",#20000) +#20095=* +stmts(#20095,18,#20001,0,"var { g ... } = x;") +hasLocation(#20095,#20003) +stmt_containers(#20095,#20001) +#20096=* +exprs(#20096,64,#20095,0,"{ get, set } = x") +#20097=@"loc,{#10000},1,5,1,20" +locations_default(#20097,#10000,1,5,1,20) +hasLocation(#20096,#20097) +enclosing_stmt(#20096,#20095) +expr_containers(#20096,#20001) +#20098=* +exprs(#20098,68,#20096,0,"{ get, set }") +#20099=@"loc,{#10000},1,5,1,16" +locations_default(#20099,#10000,1,5,1,16) +hasLocation(#20098,#20099) +enclosing_stmt(#20098,#20095) +expr_containers(#20098,#20001) +#20100=* +properties(#20100,#20098,0,0,"get") +hasLocation(#20100,#20015) +#20101=* +exprs(#20101,0,#20100,0,"get") +hasLocation(#20101,#20015) +enclosing_stmt(#20101,#20095) +expr_containers(#20101,#20001) +literals("get","get",#20101) +#20102=* +exprs(#20102,78,#20100,1,"get") +hasLocation(#20102,#20015) +enclosing_stmt(#20102,#20095) +expr_containers(#20102,#20001) +literals("get","get",#20102) +decl(#20102,#20093) +#20103=* +properties(#20103,#20098,1,0,"set") +hasLocation(#20103,#20019) +#20104=* +exprs(#20104,0,#20103,0,"set") +hasLocation(#20104,#20019) +enclosing_stmt(#20104,#20095) +expr_containers(#20104,#20001) +literals("set","set",#20104) +#20105=* +exprs(#20105,78,#20103,1,"set") +hasLocation(#20105,#20019) +enclosing_stmt(#20105,#20095) +expr_containers(#20105,#20001) +literals("set","set",#20105) +decl(#20105,#20094) +#20106=* +exprs(#20106,79,#20096,1,"x") +hasLocation(#20106,#20025) +enclosing_stmt(#20106,#20095) +expr_containers(#20106,#20001) +literals("x","x",#20106) +#20107=@"var;{x};{#20000}" +variables(#20107,"x",#20000) +bind(#20106,#20107) +#20108=* +stmts(#20108,18,#20001,1,"var { get = 1 } = x;") +hasLocation(#20108,#20005) +stmt_containers(#20108,#20001) +#20109=* +exprs(#20109,64,#20108,0,"{ get = 1 } = x") +#20110=@"loc,{#10000},2,5,2,19" +locations_default(#20110,#10000,2,5,2,19) +hasLocation(#20109,#20110) +enclosing_stmt(#20109,#20108) +expr_containers(#20109,#20001) +#20111=* +exprs(#20111,68,#20109,0,"{ get = 1 }") +#20112=@"loc,{#10000},2,5,2,15" +locations_default(#20112,#10000,2,5,2,15) +hasLocation(#20111,#20112) +enclosing_stmt(#20111,#20108) +expr_containers(#20111,#20001) +#20113=* +properties(#20113,#20111,0,0,"get = 1") +#20114=@"loc,{#10000},2,7,2,13" +locations_default(#20114,#10000,2,7,2,13) +hasLocation(#20113,#20114) +#20115=* +exprs(#20115,0,#20113,0,"get") +hasLocation(#20115,#20033) +enclosing_stmt(#20115,#20108) +expr_containers(#20115,#20001) +literals("get","get",#20115) +#20116=* +exprs(#20116,78,#20113,1,"get") +hasLocation(#20116,#20033) +enclosing_stmt(#20116,#20108) +expr_containers(#20116,#20001) +literals("get","get",#20116) +decl(#20116,#20093) +#20117=* +exprs(#20117,3,#20113,2,"1") +hasLocation(#20117,#20037) +enclosing_stmt(#20117,#20108) +expr_containers(#20117,#20001) +literals("1","1",#20117) +#20118=* +exprs(#20118,79,#20109,1,"x") +hasLocation(#20118,#20043) +enclosing_stmt(#20118,#20108) +expr_containers(#20118,#20001) +literals("x","x",#20118) +bind(#20118,#20107) +#20119=* +stmts(#20119,18,#20001,2,"var { set = 1 } = x;") +hasLocation(#20119,#20007) +stmt_containers(#20119,#20001) +#20120=* +exprs(#20120,64,#20119,0,"{ set = 1 } = x") +#20121=@"loc,{#10000},3,5,3,19" +locations_default(#20121,#10000,3,5,3,19) +hasLocation(#20120,#20121) +enclosing_stmt(#20120,#20119) +expr_containers(#20120,#20001) +#20122=* +exprs(#20122,68,#20120,0,"{ set = 1 }") +#20123=@"loc,{#10000},3,5,3,15" +locations_default(#20123,#10000,3,5,3,15) +hasLocation(#20122,#20123) +enclosing_stmt(#20122,#20119) +expr_containers(#20122,#20001) +#20124=* +properties(#20124,#20122,0,0,"set = 1") +#20125=@"loc,{#10000},3,7,3,13" +locations_default(#20125,#10000,3,7,3,13) +hasLocation(#20124,#20125) +#20126=* +exprs(#20126,0,#20124,0,"set") +hasLocation(#20126,#20051) +enclosing_stmt(#20126,#20119) +expr_containers(#20126,#20001) +literals("set","set",#20126) +#20127=* +exprs(#20127,78,#20124,1,"set") +hasLocation(#20127,#20051) +enclosing_stmt(#20127,#20119) +expr_containers(#20127,#20001) +literals("set","set",#20127) +decl(#20127,#20094) +#20128=* +exprs(#20128,3,#20124,2,"1") +hasLocation(#20128,#20055) +enclosing_stmt(#20128,#20119) +expr_containers(#20128,#20001) +literals("1","1",#20128) +#20129=* +exprs(#20129,79,#20120,1,"x") +hasLocation(#20129,#20061) +enclosing_stmt(#20129,#20119) +expr_containers(#20129,#20001) +literals("x","x",#20129) +bind(#20129,#20107) +#20130=* +stmts(#20130,18,#20001,3,"var { g ... } = x;") +hasLocation(#20130,#20009) +stmt_containers(#20130,#20001) +#20131=* +exprs(#20131,64,#20130,0,"{ get = ... 1 } = x") +#20132=@"loc,{#10000},4,5,4,28" +locations_default(#20132,#10000,4,5,4,28) +hasLocation(#20131,#20132) +enclosing_stmt(#20131,#20130) +expr_containers(#20131,#20001) +#20133=* +exprs(#20133,68,#20131,0,"{ get = 1, set = 1 }") +#20134=@"loc,{#10000},4,5,4,24" +locations_default(#20134,#10000,4,5,4,24) +hasLocation(#20133,#20134) +enclosing_stmt(#20133,#20130) +expr_containers(#20133,#20001) +#20135=* +properties(#20135,#20133,0,0,"get = 1") +#20136=@"loc,{#10000},4,7,4,13" +locations_default(#20136,#10000,4,7,4,13) +hasLocation(#20135,#20136) +#20137=* +exprs(#20137,0,#20135,0,"get") +hasLocation(#20137,#20069) +enclosing_stmt(#20137,#20130) +expr_containers(#20137,#20001) +literals("get","get",#20137) +#20138=* +exprs(#20138,78,#20135,1,"get") +hasLocation(#20138,#20069) +enclosing_stmt(#20138,#20130) +expr_containers(#20138,#20001) +literals("get","get",#20138) +decl(#20138,#20093) +#20139=* +exprs(#20139,3,#20135,2,"1") +hasLocation(#20139,#20073) +enclosing_stmt(#20139,#20130) +expr_containers(#20139,#20001) +literals("1","1",#20139) +#20140=* +properties(#20140,#20133,1,0,"set = 1") +#20141=@"loc,{#10000},4,16,4,22" +locations_default(#20141,#10000,4,16,4,22) +hasLocation(#20140,#20141) +#20142=* +exprs(#20142,0,#20140,0,"set") +hasLocation(#20142,#20077) +enclosing_stmt(#20142,#20130) +expr_containers(#20142,#20001) +literals("set","set",#20142) +#20143=* +exprs(#20143,78,#20140,1,"set") +hasLocation(#20143,#20077) +enclosing_stmt(#20143,#20130) +expr_containers(#20143,#20001) +literals("set","set",#20143) +decl(#20143,#20094) +#20144=* +exprs(#20144,3,#20140,2,"1") +hasLocation(#20144,#20081) +enclosing_stmt(#20144,#20130) +expr_containers(#20144,#20001) +literals("1","1",#20144) +#20145=* +exprs(#20145,79,#20131,1,"x") +hasLocation(#20145,#20087) +enclosing_stmt(#20145,#20130) +expr_containers(#20145,#20001) +literals("x","x",#20145) +bind(#20145,#20107) +#20146=* +entry_cfg_node(#20146,#20001) +#20147=@"loc,{#10000},1,1,1,0" +locations_default(#20147,#10000,1,1,1,0) +hasLocation(#20146,#20147) +#20148=* +exit_cfg_node(#20148,#20001) +hasLocation(#20148,#20091) +successor(#20130,#20145) +successor(#20133,#20137) +successor(#20144,#20140) +successor(#20143,#20144) +successor(#20142,#20143) +successor(#20140,#20131) +successor(#20139,#20135) +successor(#20138,#20139) +successor(#20137,#20138) +successor(#20135,#20142) +successor(#20145,#20133) +successor(#20131,#20148) +successor(#20119,#20129) +successor(#20122,#20126) +successor(#20128,#20124) +successor(#20127,#20128) +successor(#20126,#20127) +successor(#20124,#20120) +successor(#20129,#20122) +successor(#20120,#20130) +successor(#20108,#20118) +successor(#20111,#20115) +successor(#20117,#20113) +successor(#20116,#20117) +successor(#20115,#20116) +successor(#20113,#20109) +successor(#20118,#20111) +successor(#20109,#20119) +successor(#20095,#20106) +successor(#20098,#20101) +successor(#20105,#20103) +successor(#20104,#20105) +successor(#20103,#20096) +successor(#20102,#20100) +successor(#20101,#20102) +successor(#20100,#20104) +successor(#20106,#20098) +successor(#20096,#20108) +successor(#20146,#20095) +numlines(#10000,4,4,0) filetype(#10000,"javascript")