Skip to content

Commit 9d9c9f0

Browse files
authored
Merge pull request #83534 from eeckstein/fix-string-serialization
Serialization: fix serialization of strings containing a 0-byte
2 parents 4d7df08 + f4c89d2 commit 9d9c9f0

File tree

2 files changed

+12
-6
lines changed

2 files changed

+12
-6
lines changed

lib/Serialization/ModuleFileSharedCore.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1422,11 +1422,13 @@ StringRef ModuleFileSharedCore::getIdentifierText(IdentifierID IID) const {
14221422

14231423
assert(!IdentifierData.empty() && "no identifier data in module");
14241424

1425-
StringRef rawStrPtr = IdentifierData.substr(offset);
1426-
size_t terminatorOffset = rawStrPtr.find('\0');
1427-
assert(terminatorOffset != StringRef::npos &&
1425+
size_t endOffset = ((rawID + 1 < Identifiers.size()) ?
1426+
Identifiers[rawID + 1] : IdentifierData.size()) - 1;
1427+
1428+
ASSERT(IdentifierData[endOffset] == '\0' &&
14281429
"unterminated identifier string data");
1429-
return rawStrPtr.slice(0, terminatorOffset);
1430+
1431+
return IdentifierData.slice(offset, endOffset);
14301432
}
14311433

14321434
ModuleFileSharedCore::ModuleFileSharedCore(

test/SIL/Serialization/literals.sil

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ bb0:
1414
%4 = string_literal bytes "ABCD"
1515
// CHECK: string_literal oslog "os log section"
1616
%5 = string_literal oslog "os log section"
17-
%6 = tuple ()
18-
return %6 : $()
17+
// CHECK: string_literal utf8 "abc\0def"
18+
%6 = string_literal utf8 "abc\0def"
19+
// CHECK: string_literal utf8 "xyz\0"
20+
%7 = string_literal utf8 "xyz\0"
21+
%8 = tuple ()
22+
return %8 : $()
1923
}

0 commit comments

Comments
 (0)