e36c347ff9
`Rugged::Reference.valid_name?` used in `Gitlab::GitRefValidator.validate` fails on strings containing null bytes because it uses `StringValueCStr()`. Per https://silverhammermba.github.io/emberb/c/: Ruby’s String kinda corresponds to C’s char*. The simplest macro is StringValueCStr() which returns a null-terminated char* for a String. The problem here is that a Ruby String might contain nulls - in which case StringValueCStr() will raise an ArgumentError! Closes https://gitlab.com/gitlab-org/gitlab-ce/issues/54466
31 lines
1.9 KiB
Ruby
31 lines
1.9 KiB
Ruby
require 'spec_helper'
|
|
|
|
describe Gitlab::GitRefValidator do
|
|
it { expect(described_class.validate('feature/new')).to be_truthy }
|
|
it { expect(described_class.validate('implement_@all')).to be_truthy }
|
|
it { expect(described_class.validate('my_new_feature')).to be_truthy }
|
|
it { expect(described_class.validate('my-branch')).to be_truthy }
|
|
it { expect(described_class.validate('#1')).to be_truthy }
|
|
it { expect(described_class.validate('feature/refs/heads/foo')).to be_truthy }
|
|
it { expect(described_class.validate('feature/~new/')).to be_falsey }
|
|
it { expect(described_class.validate('feature/^new/')).to be_falsey }
|
|
it { expect(described_class.validate('feature/:new/')).to be_falsey }
|
|
it { expect(described_class.validate('feature/?new/')).to be_falsey }
|
|
it { expect(described_class.validate('feature/*new/')).to be_falsey }
|
|
it { expect(described_class.validate('feature/[new/')).to be_falsey }
|
|
it { expect(described_class.validate('feature/new/')).to be_falsey }
|
|
it { expect(described_class.validate('feature/new.')).to be_falsey }
|
|
it { expect(described_class.validate('feature\@{')).to be_falsey }
|
|
it { expect(described_class.validate('feature\new')).to be_falsey }
|
|
it { expect(described_class.validate('feature//new')).to be_falsey }
|
|
it { expect(described_class.validate('feature new')).to be_falsey }
|
|
it { expect(described_class.validate('refs/heads/')).to be_falsey }
|
|
it { expect(described_class.validate('refs/remotes/')).to be_falsey }
|
|
it { expect(described_class.validate('refs/heads/feature')).to be_falsey }
|
|
it { expect(described_class.validate('refs/remotes/origin')).to be_falsey }
|
|
it { expect(described_class.validate('-')).to be_falsey }
|
|
it { expect(described_class.validate('-branch')).to be_falsey }
|
|
it { expect(described_class.validate('.tag')).to be_falsey }
|
|
it { expect(described_class.validate('my branch')).to be_falsey }
|
|
it { expect(described_class.validate("\xA0\u0000\xB0")).to be_falsey }
|
|
end
|