Author: Vitaly Buka Date: 2025-02-13T07:39:26-08:00 New Revision: 3548823b7c0ed8f985050d27d98c3f1145f0bea3
URL: https://github.com/llvm/llvm-project/commit/3548823b7c0ed8f985050d27d98c3f1145f0bea3 DIFF: https://github.com/llvm/llvm-project/commit/3548823b7c0ed8f985050d27d98c3f1145f0bea3.diff LOG: Revert "[libclang] Always Dup in createRef(StringRef) (#125020)" This reverts commit e76739eeb952940b2979c70ba44a28fecf592695. Added: Modified: clang/docs/ReleaseNotes.rst clang/tools/libclang/CXString.cpp Removed: ################################################################################ diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index e41ad384b84f7..03bddbe3e983a 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -257,9 +257,6 @@ clang-format libclang -------- -- Fixed a buffer overflow in ``CXString`` implementation. The fix may result in - increased memory allocation. - Code Completion --------------- diff --git a/clang/tools/libclang/CXString.cpp b/clang/tools/libclang/CXString.cpp index aaa8f8eeb67a1..5e427957a1092 100644 --- a/clang/tools/libclang/CXString.cpp +++ b/clang/tools/libclang/CXString.cpp @@ -87,7 +87,19 @@ CXString createRef(StringRef String) { if (String.empty()) return createEmpty(); - return createDup(String); + // If the string is not nul-terminated, we have to make a copy. + + // FIXME: This is doing a one past end read, and should be removed! For memory + // we don't manage, the API string can become unterminated at any time outside + // our control. + + if (String.data()[String.size()] != 0) + return createDup(String); + + CXString Result; + Result.data = String.data(); + Result.private_flags = (unsigned) CXS_Unmanaged; + return Result; } CXString createDup(StringRef String) { _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits