[Lldb-commits] [lldb] r226544 - Fix creation of StringRef in FileSpec::ResolveUsername()

Zachary Turner zturner at google.com
Mon Jan 19 20:58:20 PST 2015


It's a bit of an awkward interface.  It doesn't necessarily store a null
terminator by default.  If you call SmallString<>::c_str(), it will append
a null terminator (if necessary), but the base class, SmallVector<> doesn't
have a c_str() method, only a data() method, which doesn't append the null
terminator.  I should probably ask someone what the canonical way to do
this is, but in the meantime it looks like your fix is probably correct.

On Mon Jan 19 2015 at 8:53:22 PM Jason Molenda <jmolenda at apple.com> wrote:

> Should add -- when stopped here,
>
>
> (lldb) p pathname
> (const char *) $6 = 0x00007fb75946b890 "~jmolenda/lldb/simplebt.py"
> (lldb) p normalized
> (llvm::SmallString<64>) $5 = {
>   llvm::SmallVector<char, 64> = {
>     llvm::SmallVectorImpl<char> = {
>       llvm::SmallVectorTemplateBase<char, true> = {
>         llvm::SmallVectorTemplateCommon<char> = {
>           llvm::SmallVectorBase = (BeginX = 0x00007fff57d85ee8, EndX =
> 0x00007fff57d85f02, CapacityX = 0x00007fff57d85f28)
>
> (lldb)  mem r 0x00007fff57d85ee8 0x00007fff57d85f02+1
> 0x7fff57d85ee8: 7e 6a 6d 6f 6c 65 6e 64 61 2f 6c 6c 64 62 2f 73
> ~jmolenda/lldb/s
> 0x7fff57d85ef8: 69 6d 70 6c 65 62 74 2e 70 79 1b
>  implebt.py.
>
> It looks like I'm getting a 0x1b instead of a \0 here.
>
>
> > On Jan 19, 2015, at 8:51 PM, Jason Molenda <jmolenda at apple.com> wrote:
> >
> > I'm open to the idea that I'm fixing the wrong problem.  This came from
> FielSpec::SetFile -
> >
> > void
> > FileSpec::SetFile (const char *pathname, bool resolve, PathSyntax syntax)
> > {
> >    m_filename.Clear();
> >    m_directory.Clear();
> >    m_is_resolved = false;
> >    m_syntax = (syntax == ePathSyntaxHostNative) ? FileSystem::GetNativePathSyntax()
> : syntax;
> >
> >    if (pathname == NULL || pathname[0] == '\0')
> >        return;
> >
> >    llvm::SmallString<64> normalized(pathname);
> >
> >    if (resolve)
> >    {
> >        FileSpec::Resolve (normalized);
> >        m_is_resolved = true;
> >    }
> >
> > I'm guessing SmallString doesn't store the terminal nul char in its
> buffer.
> >
> >
> >> On Jan 19, 2015, at 8:27 PM, Zachary Turner <zturner at google.com> wrote:
> >>
> >> While it's true that SmallString, and hence SmallVector support non
> null-terminated strings, it worries me if we have a non null-terminated
> string somewhere in LLDB.
> >>
> >> On Mon Jan 19 2015 at 8:25:17 PM Jason Molenda <jmolenda at apple.com>
> wrote:
> >> Author: jmolenda
> >> Date: Mon Jan 19 22:20:42 2015
> >> New Revision: 226544
> >>
> >> URL: http://llvm.org/viewvc/llvm-project?rev=226544&view=rev
> >> Log:
> >> Fix creation of StringRef in FileSpec::ResolveUsername()
> >> so it doesn't assume that the SmallVector<char> will have
> >> nul terminator.  It did not in at least one case.
> >> Caught by ASAN instrumentation.
> >>
> >> Modified:
> >>    lldb/trunk/source/Host/common/FileSpec.cpp
> >>
> >> Modified: lldb/trunk/source/Host/common/FileSpec.cpp
> >> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/
> Host/common/FileSpec.cpp?rev=226544&r1=226543&r2=226544&view=diff
> >> ============================================================
> ==================
> >> --- lldb/trunk/source/Host/common/FileSpec.cpp (original)
> >> +++ lldb/trunk/source/Host/common/FileSpec.cpp Mon Jan 19 22:20:42 2015
> >> @@ -65,7 +65,7 @@ FileSpec::ResolveUsername (llvm::SmallVe
> >>     if (path.empty() || path[0] != '~')
> >>         return;
> >>
> >> -    llvm::StringRef path_str(path.data());
> >> +    llvm::StringRef path_str(path.data(), path.size());
> >>     size_t slash_pos = path_str.find_first_of("/", 1);
> >>     if (slash_pos == 1 || path.size() == 1)
> >>     {
> >>
> >>
> >> _______________________________________________
> >> lldb-commits mailing list
> >> lldb-commits at cs.uiuc.edu
> >> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits
> >
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20150120/5374b3e5/attachment.html>


More information about the lldb-commits mailing list