1
1
Fork 0
mirror of https://github.com/NixOS/nix.git synced 2025-11-16 23:42:43 +01:00
nix/src/libutil
Sergei Zimmerman 3e0129ce3b fix(libutil/posix-source-accessor.cc): get rid of use-after-move bug
Naming class member variables the same as constructor arguments is a very
slippery slope because of how member variable names get resolved. Compiler
is not very helpful here and we need static analysis to forbid this kind of
stuff.

The following example illustrates the cause quite well:

```cpp

struct B {
    B(int) {}
};

struct A {
    A(int b): b([&](){
        return b;
        static_assert(std::is_same_v<decltype(b), int>);
    }()) {
       static_assert(std::is_same_v<decltype(b), int>);
    }
    void member() {
        static_assert(std::is_same_v<decltype(b), B>);
    }
    B b;
};

int main() {
    A(1).member();
}
```

From N4861 6.5.1 Unqualified name lookup:

> In all the cases listed in [basic.lookup.unqual], the scopes are searched
> for a declaration in the order listed in each of the respective categories;
> name lookup ends as soon as a declaration is found for the name.
> If no declaration is found, the program is ill-formed.

In the affected code there was a use-after-move for all accesses in the constructor
body, but this UB wasn't triggered.

These types of errors are trivial to catch via clang-tidy's [clang-analyzer-cplusplus.Move].
2024-11-08 16:07:45 +03:00
..
args Fix and extend nix-shell baseDir test 2024-07-07 00:23:22 +02:00
linux Simplify getRootCgroup() 2024-09-04 18:11:16 +00:00
signature Ensure error messages don't leak private key 2024-09-23 16:36:48 -04:00
unix nix::readLine: Add eofOk parameter 2024-11-06 14:42:51 +01:00
windows Add eofOk parameter to the Windows readLine impl 2024-11-07 15:11:44 -05:00
.version Build nix-util with Meson 2024-06-12 18:31:02 -04:00
abstract-setting-to-json.hh Make toJSONObject const 2023-11-06 16:00:25 +01:00
ansicolor.hh Finish converting existing comments for internal API docs (#8146) 2023-04-07 13:55:28 +00:00
archive.cc Make the NAR parser much stricter wrt field order 2024-09-12 15:57:46 +02:00
archive.hh Merge remote-tracking branch 'origin/master' into fsync-store-paths 2024-08-21 16:37:21 +02:00
args.cc cont. cleanup: remove superfluous std::string copies 2024-10-07 01:15:44 +02:00
args.hh add missing filesystem include (x86_64-darwin fix) 2024-09-10 16:45:39 +02:00
build-utils-meson Rename file to avoid reserved name 2024-07-02 09:26:22 -04:00
callback.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
canon-path.cc concatStrings: Give compiler access to definition for inlining 2024-07-14 12:20:45 +02:00
canon-path.hh Remove comparator.hh and switch to <=> in a bunch of places 2024-07-12 14:54:18 -04:00
checked-arithmetic.hh libutil: add checked arithmetic tools 2024-07-30 18:13:05 -07:00
chunked-vector.hh Make abort() call sites log first 2024-07-24 16:52:04 +02:00
closure.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
comparator.hh Remove comparator.hh and switch to <=> in a bunch of places 2024-07-12 14:54:18 -04:00
compression.cc Slightly change formatting style 2024-05-22 09:20:15 -04:00
compression.hh nfc(libutil): reformat files 2024-03-30 01:29:22 +03:00
compute-levels.cc Add x86_64 compute levels as additional system types 2021-02-22 09:11:15 +01:00
compute-levels.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
config-global.cc experimental-features.hh: Don't include json-utils.hh 2024-10-04 15:59:35 +02:00
config-global.hh Format config-global.{cc,hh} 2024-06-24 12:07:56 -04:00
config-impl.hh addFlag: use aliases 2024-07-19 15:05:00 -04:00
config.cc fix NIX_PATH for real (#11079) 2024-07-24 21:17:15 +00:00
config.hh manual: Contributing -> Development, Hacking -> Building (#9014) 2024-07-25 02:53:06 +00:00
current-process.cc Split ignoreException for destructors or interrupt-safe 2024-09-30 11:50:25 +02:00
current-process.hh Implement setStackSize for Windows 2024-05-18 16:19:01 -07:00
english.cc Unify and refactor value printing 2024-01-11 16:34:36 -08:00
english.hh Unify and refactor value printing 2024-01-11 16:34:36 -08:00
environment-variables.cc Factor out lookupExecutable and other PATH improvments 2024-08-07 18:12:58 -04:00
environment-variables.hh feat: add flag set-env-var to MixEnvironment 2024-11-04 14:02:29 +01:00
error.cc Make panic() and unreachable() robust 2024-07-25 15:50:01 +02:00
error.hh Make panic() and unreachable() robust 2024-07-25 15:50:01 +02:00
exec.hh More support for std::filepath in libnixutil 2024-08-26 17:23:56 -04:00
executable-path.cc More support for std::filepath in libnixutil 2024-08-26 17:23:56 -04:00
executable-path.hh More support for std::filepath in libnixutil 2024-08-26 17:23:56 -04:00
exit.cc :quit in the debugger should quit the whole program 2024-02-20 10:01:13 -08:00
exit.hh :quit in the debugger should quit the whole program 2024-02-20 10:01:13 -08:00
experimental-features.cc libexpr: experimental pipe operators 2024-07-24 13:17:28 -04:00
experimental-features.hh experimental-features.hh: Don't include json-utils.hh 2024-10-04 15:59:35 +02:00
file-content-address.cc Merge remote-tracking branch 'origin/master' into fsync-store-paths 2024-08-21 16:37:21 +02:00
file-content-address.hh Merge remote-tracking branch 'origin/master' into fsync-store-paths 2024-08-21 16:37:21 +02:00
file-descriptor.cc Split ignoreException for destructors or interrupt-safe 2024-09-30 11:50:25 +02:00
file-descriptor.hh Clean up standard stream logic 2024-11-07 15:11:41 -05:00
file-path-impl.hh Factor out lookupExecutable and other PATH improvments 2024-08-07 18:12:58 -04:00
file-path.hh Factor out lookupExecutable and other PATH improvments 2024-08-07 18:12:58 -04:00
file-system.cc Add support for utimensat as an alternative to lutimes 2024-10-26 18:02:24 +00:00
file-system.hh More support for std::filepath in libnixutil 2024-08-26 17:23:56 -04:00
finally.hh libutil: guard Finally against invalid exception throws 2024-06-05 22:45:37 +02:00
fmt.hh Improve error messages for invalid derivation names 2024-06-25 19:41:29 +02:00
fs-sink.cc RestoreSink::createDirectory(): Use append() 2024-09-05 22:21:53 +02:00
fs-sink.hh Merge remote-tracking branch 'origin/master' into fsync-store-paths 2024-08-21 16:37:21 +02:00
git.cc Make abort() call sites log first 2024-07-24 16:52:04 +02:00
git.hh Remove comparator.hh and switch to <=> in a bunch of places 2024-07-12 14:54:18 -04:00
hash.cc Ensure error messages don't leak private key 2024-09-23 16:36:48 -04:00
hash.hh Remove comparator.hh and switch to <=> in a bunch of places 2024-07-12 14:54:18 -04:00
hilite.cc Fix incorrect comment in hiliteMatches 2022-06-05 20:30:18 +02:00
hilite.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
json-impls.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
json-utils.cc ValidPathInfo JSON format should use null not omit field 2024-06-03 08:21:22 -04:00
json-utils.hh experimental-features.hh: Don't include json-utils.hh 2024-10-04 15:59:35 +02:00
local.mk Revert "Merge pull request #11804 from obsidiansystems/remove-old-make" 2024-11-07 13:46:37 +01:00
logging.cc Clean up standard stream logic 2024-11-07 15:11:41 -05:00
logging.hh Solve unused header warnings reported by clangd 2024-07-12 15:37:54 +02:00
lru-cache.hh LRUCache: Mark size() as const 2024-07-26 16:13:00 +02:00
memory-source-accessor.cc use CanonPath in fs-sink and its derivatives 2024-06-30 19:03:15 +05:30
memory-source-accessor.hh Remove comparator.hh and switch to <=> in a bunch of places 2024-07-12 14:54:18 -04:00
meson.build refact: Extract build-utils-meson/libatomic 2024-11-07 11:40:02 +01:00
meson.options Build nix-util with Meson 2024-06-12 18:31:02 -04:00
muxable-pipe.hh More work on the scheduler for windows 2024-05-28 11:39:49 -04:00
nix-util.pc.in Revert "Merge pull request #11804 from obsidiansystems/remove-old-make" 2024-11-07 13:46:37 +01:00
os-string.hh More support for std::filepath in libnixutil 2024-08-26 17:23:56 -04:00
package.nix packaging: Add mkMeson{Library,Executable} 2024-10-13 23:17:54 +02:00
pool.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
position.cc Pos::getSnippetUpTo(): Fix warning 2024-07-16 16:34:13 +02:00
position.hh getSnippetUpTo: Return optional 2024-07-15 20:10:45 +02:00
posix-source-accessor.cc fix(libutil/posix-source-accessor.cc): get rid of use-after-move bug 2024-11-08 16:07:45 +03:00
posix-source-accessor.hh Use SourcePath in more places 2024-05-06 19:05:42 +02:00
processes.hh Initial runProgram implementation for Windows 2024-06-17 11:13:22 -07:00
ref.hh libutil: remove template id from constructors 2024-07-28 16:35:09 +02:00
references.cc Renamed HashFormat::Base32 to HashFormat::Nix32 2023-12-06 23:43:42 +01:00
references.hh HashType: Rename to HashAlgorithm 2023-12-06 23:43:42 +01:00
regex-combinators.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
repair-flag.hh Combine AbstractPos, PosAdapter, and Pos 2024-01-08 10:59:41 -08:00
serialise.cc Split ignoreException for destructors or interrupt-safe 2024-09-30 11:50:25 +02:00
serialise.hh fix(libstore-tests): remove use-after-free bug for StringSource 2024-11-06 02:28:21 +03:00
signals.hh setInterruptCheck(): Remove declared but undefined function 2024-04-05 16:03:25 +02:00
source-accessor.cc libutil/source-accessor: custom error if source does not exist 2024-05-25 23:06:57 +02:00
source-accessor.hh Remove comparator.hh and switch to <=> in a bunch of places 2024-07-12 14:54:18 -04:00
source-path.cc Remove comparator.hh and switch to <=> in a bunch of places 2024-07-12 14:54:18 -04:00
source-path.hh Remove unused boost include and split out std-hash.hh 2024-07-16 22:31:25 +02:00
split.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
std-hash.hh Remove unused boost include and split out std-hash.hh 2024-07-16 22:31:25 +02:00
strings-inline.hh Factor out lookupExecutable and other PATH improvments 2024-08-07 18:12:58 -04:00
strings.cc Fix meson build on darwin 2024-10-22 15:30:03 +02:00
strings.hh MacOS built: add workaround for missing view() member of std::ostringstream 2024-10-07 02:05:53 +02:00
suggestions.cc SymbolStr: Remove std::string conversion 2024-07-11 17:43:10 +02:00
suggestions.hh Remove comparator.hh and switch to <=> in a bunch of places 2024-07-12 14:54:18 -04:00
sync.hh Rename SyncBase::read() -> readLock() 2024-07-27 01:39:13 +02:00
tarfile.cc tweak unpack channel built-in, std::filesystem::path for tarball 2024-09-11 12:29:49 -04:00
tarfile.hh tweak unpack channel built-in, std::filesystem::path for tarball 2024-09-11 12:29:49 -04:00
terminal.cc Implement updateWindowSize for Windows 2024-05-18 16:14:20 -07:00
terminal.hh Solve unused header warnings reported by clangd 2024-07-12 15:37:54 +02:00
thread-pool.cc Typo 2024-10-16 19:40:45 +02:00
thread-pool.hh Split up util.{hh,cc} 2023-11-05 12:20:02 -05:00
topo-sort.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
types.hh Solve unused header warnings reported by clangd 2024-07-12 15:37:54 +02:00
unix-domain-socket.cc Put some file descriptor functions in unix and windows namespaces 2024-06-13 11:18:59 -04:00
unix-domain-socket.hh Build the local store on Windows 2024-05-10 13:05:23 -04:00
url-parts.hh Merge pull request #9621 from blaggacao/fix/too-restrictive-branch-regex-master 2023-12-22 16:02:25 +01:00
url.cc fix: warn on malformed URI query parameter 2024-09-30 14:44:06 +02:00
url.hh Remove comparator.hh and switch to <=> in a bunch of places 2024-07-12 14:54:18 -04:00
users.cc Use envvars NIX_CACHE_HOME, NIX_CONFIG_HOME, NIX_DATA_HOME, NIX_STATE_HOME if defined (#11351) 2024-09-11 10:36:46 +00:00
users.hh Use envvars NIX_CACHE_HOME, NIX_CONFIG_HOME, NIX_DATA_HOME, NIX_STATE_HOME if defined (#11351) 2024-09-11 10:36:46 +00:00
util.cc Split ignoreException for destructors or interrupt-safe 2024-09-30 11:50:25 +02:00
util.hh Split ignoreException for destructors or interrupt-safe 2024-09-30 11:50:25 +02:00
variant-wrapper.hh Fixing #7479 2023-08-18 11:44:00 -04:00
xml-writer.cc xml-writer: Remove std aliases 2022-02-25 16:13:02 +01:00
xml-writer.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00