mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-08 04:07:40 +02:00
powerrename: fix union usage (#42845)
<!-- Enter a brief description/summary of your PR here. What does it
fix/what does it change/how was it tested (even manually, if necessary)?
-->
## Summary of the Pull Request
<!-- Please review the items on the PR checklist before submitting-->
## PR Checklist
- [x] Closes: #42843
- [ ] **Communication:** I've discussed this with core contributors
already. If the work hasn't been agreed, this work might be rejected
- [x] **Tests:** Added/updated and all pass
<!-- Provide a more detailed description of the PR, other things fixed,
or any additional comments/features here -->
## Detailed Description of the Pull Request / Additional comments
fix undefined behavior when using union in the `IFACEMETHODIMP
CPowerRenameRegEx::PutFileTime(_In_ SYSTEMTIME fileTime)` function
a69f7fa806/src/modules/powerrename/lib/PowerRenameRegEx.cpp (L299)
<!-- Describe how you validated the behavior. Add automated tests
wherever possible, but list manual validation steps taken as well -->
## Validation Steps Performed
This commit is contained in:
@@ -344,19 +344,13 @@ IFACEMETHODIMP CPowerRenameRegEx::PutFlags(_In_ DWORD flags)
|
|||||||
|
|
||||||
IFACEMETHODIMP CPowerRenameRegEx::PutFileTime(_In_ SYSTEMTIME fileTime)
|
IFACEMETHODIMP CPowerRenameRegEx::PutFileTime(_In_ SYSTEMTIME fileTime)
|
||||||
{
|
{
|
||||||
union timeunion
|
FILETIME ft1;
|
||||||
{
|
FILETIME ft2;
|
||||||
FILETIME fileTime;
|
|
||||||
ULARGE_INTEGER ul;
|
|
||||||
};
|
|
||||||
|
|
||||||
timeunion ft1;
|
SystemTimeToFileTime(&m_fileTime, &ft1);
|
||||||
timeunion ft2;
|
SystemTimeToFileTime(&fileTime, &ft2);
|
||||||
|
|
||||||
SystemTimeToFileTime(&m_fileTime, &ft1.fileTime);
|
if (ft2.dwLowDateTime != ft1.dwLowDateTime || ft2.dwHighDateTime != ft1.dwHighDateTime)
|
||||||
SystemTimeToFileTime(&fileTime, &ft2.fileTime);
|
|
||||||
|
|
||||||
if (ft2.ul.QuadPart != ft1.ul.QuadPart)
|
|
||||||
{
|
{
|
||||||
m_fileTime = fileTime;
|
m_fileTime = fileTime;
|
||||||
m_useFileTime = true;
|
m_useFileTime = true;
|
||||||
|
|||||||
Reference in New Issue
Block a user