diff --git a/npm_and_yarn/helpers/test/yarn/fixtures/updater/illegal_character/package.json b/npm_and_yarn/helpers/test/yarn/fixtures/updater/illegal_character/package.json new file mode 100644 index 00000000000..94c9dadec13 --- /dev/null +++ b/npm_and_yarn/helpers/test/yarn/fixtures/updater/illegal_character/package.json @@ -0,0 +1,8 @@ +{ + "name": "@colend-contract-helpers", + "dependencies": { + "@commitlint/cli": "^15.0.0", + "is-positive": "^3.1.0", + "left-pad": "^1.1.3" + } +} diff --git a/npm_and_yarn/helpers/test/yarn/fixtures/updater/illegal_character/yarn.lock b/npm_and_yarn/helpers/test/yarn/fixtures/updater/illegal_character/yarn.lock new file mode 100644 index 00000000000..0ef2b451e63 --- /dev/null +++ b/npm_and_yarn/helpers/test/yarn/fixtures/updater/illegal_character/yarn.lock @@ -0,0 +1,14 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + +"@commitlint/cli@^15.0.0": + version "15.0.0" + resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-15.0.0.tgz#8e78e86ee2b6955c1a5d140e734a6c171ce367ee" + +"is-positive@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-positive/-/is-positive-3.1.0.tgz#857db584a1ba5d1cb2980527fc3b6c435d37b0fd" + +"left-pad@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.0.0.tgz#c84e2417581bbb8eaf2b9e3d7a122e572ab1af37" diff --git a/npm_and_yarn/helpers/test/yarn/updater.test.js b/npm_and_yarn/helpers/test/yarn/updater.test.js index d6fcbba04e7..c6406b6b60f 100644 --- a/npm_and_yarn/helpers/test/yarn/updater.test.js +++ b/npm_and_yarn/helpers/test/yarn/updater.test.js @@ -30,8 +30,8 @@ describe("updater", () => { const result = await updateDependencyFiles(tempDir, [ { - name: "left-pad", - version: "1.1.3", + name: "@commitlint/cli", + version: "^15.0.0", requirements: [{ file: "package.json", groups: ["dependencies"] }], }, ]); @@ -85,4 +85,33 @@ describe("updater", () => { expect(error).not.toBeNull(); } }); + + it("Name contains illegal characters", async () => { + copyDependencies("illegal_character", tempDir); + + try { + await updateDependencyFiles(tempDir, [ + { + name: "@commitlint/cli", + version: "19.3.0", + requirements: [ + { + requirement: "^19.3.0", + file: "package.json", + groups: ["devDependencies"], + source: + { + type: "registry", + url: "https://registry.yarnpkg.com" + } + } + ] + } + ] + ); + } catch (error) { + expect(error).not.toBeNull(); + expect(error.message).toEqual("package.json: Name contains illegal characters") + } + }); }); diff --git a/npm_and_yarn/lib/dependabot/npm_and_yarn/file_updater/yarn_lockfile_updater.rb b/npm_and_yarn/lib/dependabot/npm_and_yarn/file_updater/yarn_lockfile_updater.rb index 5d6f324d3bd..db56934cfa0 100644 --- a/npm_and_yarn/lib/dependabot/npm_and_yarn/file_updater/yarn_lockfile_updater.rb +++ b/npm_and_yarn/lib/dependabot/npm_and_yarn/file_updater/yarn_lockfile_updater.rb @@ -201,6 +201,8 @@ def run_yarn_top_level_updater(top_level_dependency_updates:) top_level_dependency_updates ] ) + rescue SharedHelpers::HelperSubprocessFailed => e + raise Dependabot::DependencyFileNotParseable, e.message end def run_yarn_subdependency_updater(yarn_lock:) diff --git a/npm_and_yarn/spec/dependabot/npm_and_yarn/file_updater/yarn_lockfile_updater_spec.rb b/npm_and_yarn/spec/dependabot/npm_and_yarn/file_updater/yarn_lockfile_updater_spec.rb index 0b3a8ed7378..9665858576a 100644 --- a/npm_and_yarn/spec/dependabot/npm_and_yarn/file_updater/yarn_lockfile_updater_spec.rb +++ b/npm_and_yarn/spec/dependabot/npm_and_yarn/file_updater/yarn_lockfile_updater_spec.rb @@ -338,4 +338,15 @@ .to include("https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3") end end + + context "Package.json Name contains illegal characters" do + let(:files) { project_dependency_files("yarn/package_json_contains_illegal_characters_in_name") } + + it "keeps the default npm registry" do + expect { updated_yarn_lock_content } + .to raise_error(Dependabot::DependencyFileNotParseable) do |error| + expect(error.message).to eq("package.json: Name contains illegal characters not parseable") + end + end + end end diff --git a/npm_and_yarn/spec/fixtures/projects/yarn/package_json_contains_illegal_characters_in_name/.yarnrc b/npm_and_yarn/spec/fixtures/projects/yarn/package_json_contains_illegal_characters_in_name/.yarnrc new file mode 100644 index 00000000000..142dad81709 --- /dev/null +++ b/npm_and_yarn/spec/fixtures/projects/yarn/package_json_contains_illegal_characters_in_name/.yarnrc @@ -0,0 +1 @@ +registry "https://registry.npmjs.org" diff --git a/npm_and_yarn/spec/fixtures/projects/yarn/package_json_contains_illegal_characters_in_name/package.json b/npm_and_yarn/spec/fixtures/projects/yarn/package_json_contains_illegal_characters_in_name/package.json new file mode 100644 index 00000000000..ea4be208715 --- /dev/null +++ b/npm_and_yarn/spec/fixtures/projects/yarn/package_json_contains_illegal_characters_in_name/package.json @@ -0,0 +1,22 @@ +{ + "name": "@test", + "version": "1.0.0", + "description": "", + "main": "index.js", + "repository": { + "type": "git", + "url": "git+https://github.com/waltfy/PROTO_TEST.git" + }, + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/waltfy/PROTO_TEST/issues" + }, + "homepage": "https://github.com/waltfy/PROTO_TEST#readme", + "dependencies": { + "fetch-factory": "^0.0.1" + }, + "devDependencies": { + "etag" : "^1.0.0" + } + } diff --git a/npm_and_yarn/spec/fixtures/projects/yarn/package_json_contains_illegal_characters_in_name/yarn.lock b/npm_and_yarn/spec/fixtures/projects/yarn/package_json_contains_illegal_characters_in_name/yarn.lock new file mode 100644 index 00000000000..0b1f5e75a81 --- /dev/null +++ b/npm_and_yarn/spec/fixtures/projects/yarn/package_json_contains_illegal_characters_in_name/yarn.lock @@ -0,0 +1,71 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +encoding@^0.1.11: + version "0.1.13" + resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +es6-promise@^3.0.2: + version "3.3.1" + resolved "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" + integrity sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM= + +etag@^1.0.0: + version "1.8.1" + resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +fetch-factory@^0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/fetch-factory/-/fetch-factory-0.0.1.tgz#e0076059bdb31e3147c75b3b8c04133ba8c7e071" + integrity sha1-4AdgWb2zHjFHx1s7jAQTO6jH4HE= + dependencies: + es6-promise "^3.0.2" + isomorphic-fetch "^2.1.1" + lodash "^3.10.1" + +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +is-stream@^1.0.1: + version "1.1.0" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +isomorphic-fetch@^2.1.1: + version "2.2.1" + resolved "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk= + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + +lodash@^3.10.1: + version "3.10.1" + resolved "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" + integrity sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y= + +node-fetch@^1.0.1: + version "1.6.1" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-1.6.1.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + +"safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +whatwg-fetch@>=0.10.0: + version "3.6.2" + resolved "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c" + integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==