diff --git a/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java b/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java index 0d5fa5619109..49b22ddcd2d4 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java +++ b/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java @@ -160,6 +160,9 @@ * is of the form "codeql-javascript-*.json". *
  • JavaScript, JSON or YAML files whose base name starts with ".eslintrc". *
  • JSON files whose base name is ".xsaccess". + *
  • JSON files whose base name is "xs-app.json". + *
  • JSON files whose base name ends with ".view.json". + *
  • JSON files whose base name is "manifest.json". *
  • All extension-less files. * * @@ -394,10 +397,12 @@ private void setupFilters() { for (FileType filetype : defaultExtract) for (String extension : filetype.getExtensions()) patterns.add("**/*" + extension); - // include .eslintrc files, .xsaccess files, package.json files, - // tsconfig.json files, and codeql-javascript-*.json files + // include JSON files which are relevant to our analysis patterns.add("**/.eslintrc*"); - patterns.add("**/.xsaccess"); + patterns.add("**/.xsaccess"); // SAP XSJS + patterns.add("**/xs-app.json"); // SAP XSJS + patterns.add("**/*.view.json"); // SAP UI5 + patterns.add("**/manifest.json"); patterns.add("**/package.json"); patterns.add("**/tsconfig*.json"); patterns.add("**/codeql-javascript-*.json"); diff --git a/javascript/extractor/tests/ui5/input/test.view.json b/javascript/extractor/tests/ui5/input/test.view.json new file mode 100644 index 000000000000..32f686ec3b25 --- /dev/null +++ b/javascript/extractor/tests/ui5/input/test.view.json @@ -0,0 +1,16 @@ +{ + "Type": "sap.ui.core.mvc.JSONView", + "controllerName": "codeql-sap-js.controller.app", + "content": [ + { + "Type": "sap.m.Input", + "placeholder": "Enter Payload", + "description": "Try: ", + "value": "{/input}" + }, + { + "Type": "sap.ui.core.HTML", + "content": "{/input}" + } + ] +} \ No newline at end of file diff --git a/javascript/extractor/tests/ui5/output/trap/test.view.json.trap b/javascript/extractor/tests/ui5/output/trap/test.view.json.trap new file mode 100644 index 000000000000..064acca52321 --- /dev/null +++ b/javascript/extractor/tests/ui5/output/trap/test.view.json.trap @@ -0,0 +1,87 @@ +#10000=@"/test.view.json;sourcefile" +files(#10000,"/test.view.json") +#10001=@"/;folder" +folders(#10001,"/") +containerparent(#10001,#10000) +#10002=@"loc,{#10000},0,0,0,0" +locations_default(#10002,#10000,0,0,0,0) +hasLocation(#10000,#10002) +#20000=* +json(#20000,5,#10000,0,"{\n "" ... ]\n}") +#20001=@"loc,{#10000},1,1,16,1" +locations_default(#20001,#10000,1,1,16,1) +json_locations(#20000,#20001) +#20002=* +json(#20002,3,#20000,0,"""sap.ui ... ONView""") +#20003=@"loc,{#10000},2,13,2,38" +locations_default(#20003,#10000,2,13,2,38) +json_locations(#20002,#20003) +json_literals("sap.ui.core.mvc.JSONView","""sap.ui.core.mvc.JSONView""",#20002) +json_properties(#20000,"Type",#20002) +#20004=* +json(#20004,3,#20000,1,"""codeql ... er.app""") +#20005=@"loc,{#10000},3,23,3,52" +locations_default(#20005,#10000,3,23,3,52) +json_locations(#20004,#20005) +json_literals("codeql-sap-js.controller.app","""codeql-sap-js.controller.app""",#20004) +json_properties(#20000,"controllerName",#20004) +#20006=* +json(#20006,4,#20000,2,"[\n ... }\n ]") +#20007=@"loc,{#10000},4,16,15,5" +locations_default(#20007,#10000,4,16,15,5) +json_locations(#20006,#20007) +#20008=* +json(#20008,5,#20006,0,"{\n ... }") +#20009=@"loc,{#10000},5,9,10,9" +locations_default(#20009,#10000,5,9,10,9) +json_locations(#20008,#20009) +#20010=* +json(#20010,3,#20008,0,"""sap.m.Input""") +#20011=@"loc,{#10000},6,21,6,33" +locations_default(#20011,#10000,6,21,6,33) +json_locations(#20010,#20011) +json_literals("sap.m.Input","""sap.m.Input""",#20010) +json_properties(#20008,"Type",#20010) +#20012=* +json(#20012,3,#20008,1,"""Enter Payload""") +#20013=@"loc,{#10000},7,28,7,42" +locations_default(#20013,#10000,7,28,7,42) +json_locations(#20012,#20013) +json_literals("Enter Payload","""Enter Payload""",#20012) +json_properties(#20008,"placeholder",#20012) +#20014=* +json(#20014,3,#20008,2,"""Try: < ... SS\"")>""") +#20015=@"loc,{#10000},8,28,8,68" +locations_default(#20015,#10000,8,28,8,68) +json_locations(#20014,#20015) +json_literals("Try: ","""Try: """,#20014) +json_properties(#20008,"description",#20014) +#20016=* +json(#20016,3,#20008,3,"""{/input}""") +#20017=@"loc,{#10000},9,22,9,31" +locations_default(#20017,#10000,9,22,9,31) +json_locations(#20016,#20017) +json_literals("{/input}","""{/input}""",#20016) +json_properties(#20008,"value",#20016) +#20018=* +json(#20018,5,#20006,1,"{\n ... }") +#20019=@"loc,{#10000},11,9,14,9" +locations_default(#20019,#10000,11,9,14,9) +json_locations(#20018,#20019) +#20020=* +json(#20020,3,#20018,0,"""sap.ui.core.HTML""") +#20021=@"loc,{#10000},12,21,12,38" +locations_default(#20021,#10000,12,21,12,38) +json_locations(#20020,#20021) +json_literals("sap.ui.core.HTML","""sap.ui.core.HTML""",#20020) +json_properties(#20018,"Type",#20020) +#20022=* +json(#20022,3,#20018,1,"""{/input}""") +#20023=@"loc,{#10000},13,24,13,33" +locations_default(#20023,#10000,13,24,13,33) +json_locations(#20022,#20023) +json_literals("{/input}","""{/input}""",#20022) +json_properties(#20018,"content",#20022) +json_properties(#20000,"content",#20006) +numlines(#10000,16,0,0) +filetype(#10000,"json") diff --git a/javascript/extractor/tests/xsaccess/input/.xsaccess b/javascript/extractor/tests/xsjs/input/.xsaccess similarity index 100% rename from javascript/extractor/tests/xsaccess/input/.xsaccess rename to javascript/extractor/tests/xsjs/input/.xsaccess diff --git a/javascript/extractor/tests/xsjs/input/xs-app.json b/javascript/extractor/tests/xsjs/input/xs-app.json new file mode 100644 index 000000000000..01890c1ddf1e --- /dev/null +++ b/javascript/extractor/tests/xsjs/input/xs-app.json @@ -0,0 +1,12 @@ +{ + "welcomeFile": "index.html", + "authenticationMethod": "none", + "routes": [ + { + "source": "/bad/(.*)", + "destination": "srv_api", + "csrfProtection": false, + "authenticationType": "none" + } + ] +} \ No newline at end of file diff --git a/javascript/extractor/tests/xsaccess/output/trap/.xsaccess.trap b/javascript/extractor/tests/xsjs/output/trap/.xsaccess.trap similarity index 100% rename from javascript/extractor/tests/xsaccess/output/trap/.xsaccess.trap rename to javascript/extractor/tests/xsjs/output/trap/.xsaccess.trap diff --git a/javascript/extractor/tests/xsjs/output/trap/xs-app.json.trap b/javascript/extractor/tests/xsjs/output/trap/xs-app.json.trap new file mode 100644 index 000000000000..d9a35a42450d --- /dev/null +++ b/javascript/extractor/tests/xsjs/output/trap/xs-app.json.trap @@ -0,0 +1,68 @@ +#10000=@"/xs-app.json;sourcefile" +files(#10000,"/xs-app.json") +#10001=@"/;folder" +folders(#10001,"/") +containerparent(#10001,#10000) +#10002=@"loc,{#10000},0,0,0,0" +locations_default(#10002,#10000,0,0,0,0) +hasLocation(#10000,#10002) +#20000=* +json(#20000,5,#10000,0,"{\n "" ... ]\n}") +#20001=@"loc,{#10000},1,1,12,1" +locations_default(#20001,#10000,1,1,12,1) +json_locations(#20000,#20001) +#20002=* +json(#20002,3,#20000,0,"""index.html""") +#20003=@"loc,{#10000},2,20,2,31" +locations_default(#20003,#10000,2,20,2,31) +json_locations(#20002,#20003) +json_literals("index.html","""index.html""",#20002) +json_properties(#20000,"welcomeFile",#20002) +#20004=* +json(#20004,3,#20000,1,"""none""") +#20005=@"loc,{#10000},3,29,3,34" +locations_default(#20005,#10000,3,29,3,34) +json_locations(#20004,#20005) +json_literals("none","""none""",#20004) +json_properties(#20000,"authenticationMethod",#20004) +#20006=* +json(#20006,4,#20000,2,"[\n ... }\n ]") +#20007=@"loc,{#10000},4,15,11,5" +locations_default(#20007,#10000,4,15,11,5) +json_locations(#20006,#20007) +#20008=* +json(#20008,5,#20006,0,"{\n ... }") +#20009=@"loc,{#10000},5,9,10,9" +locations_default(#20009,#10000,5,9,10,9) +json_locations(#20008,#20009) +#20010=* +json(#20010,3,#20008,0,"""/bad/(.*)""") +#20011=@"loc,{#10000},6,23,6,33" +locations_default(#20011,#10000,6,23,6,33) +json_locations(#20010,#20011) +json_literals("/bad/(.*)","""/bad/(.*)""",#20010) +json_properties(#20008,"source",#20010) +#20012=* +json(#20012,3,#20008,1,"""srv_api""") +#20013=@"loc,{#10000},7,28,7,36" +locations_default(#20013,#10000,7,28,7,36) +json_locations(#20012,#20013) +json_literals("srv_api","""srv_api""",#20012) +json_properties(#20008,"destination",#20012) +#20014=* +json(#20014,1,#20008,2,"false") +#20015=@"loc,{#10000},8,31,8,35" +locations_default(#20015,#10000,8,31,8,35) +json_locations(#20014,#20015) +json_literals("false","false",#20014) +json_properties(#20008,"csrfProtection",#20014) +#20016=* +json(#20016,3,#20008,3,"""none""") +#20017=@"loc,{#10000},9,35,9,40" +locations_default(#20017,#10000,9,35,9,40) +json_locations(#20016,#20017) +json_literals("none","""none""",#20016) +json_properties(#20008,"authenticationType",#20016) +json_properties(#20000,"routes",#20006) +numlines(#10000,12,0,0) +filetype(#10000,"json")