emilk / emilk/Configuru

Saving to test file, file contents all NULL bytes

Open
#11 2 comments 0 reactions 0 assignees View on GitHub
Dominant language
C++
Stars
144
Forks
29
PR merge metrics
No merged PRs in 30d

Description

CMake Build System, targeting C++ 17, MSVC 2017 Community, building a 32-bit DLL, running on Windows 10

I've observed this twice on production systems, and I know it sounds a little outlandish.

I have a multi-threaded application which has a Config class. This class reads the configuration file into member variables and then exposes those to the rest of the application with get/set-style accessors. It also provides a method to save the configuration file. All methods are accessed from different threads, so thread safety is a concern. Because of this, I wrap all of the set accessors and the Save() method with a std::lock_guard, using a shared std::mutex. The get accessors are not mutex-protected. (The read of the config is part of the constructor, and happens in single-threaded context.) I think this is sufficient thread-protection.

The system will sometimes (once every week) write out a config file of the expected length (4.7k, give or take). Except this config file is entirely NULL bytes (0x00). I can see this by viewing the file in a hex editor.

I don't quite understand how this could happen, because Configuru converts the object to a std::string before writing that to a file. If that string contained only nulls, I would expect to get a zero-length file, because it would stop at the first null-terminator. However, that does not appear to be the case.
https://stackoverflow.com/questions/2845769/can-a-stdstring-contain-embedded-nulls

Any ideas? Have you heard of anything like this before?

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.