[all-commits] [llvm/llvm-project] 361016: [Path] Fix off-by-one in finding filename for win ...

Matheus Izvekov via All-commits all-commits at lists.llvm.org
Wed Jan 17 23:03:15 PST 2024


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 361016f680abf830004ef726f816820a0c8c1950
      https://github.com/llvm/llvm-project/commit/361016f680abf830004ef726f816820a0c8c1950
  Author: Matheus Izvekov <mizvekov at gmail.com>
  Date:   2024-01-18 (Thu, 18 Jan 2024)

  Changed paths:
    M llvm/lib/Support/Path.cpp
    M llvm/unittests/Support/Path.cpp

  Log Message:
  -----------
  [Path] Fix off-by-one in finding filename for win style paths (#78055)

This fixes a crash where `path::parent_path` causes an invalid access on
a string upon receiving a path that consists of a single colon.

On Windows machine, with runtime checks enabled build, upon `clang -I:
test.cc` produces:
```
Assertion failed: Index < Length && "Invalid index!", file llvm\include\llvm/ADT/StringRef.h, line 232
...
 #6 0x00007ff7816201eb `anonymous namespace'::parent_path_end llvm\lib\Support\Path.cpp:144:0
 #7 0x00007ff781620135 llvm::sys::path::parent_path(class llvm::StringRef, enum llvm::sys::path::Style) llvm\lib\Support\Path.cpp:470:0
```

Ideally, we can look for the last colon starting from the last
character, but we can instead start from second to last, and handle
empty paths by abusing `0 - 1 == npos`.




More information about the All-commits mailing list