1. Brodie Rao
  2. libgit2

Commits

Shawn O. Pearce  committed 367ab01

Add an extra oid test to verify control characters aren't read

We only want hex digits to be read, any other character in the 8-bit
character set is invalid within an id string.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

  • Participants
  • Parent commits b81dd80
  • Branches master

Comments (0)

Files changed (1)

File tests/t0000-oid.c

View file
 	must_fail(git_oid_mkstr(&out, "moo"));
 END_TEST
 
+static int from_hex(unsigned char i)
+{
+	if (i >= '0' && i <= '9')
+		return i - '0';
+	if (i >= 'a' && i <= 'f')
+		return 10 + (i - 'a');
+	if (i >= 'A' && i <= 'F')
+		return 10 + (i - 'A');
+	return -1;
+}
+
+BEGIN_TEST(invalid_string_all_chars)
+	git_oid out;
+	unsigned char exp[] = {
+		0x16, 0xa6, 0x77, 0x70, 0xb7,
+		0xd8, 0xd7, 0x23, 0x17, 0xc4,
+		0xb7, 0x75, 0x21, 0x3c, 0x23,
+		0xa8, 0xbd, 0x74, 0xf5, 0xe0,
+	};
+	char in[41] = "16a67770b7d8d72317c4b775213c23a8bd74f5e0\0";
+	unsigned int i;
+
+	for (i = 0; i < 256; i++) {
+		in[38] = (char)i;
+
+		if (from_hex(i) >= 0) {
+			exp[19] = (from_hex(i) << 4);
+			if (git_oid_mkstr(&out, in))
+				test_die("line %d: must accept '%s'", __LINE__, in);
+			if (memcmp(out.id, exp, sizeof(out.id)))
+				test_die("line %d: bad parse of '%s', %x != %x",
+				         __LINE__, in, exp[19], out.id[19]);
+		} else if (!git_oid_mkstr(&out, in))
+			test_die("line %d: must not accept '%s'", __LINE__, in);
+	}
+END_TEST
+
 BEGIN_TEST(invalid_string_16a67770b7d8d72317c4b775213c23a8bd74f5ez)
 	git_oid out;
 	must_fail(git_oid_mkstr(&out, "16a67770b7d8d72317c4b775213c23a8bd74f5ez"));