for (size_t i = 0; i < input.size(); i++) {
if (input[i] & 0x80 || input[i] < '!' || input[i] == '#') {
result.append("#");
- result.appendHex(input[i], 2);
+ // Mask with 0xFF to avoid sign extension. i.e. #FFFFFF81
+ result.appendHex(input[i] & 0xFF, 2);
} else {
result.append(input.c_str() + i, 1);
}
CheckObjectOutput(reporter, name.get(), expectedResult,
strlen(expectedResult), false, false);
+ // Test that we correctly handle characters with the high-bit set.
+ char highBitCString[] = {0xDE, 0xAD, 'b', 'e', 0xEF, 0};
+ SkRefPtr<SkPDFName> highBitName = new SkPDFName(highBitCString);
+ name->unref(); // SkRefPtr and new both took a reference.
+ const char highBitExpectedResult[] = "/#DE#ADbe#EF";
+ CheckObjectOutput(reporter, highBitName.get(), highBitExpectedResult,
+ strlen(highBitExpectedResult), false, false);
+
SkRefPtr<SkPDFArray> array = new SkPDFArray;
array->unref(); // SkRefPtr and new both took a reference.
SimpleCheckObjectOutput(reporter, array.get(), "[]");