diff --git a/CHANGELOG.md b/CHANGELOG.md index de202013..45787a75 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). ## [1.5.3 / 5.60.3] - 2022-11-?? -### Changed +### Added - boxes set to auto delete are nor marked with a small red recycle symbol ### Fixed @@ -24,6 +24,8 @@ This project adheres to [Semantic Versioning](http://semver.org/). - fixed minor issue during Sandboxie Plus uninstall [#2421](https://github.com/sandboxie-plus/Sandboxie/issues/2421) - fixed BSOD issue when driver initialization fails (introduced in 1.5.1) [#2431](https://github.com/sandboxie-plus/Sandboxie/issues/2431) - fixed fake paths being listed even if true paths do not exist [#2403](https://github.com/sandboxie-plus/Sandboxie/issues/2403) +- fixed issue with firefox 106.x requesting write access to plugin executables [#2391](https://github.com/sandboxie-plus/Sandboxie/issues/2391) [#2411](https://github.com/sandboxie-plus/Sandboxie/issues/2411) + diff --git a/Sandboxie/core/dll/file.c b/Sandboxie/core/dll/file.c index 9025f595..73cc6fe7 100644 --- a/Sandboxie/core/dll/file.c +++ b/Sandboxie/core/dll/file.c @@ -3127,6 +3127,18 @@ ReparseLoop: DesiredAccess &= ~DELETE; } + // + // firefox starting with version 106 opens plugin exe's with GENERIC_WRITE + // to mitigate this issue we strip this flag when we detect that it tries to + // do that with an exe that exists outside teh sandbox + // + + if (Dll_ImageType == DLL_IMAGE_MOZILLA_FIREFOX && (DesiredAccess & GENERIC_WRITE)) { + const WCHAR *dot = wcsrchr(TruePath, L'.'); + if (dot && _wcsicmp(dot, L".exe") == 0) + DesiredAccess &= ~GENERIC_WRITE; + } + // // having processed the exceptions we can decide if we are // going to work on the copy file, or if we are going to diff --git a/SandboxiePlus/SandMan/Models/SbieModel.cpp b/SandboxiePlus/SandMan/Models/SbieModel.cpp index 3ad79352..d8a6b250 100644 --- a/SandboxiePlus/SandMan/Models/SbieModel.cpp +++ b/SandboxiePlus/SandMan/Models/SbieModel.cpp @@ -226,7 +226,7 @@ QList CSbieModel::Sync(const QMap& BoxList, cons QString Action = pBox->GetText("DblClickAction"); if (!Action.isEmpty() && Action.left(1) != "!") { - if (pNode->Action != Action || (pNode->busyState || Busy)) { + if (pNode->Action != Action || (pNode->busyState || Busy) || pNode->boxDel != boxDel) { Icon = m_IconProvider.icon(QFileInfo(pBoxEx->GetCommandFile(Action))); pNode->Action = Action; } @@ -242,16 +242,23 @@ QList CSbieModel::Sync(const QMap& BoxList, cons Icon = theGUI->GetColorIcon(boxColor, inUse); else Icon = theGUI->GetBoxIcon(boxType, inUse); - if(boxDel && !Busy && !bVintage) - Icon = theGUI->MakeIconRecycle(Icon); pNode->Action.clear(); } - if (!Icon.isNull()) { - if (Busy) Icon = theGUI->MakeIconBusy(Icon, pNode->busyState++); - else pNode->busyState = 0; + if (!Icon.isNull()) + { + if (Busy) + Icon = theGUI->MakeIconBusy(Icon, pNode->busyState++); + else { + pNode->busyState = 0; + + if(boxDel && !bVintage) + Icon = theGUI->MakeIconRecycle(Icon); + } + if (m_LargeIcons) // but not for boxes Icon = QIcon(Icon.pixmap(QSize(32,32)).scaled(16, 16, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); + pNode->Icon = Icon; Changed = 1; // set change for first column }