Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package qt6-positioning for openSUSE:Factory 
checked in at 2026-08-21 16:50:57
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/qt6-positioning (Old)
 and      /work/SRC/openSUSE:Factory/.qt6-positioning.new.1258 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "qt6-positioning"

Fri Aug 21 16:50:57 2026 rev:37 rq:1372251 version:6.11.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/qt6-positioning/qt6-positioning.changes  
2026-05-28 17:25:42.712670876 +0200
+++ 
/work/SRC/openSUSE:Factory/.qt6-positioning.new.1258/qt6-positioning.changes    
    2026-08-21 16:51:54.129943155 +0200
@@ -1,0 +2,6 @@
+Tue Aug 18 11:48:57 UTC 2026 - Christophe Marin <[email protected]>
+
+- Update to 6.11.2
+  https://www.qt.io/blog/qt-6.11.2-released
+
+-------------------------------------------------------------------

Old:
----
  qtpositioning-everywhere-src-6.11.1.tar.xz

New:
----
  qtpositioning-everywhere-src-6.11.2.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ qt6-positioning.spec ++++++
--- /var/tmp/diff_new_pack.yFwgJc/_old  2026-08-21 16:51:55.343986324 +0200
+++ /var/tmp/diff_new_pack.yFwgJc/_new  2026-08-21 16:51:55.350986573 +0200
@@ -16,7 +16,7 @@
 #
 
 
-%define real_version 6.11.1
+%define real_version 6.11.2
 %define short_version 6.11
 %define tar_name qtpositioning-everywhere-src
 %define tar_suffix %{nil}
@@ -30,7 +30,7 @@
 %global __requires_exclude qt6qmlimport\\(SatelliteInformation\\)
 #
 Name:           qt6-positioning%{?pkg_suffix}
-Version:        6.11.1
+Version:        6.11.2
 Release:        0
 Summary:        Qt 6 Positioning plugins and libraries
 License:        GPL-3.0-or-later

++++++ qtpositioning-everywhere-src-6.11.1.tar.xz -> 
qtpositioning-everywhere-src-6.11.2.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qtpositioning-everywhere-src-6.11.1/.cmake.conf 
new/qtpositioning-everywhere-src-6.11.2/.cmake.conf
--- old/qtpositioning-everywhere-src-6.11.1/.cmake.conf 2026-05-08 
03:19:03.000000000 +0200
+++ new/qtpositioning-everywhere-src-6.11.2/.cmake.conf 2026-08-12 
03:33:50.000000000 +0200
@@ -1,4 +1,4 @@
-set(QT_REPO_MODULE_VERSION "6.11.1")
+set(QT_REPO_MODULE_VERSION "6.11.2")
 set(QT_REPO_MODULE_PRERELEASE_VERSION_SEGMENT "alpha1")
 
 set(QT_EXTRA_INTERNAL_TARGET_DEFINES
@@ -6,5 +6,6 @@
     "QT_NO_CONTEXTLESS_CONNECT=1"
     "QT_NO_FOREACH=1"
     "QT_NO_QASCONST=1"
+    "QT_NO_SINGLE_ARGUMENT_QHASH_OVERLOAD=1"
     "QT_NO_URL_CAST_FROM_STRING=1"
 )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qtpositioning-everywhere-src-6.11.1/.tag 
new/qtpositioning-everywhere-src-6.11.2/.tag
--- old/qtpositioning-everywhere-src-6.11.1/.tag        2026-05-08 
03:19:03.000000000 +0200
+++ new/qtpositioning-everywhere-src-6.11.2/.tag        2026-08-12 
03:33:50.000000000 +0200
@@ -1 +1 @@
-7ea5b529ea34b7baaeea5edfe0a1a6410bd14536
+f68ed52ba071c8c7030810ee91fdd186b7d9d9f7
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtpositioning-everywhere-src-6.11.1/dependencies.yaml 
new/qtpositioning-everywhere-src-6.11.2/dependencies.yaml
--- old/qtpositioning-everywhere-src-6.11.1/dependencies.yaml   2026-05-08 
03:19:03.000000000 +0200
+++ new/qtpositioning-everywhere-src-6.11.2/dependencies.yaml   2026-08-12 
03:33:50.000000000 +0200
@@ -1,10 +1,10 @@
 dependencies:
   ../qtbase:
-    ref: 59c81a3c2247b821b9b84b4eb8d939b77e07e276
+    ref: ef55f427f2c8b410d34f8a7681020a3000cf6866
     required: true
   ../qtdeclarative:
-    ref: a02bed441965ee1f18f856352c7d5ee5ba35d795
+    ref: 4e3399c26ec57246c08de019cfcbda8d23604cfa
     required: false
   ../qtserialport:
-    ref: 0bede6c85f1e504aa99844e9898289e0f13b7492
+    ref: 1bc5803a397f1f22b7b305a751f78ad1c6997cc4
     required: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtpositioning-everywhere-src-6.11.1/examples/positioning/satelliteinfo/CMakeLists.txt
 
new/qtpositioning-everywhere-src-6.11.2/examples/positioning/satelliteinfo/CMakeLists.txt
--- 
old/qtpositioning-everywhere-src-6.11.1/examples/positioning/satelliteinfo/CMakeLists.txt
   2026-05-08 03:19:03.000000000 +0200
+++ 
new/qtpositioning-everywhere-src-6.11.2/examples/positioning/satelliteinfo/CMakeLists.txt
   2026-08-12 03:33:50.000000000 +0200
@@ -41,15 +41,13 @@
 endif()
 
 if (APPLE)
-    # Using absolute path for shared plist files is a Ninja bug workaround
-    get_filename_component(SHARED_PLIST_DIR 
${CMAKE_CURRENT_SOURCE_DIR}/../shared ABSOLUTE)
     if (IOS)
         set_target_properties(satelliteinfo PROPERTIES
-            MACOSX_BUNDLE_INFO_PLIST "${SHARED_PLIST_DIR}/Info.cmake.ios.plist"
+            MACOSX_BUNDLE_INFO_PLIST 
"${CMAKE_CURRENT_SOURCE_DIR}/Info.cmake.ios.plist"
         )
     else()
         set_target_properties(satelliteinfo PROPERTIES
-            MACOSX_BUNDLE_INFO_PLIST 
"${SHARED_PLIST_DIR}/Info.cmake.macos.plist"
+            MACOSX_BUNDLE_INFO_PLIST 
"${CMAKE_CURRENT_SOURCE_DIR}/Info.cmake.macos.plist"
         )
     endif()
 endif()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtpositioning-everywhere-src-6.11.1/examples/positioning/satelliteinfo/Info.cmake.ios.plist
 
new/qtpositioning-everywhere-src-6.11.2/examples/positioning/satelliteinfo/Info.cmake.ios.plist
--- 
old/qtpositioning-everywhere-src-6.11.1/examples/positioning/satelliteinfo/Info.cmake.ios.plist
     1970-01-01 01:00:00.000000000 +0100
+++ 
new/qtpositioning-everywhere-src-6.11.2/examples/positioning/satelliteinfo/Info.cmake.ios.plist
     2026-08-12 03:33:50.000000000 +0200
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" 
"http://www.apple.com/DTDs/PropertyList-1.0.dtd";>
+<plist version="1.0">
+<dict>
+    <key>CFBundleInfoDictionaryVersion</key>
+    <string>6.0</string>
+    <key>CFBundlePackageType</key>
+    <string>APPL</string>
+    <key>CFBundleIdentifier</key>
+    <string>${MACOSX_BUNDLE_GUI_IDENTIFIER}</string>
+    <key>CFBundleExecutable</key>
+    <string>${MACOSX_BUNDLE_EXECUTABLE_NAME}</string>
+    <key>CFBundleVersion</key>
+    <string>0.0.1</string>
+    <key>CFBundleShortVersionString</key>
+    <string>0.0.1</string>
+    <key>CFBundleGetInfoString</key>
+    <string></string>
+    <key>NSHumanReadableCopyright</key>
+    <string></string>
+    <key>CFBundleIconFile</key>
+    <string>${MACOSX_BUNDLE_ICON_FILE}</string>
+    <key>CFBundleDevelopmentRegion</key>
+    <string>English</string>
+    <key>LSRequiresIPhoneOS</key>
+    <true/>
+    <key>UILaunchStoryboardName</key>
+    <string>LaunchScreen</string>
+    <key>UISupportedInterfaceOrientations</key>
+    <array>
+        <string>UIInterfaceOrientationPortrait</string>
+        <string>UIInterfaceOrientationPortraitUpsideDown</string>
+        <string>UIInterfaceOrientationLandscapeLeft</string>
+        <string>UIInterfaceOrientationLandscapeRight</string>
+    </array>
+    <key>NSLocationWhenInUseUsageDescription</key>
+    <string>Qt positioning example wants to access your location</string>
+</dict>
+</plist>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtpositioning-everywhere-src-6.11.1/examples/positioning/satelliteinfo/Info.cmake.macos.plist
 
new/qtpositioning-everywhere-src-6.11.2/examples/positioning/satelliteinfo/Info.cmake.macos.plist
--- 
old/qtpositioning-everywhere-src-6.11.1/examples/positioning/satelliteinfo/Info.cmake.macos.plist
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/qtpositioning-everywhere-src-6.11.2/examples/positioning/satelliteinfo/Info.cmake.macos.plist
   2026-08-12 03:33:50.000000000 +0200
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" 
"http://www.apple.com/DTDs/PropertyList-1.0.dtd";>
+<plist version="1.0">
+<dict>
+    <key>CFBundleInfoDictionaryVersion</key>
+    <string>6.0</string>
+    <key>CFBundlePackageType</key>
+    <string>APPL</string>
+    <key>CFBundleName</key>
+    <string>${MACOSX_BUNDLE_BUNDLE_NAME}</string>
+    <key>CFBundleIdentifier</key>
+    <string>${MACOSX_BUNDLE_GUI_IDENTIFIER}</string>
+    <key>CFBundleExecutable</key>
+    <string>${MACOSX_BUNDLE_EXECUTABLE_NAME}</string>
+    <key>CFBundleVersion</key>
+    <string>${MACOSX_BUNDLE_BUNDLE_VERSION}</string>
+    <key>CFBundleShortVersionString</key>
+    <string>${MACOSX_BUNDLE_SHORT_VERSION_STRING}</string>
+    <key>LSMinimumSystemVersion</key>
+    <string>${CMAKE_OSX_DEPLOYMENT_TARGET}</string>
+    <key>NSHumanReadableCopyright</key>
+    <string>${MACOSX_BUNDLE_COPYRIGHT}</string>
+    <key>CFBundleIconFile</key>
+    <string>${MACOSX_BUNDLE_ICON_FILE}</string>
+    <key>CFBundleDevelopmentRegion</key>
+    <string>English</string>
+    <key>NSSupportsAutomaticGraphicsSwitching</key>
+    <true/>
+    <key>NSLocationUsageDescription</key>
+    <string>For Qt example demonstration purposes</string>
+
+</dict>
+</plist>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtpositioning-everywhere-src-6.11.1/examples/positioning/satelliteinfo/Info.qmake.ios.plist
 
new/qtpositioning-everywhere-src-6.11.2/examples/positioning/satelliteinfo/Info.qmake.ios.plist
--- 
old/qtpositioning-everywhere-src-6.11.1/examples/positioning/satelliteinfo/Info.qmake.ios.plist
     1970-01-01 01:00:00.000000000 +0100
+++ 
new/qtpositioning-everywhere-src-6.11.2/examples/positioning/satelliteinfo/Info.qmake.ios.plist
     2026-08-12 03:33:50.000000000 +0200
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" 
"http://www.apple.com/DTDs/PropertyList-1.0.dtd";>
+<plist version="1.0">
+<dict>
+    <key>CFBundleInfoDictionaryVersion</key>
+    <string>6.0</string>
+    <key>CFBundlePackageType</key>
+    <string>APPL</string>
+    <key>CFBundleIdentifier</key>
+    <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
+    <key>CFBundleExecutable</key>
+    <string>$(EXECUTABLE_NAME)</string>
+    <key>CFBundleVersion</key>
+    <string>0.0.1</string>
+    <key>CFBundleShortVersionString</key>
+    <string>0.0.1</string>
+    <key>CFBundleGetInfoString</key>
+    <string></string>
+    <key>NSHumanReadableCopyright</key>
+    <string></string>
+    <key>CFBundleIconFile</key>
+    <string></string>
+    <key>CFBundleDevelopmentRegion</key>
+    <string>English</string>
+    <key>LSRequiresIPhoneOS</key>
+    <true/>
+    <key>UILaunchStoryboardName</key>
+    <string>LaunchScreen</string>
+    <key>UISupportedInterfaceOrientations</key>
+    <array>
+        <string>UIInterfaceOrientationPortrait</string>
+        <string>UIInterfaceOrientationPortraitUpsideDown</string>
+        <string>UIInterfaceOrientationLandscapeLeft</string>
+        <string>UIInterfaceOrientationLandscapeRight</string>
+    </array>
+    <key>NSLocationWhenInUseUsageDescription</key>
+    <string>Qt positioning example wants to access your location</string>
+</dict>
+</plist>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtpositioning-everywhere-src-6.11.1/examples/positioning/satelliteinfo/Info.qmake.macos.plist
 
new/qtpositioning-everywhere-src-6.11.2/examples/positioning/satelliteinfo/Info.qmake.macos.plist
--- 
old/qtpositioning-everywhere-src-6.11.1/examples/positioning/satelliteinfo/Info.qmake.macos.plist
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/qtpositioning-everywhere-src-6.11.2/examples/positioning/satelliteinfo/Info.qmake.macos.plist
   2026-08-12 03:33:50.000000000 +0200
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" 
"http://www.apple.com/DTDs/PropertyList-1.0.dtd";>
+<plist version="1.0">
+<dict>
+    <key>CFBundleExecutable</key>
+    <string>${EXECUTABLE_NAME}</string>
+    <key>CFBundleIconFile</key>
+    <string>${ASSETCATALOG_COMPILER_APPICON_NAME}</string>
+    <key>CFBundleIdentifier</key>
+    <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
+    <key>CFBundleName</key>
+    <string>${EXECUTABLE_NAME}</string>
+    <key>CFBundlePackageType</key>
+    <string>APPL</string>
+    <key>LSMinimumSystemVersion</key>
+    <string>${MACOSX_DEPLOYMENT_TARGET}</string>
+    <key>NSPrincipalClass</key>
+    <string>NSApplication</string>
+    <key>CFBundleDevelopmentRegion</key>
+    <string>$(DEVELOPMENT_LANGUAGE)</string>
+    <key>NSSupportsAutomaticGraphicsSwitching</key>
+    <true/>
+    <key>CFBundleDevelopmentRegion</key>
+    <string>en</string>
+    <key>CFBundleAllowMixedLocalizations</key>
+    <true/>
+    <key>NSLocationUsageDescription</key>
+    <string>For Qt example demonstrative purposes</string>
+    </dict>
+</plist>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtpositioning-everywhere-src-6.11.1/examples/positioning/satelliteinfo/satelliteinfo.pro
 
new/qtpositioning-everywhere-src-6.11.2/examples/positioning/satelliteinfo/satelliteinfo.pro
--- 
old/qtpositioning-everywhere-src-6.11.1/examples/positioning/satelliteinfo/satelliteinfo.pro
        2026-05-08 03:19:03.000000000 +0200
+++ 
new/qtpositioning-everywhere-src-6.11.2/examples/positioning/satelliteinfo/satelliteinfo.pro
        2026-08-12 03:33:50.000000000 +0200
@@ -74,8 +74,8 @@
 
 RESOURCES += data_resources
 
-ios: QMAKE_INFO_PLIST = ../shared/Info.qmake.ios.plist
-macos: QMAKE_INFO_PLIST = ../shared/Info.qmake.macos.plist
+ios: QMAKE_INFO_PLIST = Info.qmake.ios.plist
+macos: QMAKE_INFO_PLIST = Info.qmake.macos.plist
 
 android {
     # explicitly link with serialport in order to
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtpositioning-everywhere-src-6.11.1/examples/positioning/shared/Info.cmake.ios.plist
 
new/qtpositioning-everywhere-src-6.11.2/examples/positioning/shared/Info.cmake.ios.plist
--- 
old/qtpositioning-everywhere-src-6.11.1/examples/positioning/shared/Info.cmake.ios.plist
    2026-05-08 03:19:03.000000000 +0200
+++ 
new/qtpositioning-everywhere-src-6.11.2/examples/positioning/shared/Info.cmake.ios.plist
    1970-01-01 01:00:00.000000000 +0100
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" 
"http://www.apple.com/DTDs/PropertyList-1.0.dtd";>
-<plist version="1.0">
-<dict>
-    <key>CFBundleInfoDictionaryVersion</key>
-    <string>6.0</string>
-    <key>CFBundlePackageType</key>
-    <string>APPL</string>
-    <key>CFBundleIdentifier</key>
-    <string>${MACOSX_BUNDLE_GUI_IDENTIFIER}</string>
-    <key>CFBundleExecutable</key>
-    <string>${MACOSX_BUNDLE_EXECUTABLE_NAME}</string>
-    <key>CFBundleVersion</key>
-    <string>0.0.1</string>
-    <key>CFBundleShortVersionString</key>
-    <string>0.0.1</string>
-    <key>CFBundleGetInfoString</key>
-    <string></string>
-    <key>NSHumanReadableCopyright</key>
-    <string></string>
-    <key>CFBundleIconFile</key>
-    <string>${MACOSX_BUNDLE_ICON_FILE}</string>
-    <key>CFBundleDevelopmentRegion</key>
-    <string>English</string>
-    <key>LSRequiresIPhoneOS</key>
-    <true/>
-    <key>UILaunchStoryboardName</key>
-    <string>LaunchScreen</string>
-    <key>UISupportedInterfaceOrientations</key>
-    <array>
-        <string>UIInterfaceOrientationPortrait</string>
-        <string>UIInterfaceOrientationPortraitUpsideDown</string>
-        <string>UIInterfaceOrientationLandscapeLeft</string>
-        <string>UIInterfaceOrientationLandscapeRight</string>
-    </array>
-    <key>NSLocationWhenInUseUsageDescription</key>
-    <string>Qt positioning example wants to access your location</string>
-</dict>
-</plist>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtpositioning-everywhere-src-6.11.1/examples/positioning/shared/Info.cmake.macos.plist
 
new/qtpositioning-everywhere-src-6.11.2/examples/positioning/shared/Info.cmake.macos.plist
--- 
old/qtpositioning-everywhere-src-6.11.1/examples/positioning/shared/Info.cmake.macos.plist
  2026-05-08 03:19:03.000000000 +0200
+++ 
new/qtpositioning-everywhere-src-6.11.2/examples/positioning/shared/Info.cmake.macos.plist
  1970-01-01 01:00:00.000000000 +0100
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" 
"http://www.apple.com/DTDs/PropertyList-1.0.dtd";>
-<plist version="1.0">
-<dict>
-    <key>CFBundleInfoDictionaryVersion</key>
-    <string>6.0</string>
-    <key>CFBundlePackageType</key>
-    <string>APPL</string>
-    <key>CFBundleName</key>
-    <string>${MACOSX_BUNDLE_BUNDLE_NAME}</string>
-    <key>CFBundleIdentifier</key>
-    <string>${MACOSX_BUNDLE_GUI_IDENTIFIER}</string>
-    <key>CFBundleExecutable</key>
-    <string>${MACOSX_BUNDLE_EXECUTABLE_NAME}</string>
-    <key>CFBundleVersion</key>
-    <string>${MACOSX_BUNDLE_BUNDLE_VERSION}</string>
-    <key>CFBundleShortVersionString</key>
-    <string>${MACOSX_BUNDLE_SHORT_VERSION_STRING}</string>
-    <key>LSMinimumSystemVersion</key>
-    <string>${CMAKE_OSX_DEPLOYMENT_TARGET}</string>
-    <key>NSHumanReadableCopyright</key>
-    <string>${MACOSX_BUNDLE_COPYRIGHT}</string>
-    <key>CFBundleIconFile</key>
-    <string>${MACOSX_BUNDLE_ICON_FILE}</string>
-    <key>CFBundleDevelopmentRegion</key>
-    <string>English</string>
-    <key>NSSupportsAutomaticGraphicsSwitching</key>
-    <true/>
-    <key>NSLocationUsageDescription</key>
-    <string>For Qt example demonstration purposes</string>
-
-</dict>
-</plist>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtpositioning-everywhere-src-6.11.1/examples/positioning/shared/Info.qmake.ios.plist
 
new/qtpositioning-everywhere-src-6.11.2/examples/positioning/shared/Info.qmake.ios.plist
--- 
old/qtpositioning-everywhere-src-6.11.1/examples/positioning/shared/Info.qmake.ios.plist
    2026-05-08 03:19:03.000000000 +0200
+++ 
new/qtpositioning-everywhere-src-6.11.2/examples/positioning/shared/Info.qmake.ios.plist
    1970-01-01 01:00:00.000000000 +0100
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" 
"http://www.apple.com/DTDs/PropertyList-1.0.dtd";>
-<plist version="1.0">
-<dict>
-    <key>CFBundleInfoDictionaryVersion</key>
-    <string>6.0</string>
-    <key>CFBundlePackageType</key>
-    <string>APPL</string>
-    <key>CFBundleIdentifier</key>
-    <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
-    <key>CFBundleExecutable</key>
-    <string>$(EXECUTABLE_NAME)</string>
-    <key>CFBundleVersion</key>
-    <string>0.0.1</string>
-    <key>CFBundleShortVersionString</key>
-    <string>0.0.1</string>
-    <key>CFBundleGetInfoString</key>
-    <string></string>
-    <key>NSHumanReadableCopyright</key>
-    <string></string>
-    <key>CFBundleIconFile</key>
-    <string></string>
-    <key>CFBundleDevelopmentRegion</key>
-    <string>English</string>
-    <key>LSRequiresIPhoneOS</key>
-    <true/>
-    <key>UILaunchStoryboardName</key>
-    <string>LaunchScreen</string>
-    <key>UISupportedInterfaceOrientations</key>
-    <array>
-        <string>UIInterfaceOrientationPortrait</string>
-        <string>UIInterfaceOrientationPortraitUpsideDown</string>
-        <string>UIInterfaceOrientationLandscapeLeft</string>
-        <string>UIInterfaceOrientationLandscapeRight</string>
-    </array>
-    <key>NSLocationWhenInUseUsageDescription</key>
-    <string>Qt positioning example wants to access your location</string>
-</dict>
-</plist>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtpositioning-everywhere-src-6.11.1/examples/positioning/shared/Info.qmake.macos.plist
 
new/qtpositioning-everywhere-src-6.11.2/examples/positioning/shared/Info.qmake.macos.plist
--- 
old/qtpositioning-everywhere-src-6.11.1/examples/positioning/shared/Info.qmake.macos.plist
  2026-05-08 03:19:03.000000000 +0200
+++ 
new/qtpositioning-everywhere-src-6.11.2/examples/positioning/shared/Info.qmake.macos.plist
  1970-01-01 01:00:00.000000000 +0100
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" 
"http://www.apple.com/DTDs/PropertyList-1.0.dtd";>
-<plist version="1.0">
-<dict>
-    <key>CFBundleExecutable</key>
-    <string>${EXECUTABLE_NAME}</string>
-    <key>CFBundleIconFile</key>
-    <string>${ASSETCATALOG_COMPILER_APPICON_NAME}</string>
-    <key>CFBundleIdentifier</key>
-    <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
-    <key>CFBundleName</key>
-    <string>${EXECUTABLE_NAME}</string>
-    <key>CFBundlePackageType</key>
-    <string>APPL</string>
-    <key>LSMinimumSystemVersion</key>
-    <string>${MACOSX_DEPLOYMENT_TARGET}</string>
-    <key>NSPrincipalClass</key>
-    <string>NSApplication</string>
-    <key>CFBundleDevelopmentRegion</key>
-    <string>$(DEVELOPMENT_LANGUAGE)</string>
-    <key>NSSupportsAutomaticGraphicsSwitching</key>
-    <true/>
-    <key>CFBundleDevelopmentRegion</key>
-    <string>en</string>
-    <key>CFBundleAllowMixedLocalizations</key>
-    <true/>
-    <key>NSLocationUsageDescription</key>
-    <string>For Qt example demonstrative purposes</string>
-    </dict>
-</plist>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtpositioning-everywhere-src-6.11.1/examples/positioning/weatherinfo/CMakeLists.txt
 
new/qtpositioning-everywhere-src-6.11.2/examples/positioning/weatherinfo/CMakeLists.txt
--- 
old/qtpositioning-everywhere-src-6.11.1/examples/positioning/weatherinfo/CMakeLists.txt
     2026-05-08 03:19:03.000000000 +0200
+++ 
new/qtpositioning-everywhere-src-6.11.2/examples/positioning/weatherinfo/CMakeLists.txt
     2026-08-12 03:33:50.000000000 +0200
@@ -34,15 +34,13 @@
 )
 
 if (APPLE)
-    # Using absolute path for shared plist files is a Ninja bug workaround
-    get_filename_component(SHARED_PLIST_DIR 
${CMAKE_CURRENT_SOURCE_DIR}/../shared ABSOLUTE)
     if (IOS)
         set_target_properties(weatherinfo PROPERTIES
-            MACOSX_BUNDLE_INFO_PLIST "${SHARED_PLIST_DIR}/Info.cmake.ios.plist"
+            MACOSX_BUNDLE_INFO_PLIST 
"${CMAKE_CURRENT_SOURCE_DIR}/Info.cmake.ios.plist"
         )
     else()
         set_target_properties(weatherinfo PROPERTIES
-            MACOSX_BUNDLE_INFO_PLIST 
"${SHARED_PLIST_DIR}/Info.cmake.macos.plist"
+            MACOSX_BUNDLE_INFO_PLIST 
"${CMAKE_CURRENT_SOURCE_DIR}/Info.cmake.macos.plist"
         )
     endif()
 endif()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtpositioning-everywhere-src-6.11.1/examples/positioning/weatherinfo/Info.cmake.ios.plist
 
new/qtpositioning-everywhere-src-6.11.2/examples/positioning/weatherinfo/Info.cmake.ios.plist
--- 
old/qtpositioning-everywhere-src-6.11.1/examples/positioning/weatherinfo/Info.cmake.ios.plist
       1970-01-01 01:00:00.000000000 +0100
+++ 
new/qtpositioning-everywhere-src-6.11.2/examples/positioning/weatherinfo/Info.cmake.ios.plist
       2026-08-12 03:33:50.000000000 +0200
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" 
"http://www.apple.com/DTDs/PropertyList-1.0.dtd";>
+<plist version="1.0">
+<dict>
+    <key>CFBundleInfoDictionaryVersion</key>
+    <string>6.0</string>
+    <key>CFBundlePackageType</key>
+    <string>APPL</string>
+    <key>CFBundleIdentifier</key>
+    <string>${MACOSX_BUNDLE_GUI_IDENTIFIER}</string>
+    <key>CFBundleExecutable</key>
+    <string>${MACOSX_BUNDLE_EXECUTABLE_NAME}</string>
+    <key>CFBundleVersion</key>
+    <string>0.0.1</string>
+    <key>CFBundleShortVersionString</key>
+    <string>0.0.1</string>
+    <key>CFBundleGetInfoString</key>
+    <string></string>
+    <key>NSHumanReadableCopyright</key>
+    <string></string>
+    <key>CFBundleIconFile</key>
+    <string>${MACOSX_BUNDLE_ICON_FILE}</string>
+    <key>CFBundleDevelopmentRegion</key>
+    <string>English</string>
+    <key>LSRequiresIPhoneOS</key>
+    <true/>
+    <key>UILaunchStoryboardName</key>
+    <string>LaunchScreen</string>
+    <key>UISupportedInterfaceOrientations</key>
+    <array>
+        <string>UIInterfaceOrientationPortrait</string>
+        <string>UIInterfaceOrientationPortraitUpsideDown</string>
+        <string>UIInterfaceOrientationLandscapeLeft</string>
+        <string>UIInterfaceOrientationLandscapeRight</string>
+    </array>
+    <key>NSLocationWhenInUseUsageDescription</key>
+    <string>Qt positioning example wants to access your location</string>
+</dict>
+</plist>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtpositioning-everywhere-src-6.11.1/examples/positioning/weatherinfo/Info.cmake.macos.plist
 
new/qtpositioning-everywhere-src-6.11.2/examples/positioning/weatherinfo/Info.cmake.macos.plist
--- 
old/qtpositioning-everywhere-src-6.11.1/examples/positioning/weatherinfo/Info.cmake.macos.plist
     1970-01-01 01:00:00.000000000 +0100
+++ 
new/qtpositioning-everywhere-src-6.11.2/examples/positioning/weatherinfo/Info.cmake.macos.plist
     2026-08-12 03:33:50.000000000 +0200
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" 
"http://www.apple.com/DTDs/PropertyList-1.0.dtd";>
+<plist version="1.0">
+<dict>
+    <key>CFBundleInfoDictionaryVersion</key>
+    <string>6.0</string>
+    <key>CFBundlePackageType</key>
+    <string>APPL</string>
+    <key>CFBundleName</key>
+    <string>${MACOSX_BUNDLE_BUNDLE_NAME}</string>
+    <key>CFBundleIdentifier</key>
+    <string>${MACOSX_BUNDLE_GUI_IDENTIFIER}</string>
+    <key>CFBundleExecutable</key>
+    <string>${MACOSX_BUNDLE_EXECUTABLE_NAME}</string>
+    <key>CFBundleVersion</key>
+    <string>${MACOSX_BUNDLE_BUNDLE_VERSION}</string>
+    <key>CFBundleShortVersionString</key>
+    <string>${MACOSX_BUNDLE_SHORT_VERSION_STRING}</string>
+    <key>LSMinimumSystemVersion</key>
+    <string>${CMAKE_OSX_DEPLOYMENT_TARGET}</string>
+    <key>NSHumanReadableCopyright</key>
+    <string>${MACOSX_BUNDLE_COPYRIGHT}</string>
+    <key>CFBundleIconFile</key>
+    <string>${MACOSX_BUNDLE_ICON_FILE}</string>
+    <key>CFBundleDevelopmentRegion</key>
+    <string>English</string>
+    <key>NSSupportsAutomaticGraphicsSwitching</key>
+    <true/>
+    <key>NSLocationUsageDescription</key>
+    <string>For Qt example demonstration purposes</string>
+
+</dict>
+</plist>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtpositioning-everywhere-src-6.11.1/examples/positioning/weatherinfo/Info.qmake.ios.plist
 
new/qtpositioning-everywhere-src-6.11.2/examples/positioning/weatherinfo/Info.qmake.ios.plist
--- 
old/qtpositioning-everywhere-src-6.11.1/examples/positioning/weatherinfo/Info.qmake.ios.plist
       1970-01-01 01:00:00.000000000 +0100
+++ 
new/qtpositioning-everywhere-src-6.11.2/examples/positioning/weatherinfo/Info.qmake.ios.plist
       2026-08-12 03:33:50.000000000 +0200
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" 
"http://www.apple.com/DTDs/PropertyList-1.0.dtd";>
+<plist version="1.0">
+<dict>
+    <key>CFBundleInfoDictionaryVersion</key>
+    <string>6.0</string>
+    <key>CFBundlePackageType</key>
+    <string>APPL</string>
+    <key>CFBundleIdentifier</key>
+    <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
+    <key>CFBundleExecutable</key>
+    <string>$(EXECUTABLE_NAME)</string>
+    <key>CFBundleVersion</key>
+    <string>0.0.1</string>
+    <key>CFBundleShortVersionString</key>
+    <string>0.0.1</string>
+    <key>CFBundleGetInfoString</key>
+    <string></string>
+    <key>NSHumanReadableCopyright</key>
+    <string></string>
+    <key>CFBundleIconFile</key>
+    <string></string>
+    <key>CFBundleDevelopmentRegion</key>
+    <string>English</string>
+    <key>LSRequiresIPhoneOS</key>
+    <true/>
+    <key>UILaunchStoryboardName</key>
+    <string>LaunchScreen</string>
+    <key>UISupportedInterfaceOrientations</key>
+    <array>
+        <string>UIInterfaceOrientationPortrait</string>
+        <string>UIInterfaceOrientationPortraitUpsideDown</string>
+        <string>UIInterfaceOrientationLandscapeLeft</string>
+        <string>UIInterfaceOrientationLandscapeRight</string>
+    </array>
+    <key>NSLocationWhenInUseUsageDescription</key>
+    <string>Qt positioning example wants to access your location</string>
+</dict>
+</plist>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtpositioning-everywhere-src-6.11.1/examples/positioning/weatherinfo/Info.qmake.macos.plist
 
new/qtpositioning-everywhere-src-6.11.2/examples/positioning/weatherinfo/Info.qmake.macos.plist
--- 
old/qtpositioning-everywhere-src-6.11.1/examples/positioning/weatherinfo/Info.qmake.macos.plist
     1970-01-01 01:00:00.000000000 +0100
+++ 
new/qtpositioning-everywhere-src-6.11.2/examples/positioning/weatherinfo/Info.qmake.macos.plist
     2026-08-12 03:33:50.000000000 +0200
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" 
"http://www.apple.com/DTDs/PropertyList-1.0.dtd";>
+<plist version="1.0">
+<dict>
+    <key>CFBundleExecutable</key>
+    <string>${EXECUTABLE_NAME}</string>
+    <key>CFBundleIconFile</key>
+    <string>${ASSETCATALOG_COMPILER_APPICON_NAME}</string>
+    <key>CFBundleIdentifier</key>
+    <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
+    <key>CFBundleName</key>
+    <string>${EXECUTABLE_NAME}</string>
+    <key>CFBundlePackageType</key>
+    <string>APPL</string>
+    <key>LSMinimumSystemVersion</key>
+    <string>${MACOSX_DEPLOYMENT_TARGET}</string>
+    <key>NSPrincipalClass</key>
+    <string>NSApplication</string>
+    <key>CFBundleDevelopmentRegion</key>
+    <string>$(DEVELOPMENT_LANGUAGE)</string>
+    <key>NSSupportsAutomaticGraphicsSwitching</key>
+    <true/>
+    <key>CFBundleDevelopmentRegion</key>
+    <string>en</string>
+    <key>CFBundleAllowMixedLocalizations</key>
+    <true/>
+    <key>NSLocationUsageDescription</key>
+    <string>For Qt example demonstrative purposes</string>
+    </dict>
+</plist>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtpositioning-everywhere-src-6.11.1/examples/positioning/weatherinfo/weatherinfo.pro
 
new/qtpositioning-everywhere-src-6.11.2/examples/positioning/weatherinfo/weatherinfo.pro
--- 
old/qtpositioning-everywhere-src-6.11.1/examples/positioning/weatherinfo/weatherinfo.pro
    2026-05-08 03:19:03.000000000 +0200
+++ 
new/qtpositioning-everywhere-src-6.11.2/examples/positioning/weatherinfo/weatherinfo.pro
    2026-08-12 03:33:50.000000000 +0200
@@ -48,8 +48,8 @@
 
 RESOURCES += qml_resources
 
-ios: QMAKE_INFO_PLIST = ../shared/Info.qmake.ios.plist
-macos: QMAKE_INFO_PLIST = ../shared/Info.qmake.macos.plist
+ios: QMAKE_INFO_PLIST = Info.qmake.ios.plist
+macos: QMAKE_INFO_PLIST = Info.qmake.macos.plist
 
 target.path = $$[QT_INSTALL_EXAMPLES]/positioning/weatherinfo
 INSTALLS += target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtpositioning-everywhere-src-6.11.1/src/positioning/doc/src/plugins/nmea.qdoc
 
new/qtpositioning-everywhere-src-6.11.2/src/positioning/doc/src/plugins/nmea.qdoc
--- 
old/qtpositioning-everywhere-src-6.11.1/src/positioning/doc/src/plugins/nmea.qdoc
   2026-05-08 03:19:03.000000000 +0200
+++ 
new/qtpositioning-everywhere-src-6.11.2/src/positioning/doc/src/plugins/nmea.qdoc
   2026-08-12 03:33:50.000000000 +0200
@@ -93,6 +93,9 @@
 locate one of the well-known serial devices (as if \c {nmea.source = serial:}
 was specified).
 
+\warning The \c {socket://} scheme supports only unencrypted connection.
+Therefore it is only suitable for use within a host or over a trusted network.
+
 \section1 Position source usage example
 
 The following examples show how to create a \b nmea PositionSource
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtpositioning-everywhere-src-6.11.1/src/positioning/qgeopath.cpp 
new/qtpositioning-everywhere-src-6.11.2/src/positioning/qgeopath.cpp
--- old/qtpositioning-everywhere-src-6.11.1/src/positioning/qgeopath.cpp        
2026-05-08 03:19:03.000000000 +0200
+++ new/qtpositioning-everywhere-src-6.11.2/src/positioning/qgeopath.cpp        
2026-08-12 03:33:50.000000000 +0200
@@ -11,7 +11,11 @@
 #include "qwebmercator_p.h"
 
 #include "qdoublevector2d_p.h"
-#include "qdoublevector3d_p.h"
+
+#include <QtCore/qmutex.h>
+
+#include <mutex>
+
 QT_BEGIN_NAMESPACE
 
 QT_IMPL_METATYPE_EXTERN(QGeoPath)
@@ -340,6 +344,8 @@
  *
 
*******************************************************************************/
 
+Q_CONSTINIT static QBasicMutex globalPathMutex;
+
 QGeoPathPrivateBase::QGeoPathPrivateBase()
     : QGeoShapePrivate(QGeoShape::PathType)
 {
@@ -351,6 +357,15 @@
     setPath(path);
 }
 
+QGeoPathPrivateBase::QGeoPathPrivateBase(const QGeoPathPrivateBase &other)
+    : QGeoShapePrivate(other),
+      m_path(other.m_path)
+{
+    // Do not copy cached members: they would need mutex locked!
+    // m_dirty is set to true by default, so that it'll properly trigger
+    // re-evaluation when needed.
+}
+
 QGeoPathPrivateBase::~QGeoPathPrivateBase()
 {
 }
@@ -381,8 +396,7 @@
 
 QGeoRectangle QGeoPathPrivateBase::boundingGeoRectangle() const
 {
-    if (m_bboxDirty)
-        const_cast<QGeoPathPrivateBase *>(this)->computeBoundingBox();
+    ensureBoundingBoxUpdated();
     return m_bbox;
 }
 
@@ -437,7 +451,6 @@
     // Need min/maxLati, so update bbox
     QList<double> deltaXs;
     double minX, maxX, minLati, maxLati;
-    m_bboxDirty = false;
     computeBBox(m_path, deltaXs, minX, maxX, minLati, maxLati, m_bbox);
 
     if (degreesLatitude > 0.0)
@@ -449,7 +462,8 @@
         p.setLongitude(QLocationUtils::wrapLong(p.longitude() + 
degreesLongitude));
     }
     m_bbox.translate(degreesLatitude, degreesLongitude);
-    m_leftBoundWrapped = QWebMercator::coordToMercator(m_bbox.topLeft()).x();
+
+    m_bboxDirty.store(false, std::memory_order_release);
 }
 
 void QGeoPathPrivateBase::setPath(const QList<QGeoCoordinate> &path)
@@ -506,22 +520,25 @@
     markDirty();
 }
 
-void QGeoPathPrivateBase::computeBoundingBox()
+void QGeoPathPrivateBase::markDirty()
 {
-    QList<double> deltaXs;
-    double minX, maxX, minLati, maxLati;
-    m_bboxDirty = false;
-    computeBBox(m_path, deltaXs, minX, maxX, minLati, maxLati, m_bbox);
-    m_leftBoundWrapped = QWebMercator::coordToMercator(m_bbox.topLeft()).x();
+    m_bboxDirty.store(true, std::memory_order_release);
 }
 
-void QGeoPathPrivateBase::markDirty()
+void QGeoPathPrivateBase::ensureBoundingBoxUpdated() const
 {
-    m_bboxDirty = true;
+    if (m_bboxDirty.load(std::memory_order_acquire)) {
+        const std::scoped_lock lock(globalPathMutex);
+        if (m_bboxDirty.load(std::memory_order_acquire)) {
+            QList<double> deltaXs;
+            double minX, maxX, minLati, maxLati;
+            computeBBox(m_path, deltaXs, minX, maxX, minLati, maxLati, m_bbox);
+            m_bboxDirty.store(false, std::memory_order_release);
+        }
+    }
 }
 
 
-
 QGeoPathPrivate::QGeoPathPrivate()
     : QGeoPathPrivateBase()
 {
@@ -569,8 +586,7 @@
     // possible, try that other wrap-position for it in a second pass.
 
     // Should be redundant now, unless other functions rely on this one's 
side-effect:
-    if (m_bboxDirty)
-        const_cast<QGeoPathPrivate &>(*this).computeBoundingBox();
+    ensureBoundingBoxUpdated();
 
     double lineRadius = qMax(width() * 0.5, 0.2); // minimum radius: 20cm
 
@@ -670,13 +686,20 @@
 QGeoPathPrivateEager::QGeoPathPrivateEager()
 :   QGeoPathPrivate()
 {
-    m_bboxDirty = false; // never dirty on the eager version
+    m_bboxDirty.store(false, std::memory_order_relaxed); // never dirty on the 
eager version
 }
 
 QGeoPathPrivateEager::QGeoPathPrivateEager(const QList<QGeoCoordinate> &path, 
const qreal width)
 :   QGeoPathPrivate(path, width)
 {
-    m_bboxDirty = false; // never dirty on the eager version
+    m_bboxDirty.store(false, std::memory_order_relaxed); // never dirty on the 
eager version
+    markDirty(); // calculate the cached values
+}
+
+QGeoPathPrivateEager::QGeoPathPrivateEager(const QGeoPathPrivateEager &other)
+    : QGeoPathPrivate(other)
+{
+    m_bboxDirty.store(false, std::memory_order_relaxed); // never dirty on the 
eager version
     markDirty(); // calculate the cached values
 }
 
@@ -694,7 +717,6 @@
 {
     // do the calculations directly
     computeBBox(m_path, m_deltaXs, m_minX, m_maxX, m_minLati, m_maxLati, 
m_bbox);
-    m_leftBoundWrapped = QWebMercator::coordToMercator(m_bbox.topLeft()).x();
 }
 
 void QGeoPathPrivateEager::translate(double degreesLatitude, double 
degreesLongitude)
@@ -710,7 +732,6 @@
     m_bbox.translate(degreesLatitude, degreesLongitude);
     m_minLati += degreesLatitude;
     m_maxLati += degreesLatitude;
-    m_leftBoundWrapped = QWebMercator::coordToMercator(m_bbox.topLeft()).x();
 }
 
 void QGeoPathPrivateEager::addCoordinate(const QGeoCoordinate &coordinate)
@@ -722,15 +743,9 @@
     updateBoundingBox();
 }
 
-void QGeoPathPrivateEager::QGeoPathPrivateEager::computeBoundingBox()
-{
-    Q_UNREACHABLE();
-}
-
 void QGeoPathPrivateEager::QGeoPathPrivateEager::updateBoundingBox()
 {
     updateBBox(m_path, m_deltaXs, m_minX, m_maxX, m_minLati, m_maxLati, 
m_bbox);
-    m_leftBoundWrapped = QWebMercator::coordToMercator(m_bbox.topLeft()).x();
 }
 
 QGeoPathEager::QGeoPathEager() : QGeoPath()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtpositioning-everywhere-src-6.11.1/src/positioning/qgeopath_p.h 
new/qtpositioning-everywhere-src-6.11.2/src/positioning/qgeopath_p.h
--- old/qtpositioning-everywhere-src-6.11.1/src/positioning/qgeopath_p.h        
2026-05-08 03:19:03.000000000 +0200
+++ new/qtpositioning-everywhere-src-6.11.2/src/positioning/qgeopath_p.h        
2026-08-12 03:33:50.000000000 +0200
@@ -142,6 +142,7 @@
 public:
     QGeoPathPrivateBase();
     QGeoPathPrivateBase(const QList<QGeoCoordinate> &path);
+    QGeoPathPrivateBase(const QGeoPathPrivateBase &other);
     ~QGeoPathPrivateBase() override;
 
 // QGeoShape API
@@ -166,14 +167,14 @@
     virtual void replaceCoordinate(qsizetype index, const QGeoCoordinate 
&coordinate);
     virtual void removeCoordinate(const QGeoCoordinate &coordinate);
     virtual void removeCoordinate(qsizetype index);
-    virtual void computeBoundingBox();
     virtual void markDirty();
 
+    void ensureBoundingBoxUpdated() const;
+
 // data members
     QList<QGeoCoordinate> m_path;
-    QGeoRectangle m_bbox; // cached
-    double m_leftBoundWrapped; // cached
-    bool m_bboxDirty = false;
+    mutable QGeoRectangle m_bbox; // cached
+    mutable std::atomic<bool> m_bboxDirty = true; // default is dirty!
 };
 
 // Lazy by default. Eager, within the module, used only in 
MapItems/MapObjectsQSG
@@ -206,6 +207,7 @@
 public:
     QGeoPathPrivateEager();
     QGeoPathPrivateEager(const QList<QGeoCoordinate> &path, const qreal width 
= 0.0);
+    QGeoPathPrivateEager(const QGeoPathPrivateEager &other);
     ~QGeoPathPrivateEager();
 
 // QGeoShapePrivate API
@@ -215,7 +217,6 @@
     void translate(double degreesLatitude, double degreesLongitude) override;
     void markDirty() override;
     void addCoordinate(const QGeoCoordinate &coordinate) override;
-    void computeBoundingBox() override;
 
 // *Eager API
     void updateBoundingBox();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtpositioning-everywhere-src-6.11.1/src/positioning/qgeopolygon.cpp 
new/qtpositioning-everywhere-src-6.11.2/src/positioning/qgeopolygon.cpp
--- old/qtpositioning-everywhere-src-6.11.1/src/positioning/qgeopolygon.cpp     
2026-05-08 03:19:03.000000000 +0200
+++ new/qtpositioning-everywhere-src-6.11.2/src/positioning/qgeopolygon.cpp     
2026-08-12 03:33:50.000000000 +0200
@@ -15,6 +15,10 @@
 #include "qdoublevector3d_p.h"
 #include "qwebmercator_p.h"
 
+#include <QtCore/qmutex.h>
+
+#include <mutex>
+
 QT_BEGIN_NAMESPACE
 
 QT_IMPL_METATYPE_EXTERN(QGeoPolygon)
@@ -420,6 +424,8 @@
  *
 
*******************************************************************************/
 
+Q_CONSTINIT static QBasicMutex globalPolygonMutex;
+
 QGeoPolygonPrivate::QGeoPolygonPrivate()
 :   QGeoPathPrivateBase()
 {
@@ -432,6 +438,16 @@
     type = QGeoShape::PolygonType;
 }
 
+QGeoPolygonPrivate::QGeoPolygonPrivate(const QGeoPolygonPrivate &other)
+    : QGeoPathPrivateBase(other),
+      m_holesList(other.m_holesList)
+{
+    type = QGeoShape::PolygonType;
+    // Do not copy cached members: they would need mutex locked!
+    // m_clipperDirty is set to true by default, so that it'll properly trigger
+    // re-evaluation when needed.
+}
+
 QGeoPolygonPrivate::~QGeoPolygonPrivate() {}
 
 QGeoShapePrivate *QGeoPolygonPrivate::clone() const
@@ -481,11 +497,10 @@
     // Need min/maxLati, so update bbox
     QList<double> m_deltaXs;
     double m_minX, m_maxX, m_minLati, m_maxLati;
-    m_bboxDirty = false; // Updated in translatePoly
     computeBBox(m_path, m_deltaXs, m_minX, m_maxX, m_minLati, m_maxLati, 
m_bbox);
     translatePoly(m_path, m_holesList, m_bbox, degreesLatitude, 
degreesLongitude, m_maxLati, m_minLati);
-    m_leftBoundWrapped = QWebMercator::coordToMercator(m_bbox.topLeft()).x();
-    m_clipperDirty = true;
+    m_bboxDirty.store(false, std::memory_order_release);
+    m_clipperDirty.store(true, std::memory_order_release);
 }
 
 bool QGeoPolygonPrivate::operator==(const QGeoShapePrivate &other) const
@@ -535,8 +550,7 @@
 
 bool QGeoPolygonPrivate::polygonContains(const QGeoCoordinate &coordinate) 
const
 {
-    if (m_clipperDirty)
-        const_cast<QGeoPolygonPrivate *>(this)->updateClipperPath(); // this 
one updates bbox too if needed
+    ensureClipperPathUpdated(); // this one updates bbox too if needed
 
     QDoubleVector2D coord = QWebMercator::coordToMercator(coordinate);
 
@@ -559,34 +573,47 @@
 
 void QGeoPolygonPrivate::markDirty()
 {
-    m_bboxDirty = m_clipperDirty = true;
+    QGeoPathPrivateBase::markDirty();
+    m_clipperDirty.store(true, std::memory_order_release);
 }
 
-void QGeoPolygonPrivate::updateClipperPath()
+void QGeoPolygonPrivate::ensureClipperPathUpdated() const
 {
-    if (m_bboxDirty)
-        computeBoundingBox();
-    m_clipperDirty = false;
-
-    QList<QDoubleVector2D> preservedPath;
-    preservedPath.reserve(m_path.size());
-    for (const QGeoCoordinate &c : std::as_const(m_path)) {
-        QDoubleVector2D crd = QWebMercator::coordToMercator(c);
-        if (crd.x() < m_leftBoundWrapped)
-            crd.setX(crd.x() + 1.0);
-        preservedPath << crd;
+    ensureBoundingBoxUpdated();
+    if (m_clipperDirty.load(std::memory_order_acquire)) {
+        const std::scoped_lock lock(globalPolygonMutex);
+        if (m_clipperDirty.load(std::memory_order_acquire)) {
+            m_leftBoundWrapped = 
QWebMercator::coordToMercator(m_bbox.topLeft()).x();
+            QList<QDoubleVector2D> preservedPath;
+            preservedPath.reserve(m_path.size());
+            for (const QGeoCoordinate &c : std::as_const(m_path)) {
+                QDoubleVector2D crd = QWebMercator::coordToMercator(c);
+                if (crd.x() < m_leftBoundWrapped)
+                    crd.setX(crd.x() + 1.0);
+                preservedPath << crd;
+            }
+            m_clipperWrapper.setPolygon(preservedPath);
+
+            m_clipperDirty.store(false, std::memory_order_release);
+        }
     }
-    m_clipperWrapper.setPolygon(preservedPath);
 }
 
 QGeoPolygonPrivateEager::QGeoPolygonPrivateEager() : QGeoPolygonPrivate()
 {
-    m_bboxDirty = false; // never dirty on the eager version
+    m_bboxDirty.store(false, std::memory_order_relaxed); // never dirty on the 
eager version
 }
 
 QGeoPolygonPrivateEager::QGeoPolygonPrivateEager(const QList<QGeoCoordinate> 
&path) : QGeoPolygonPrivate(path)
 {
-    m_bboxDirty = false; // never dirty on the eager version
+    m_bboxDirty.store(false, std::memory_order_relaxed); // never dirty on the 
eager version
+    markDirty(); // calculate the cached values
+}
+
+QGeoPolygonPrivateEager::QGeoPolygonPrivateEager(const QGeoPolygonPrivateEager 
&other)
+    : QGeoPolygonPrivate(other)
+{
+    m_bboxDirty.store(false, std::memory_order_relaxed); // never dirty on the 
eager version
     markDirty(); // calculate the cached values
 }
 
@@ -603,16 +630,14 @@
 void QGeoPolygonPrivateEager::translate(double degreesLatitude, double 
degreesLongitude)
 {
     translatePoly(m_path, m_holesList, m_bbox, degreesLatitude, 
degreesLongitude, m_maxLati, m_minLati);
-    m_leftBoundWrapped = QWebMercator::coordToMercator(m_bbox.topLeft()).x();
-    m_clipperDirty = true;
+    m_clipperDirty.store(true, std::memory_order_release);
 }
 
 void QGeoPolygonPrivateEager::markDirty()
 {
-    m_clipperDirty = true;
+    m_clipperDirty.store(true, std::memory_order_release);
     // do the calculations directly
     computeBBox(m_path, m_deltaXs, m_minX, m_maxX, m_minLati, m_maxLati, 
m_bbox);
-    m_leftBoundWrapped = QWebMercator::coordToMercator(m_bbox.topLeft()).x();
 }
 
 void QGeoPolygonPrivateEager::addCoordinate(const QGeoCoordinate &coordinate)
@@ -620,15 +645,10 @@
     if (!coordinate.isValid())
         return;
     m_path.append(coordinate);
-    m_clipperDirty = true;
+    m_clipperDirty.store(true, std::memory_order_release);
     updateBoundingBox(); // do not markDirty as it uses computeBoundingBox 
instead
 }
 
-void QGeoPolygonPrivateEager::computeBoundingBox()
-{
-    Q_UNREACHABLE();
-}
-
 void QGeoPolygonPrivateEager::updateBoundingBox()
 {
     updateBBox(m_path, m_deltaXs, m_minX, m_maxX, m_minLati, m_maxLati, 
m_bbox);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtpositioning-everywhere-src-6.11.1/src/positioning/qgeopolygon_p.h 
new/qtpositioning-everywhere-src-6.11.2/src/positioning/qgeopolygon_p.h
--- old/qtpositioning-everywhere-src-6.11.1/src/positioning/qgeopolygon_p.h     
2026-05-08 03:19:03.000000000 +0200
+++ new/qtpositioning-everywhere-src-6.11.2/src/positioning/qgeopolygon_p.h     
2026-08-12 03:33:50.000000000 +0200
@@ -26,6 +26,7 @@
 public:
     QGeoPolygonPrivate();
     QGeoPolygonPrivate(const QList<QGeoCoordinate> &path);
+    QGeoPolygonPrivate(const QGeoPolygonPrivate &other);
     ~QGeoPolygonPrivate();
 
 // QGeoShape API
@@ -46,12 +47,13 @@
 
     void addHole(const QList<QGeoCoordinate> &holePath);
     void removeHole(qsizetype index);
-    void updateClipperPath();
+    void ensureClipperPathUpdated() const;
 
 // data members
-    bool m_clipperDirty = true;
     QList<QList<QGeoCoordinate>> m_holesList;
-    QClipperUtils m_clipperWrapper;
+    mutable QClipperUtils m_clipperWrapper; // cached
+    mutable double m_leftBoundWrapped = 0.0; // cached
+    mutable std::atomic<bool> m_clipperDirty = true;
 };
 
 class Q_POSITIONING_EXPORT QGeoPolygonPrivateEager final : public 
QGeoPolygonPrivate
@@ -59,6 +61,7 @@
 public:
     QGeoPolygonPrivateEager();
     QGeoPolygonPrivateEager(const QList<QGeoCoordinate> &path);
+    QGeoPolygonPrivateEager(const QGeoPolygonPrivateEager &other);
     ~QGeoPolygonPrivateEager();
 
 // QGeoShape API
@@ -68,7 +71,6 @@
 // QGeoPath API
     void markDirty() override;
     void addCoordinate(const QGeoCoordinate &coordinate) override;
-    void computeBoundingBox() override;
 
 // QGeoPolygonPrivate API
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtpositioning-everywhere-src-6.11.1/src/positioning/qlocationutils.cpp 
new/qtpositioning-everywhere-src-6.11.2/src/positioning/qlocationutils.cpp
--- old/qtpositioning-everywhere-src-6.11.1/src/positioning/qlocationutils.cpp  
2026-05-08 03:19:03.000000000 +0200
+++ new/qtpositioning-everywhere-src-6.11.2/src/positioning/qlocationutils.cpp  
2026-08-12 03:33:50.000000000 +0200
@@ -387,20 +387,26 @@
         infos.clear();
         return QNmeaSatelliteInfoSource::FullyParsed; // Malformed sentence.
     }
+
+    // The hard max limit for the number of sentences in one message is used
+    // to prevent malicious messages. The protocol does not seem to define any
+    // maximum, but this value provides an upper limit that is more than enough
+    // in practice.
+    static constexpr quint32 MaxTotalSentences = 250;
     bool ok;
-    const int totalSentences = parts.at(1).toInt(&ok);
-    if (!ok) {
+    const quint32 totalSentences = parts.at(1).toUInt(&ok);
+    if (!ok || totalSentences > MaxTotalSentences) {
         infos.clear();
         return QNmeaSatelliteInfoSource::FullyParsed; // Malformed sentence.
     }
 
-    const int sentence = parts.at(2).toInt(&ok);
-    if (!ok) {
+    const quint32 sentence = parts.at(2).toUInt(&ok);
+    if (!ok || sentence > totalSentences) {
         infos.clear();
         return QNmeaSatelliteInfoSource::FullyParsed; // Malformed sentence.
     }
 
-    const int totalSats = parts.at(3).toInt(&ok);
+    const quint32 totalSats = parts.at(3).toUInt(&ok);
     if (!ok) {
         infos.clear();
         return QNmeaSatelliteInfoSource::FullyParsed; // Malformed sentence.
@@ -408,15 +414,25 @@
 
     if (sentence == 1)
         infos.clear();
+    else if (infos.isEmpty()) // sentences out of order or DDoS spotted earlier
+        return QNmeaSatelliteInfoSource::FullyParsed; // Malformed sentence.
+
+    static constexpr qsizetype MaxTotalSatellites = 1000;
+    const auto currentSatsSize = infos.size();
+    if (currentSatsSize > qint64(totalSats) || currentSatsSize > 
MaxTotalSatellites) {
+        // Maybe DDoS: otherwise, probably something is wrong; reject, either 
way.
+        infos.clear();
+        return QNmeaSatelliteInfoSource::FullyParsed; // Malformed sentence.
+    }
 
-    const int numSatInSentence = qMin(sentence * 4, totalSats) - (sentence - 
1) * 4;
+    const qint64 numSatInSentence = qMin(sentence * 4, totalSats) - (sentence 
- 1) * 4;
     if (parts.size() < (4 + numSatInSentence * 4)) {
         infos.clear();
         return QNmeaSatelliteInfoSource::FullyParsed; // Malformed sentence.
     }
 
     int field = 4;
-    for (int i = 0; i < numSatInSentence; ++i) {
+    for (qint64 i = 0; i < numSatInSentence; ++i) {
         QGeoSatelliteInfo info;
         info.setSatelliteSystem(system);
         int prn = parts.at(field++).toInt(&ok);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtpositioning-everywhere-src-6.11.1/tests/auto/qnmeapositioninfosource/tst_qnmeapositioninfosource.cpp
 
new/qtpositioning-everywhere-src-6.11.2/tests/auto/qnmeapositioninfosource/tst_qnmeapositioninfosource.cpp
--- 
old/qtpositioning-everywhere-src-6.11.1/tests/auto/qnmeapositioninfosource/tst_qnmeapositioninfosource.cpp
  2026-05-08 03:19:03.000000000 +0200
+++ 
new/qtpositioning-everywhere-src-6.11.2/tests/auto/qnmeapositioninfosource/tst_qnmeapositioninfosource.cpp
  2026-08-12 03:33:50.000000000 +0200
@@ -10,6 +10,8 @@
 #include <QtCore/QElapsedTimer>
 #include <QtCore/QtNumeric>
 
+using namespace Qt::StringLiterals;
+
 #ifdef Q_OS_WIN
 
 // Windows seems to require longer timeouts and step length
@@ -588,3 +590,295 @@
     QTest::newRow("startUpdates(), bad second sentence") << bytes
             << (QList<QDateTime>() << firstDateTime << lastDateTime) << 
StartUpdatesMethod;
 }
+
+void tst_QNmeaPositionInfoSource::getPositionInfoFromNmea_data()
+{
+    QTest::addColumn<QByteArray>("bytes");
+    QTest::addColumn<bool>("expectedResult");
+    QTest::addColumn<QGeoPositionInfo>("expectedPosInfo");
+
+    // Invalid common cases
+
+    const QTime tm(9, 9, 24);
+
+    QByteArray msg = QLocationTestUtils::createGgaSentence(tm).toLatin1();
+    msg.replace("$GPGGA", "$GPGXX");
+    QTest::addRow("unknown_type") << msg << false << QGeoPositionInfo();
+
+    msg = QLocationTestUtils::createGgaSentence(tm).toLatin1();
+    char &crc = msg[msg.size() - 3];
+    crc ^= 0xFF; // XOR the CRC byte
+    QTest::addRow("wrong_CRC") << msg << false << QGeoPositionInfo();
+
+    msg = QLocationTestUtils::createGgaSentence(tm).toLatin1();
+    msg.replace("$GPGGA", "$GGA");
+    QTest::addRow("missing_talker_id") << msg << false << QGeoPositionInfo();
+
+    msg = QLocationTestUtils::createGgaSentence(tm).toLatin1();
+    msg.removeFirst();
+    QTest::addRow("invalid_start") << msg << false << QGeoPositionInfo();
+
+    msg = QLocationTestUtils::createGgaSentence(tm).toLatin1().chopped(4);
+    QTest::addRow("no_checksum") << msg << false << QGeoPositionInfo();
+
+    // Malformed data in GGA
+
+    QGeoPositionInfo info;
+    info.setTimestamp(QDateTime(QDate(), tm, QTimeZone::UTC));
+    QTest::addRow("GGA_wrong_lat_dir")
+            << QLocationTestUtils::addNmeaChecksumAndBreaks(
+                       
"$GPGGA,090924.000,2734.76859,X,15305.99361,E,1,04,,49.4,M,,,,*"_L1)
+                       .toLatin1()
+            << true
+            << info;
+    QTest::addRow("GGA_wrong_lon_dir")
+            << QLocationTestUtils::addNmeaChecksumAndBreaks(
+                       
"$GPGGA,090924.000,2734.76859,S,15305.99361,X,1,04,,49.4,M,,,,*"_L1)
+                       .toLatin1()
+            << true
+            << info;
+    QTest::addRow("GGA_malformed_lat")
+            << QLocationTestUtils::addNmeaChecksumAndBreaks(
+                       
"$GPGGA,090924.000,abc76859,S,15305.99361,E,1,04,,49.4,M,,,,*"_L1)
+                       .toLatin1()
+            << true
+            << info;
+    QTest::addRow("GGA_malformed_lon")
+            << QLocationTestUtils::addNmeaChecksumAndBreaks(
+                       
"$GPGGA,090924.000,2734.76859,S,15305.def,E,1,04,,49.4,M,,,,*"_L1)
+                       .toLatin1()
+            << true
+            << info;
+
+    info.setTimestamp(QDateTime());
+    info.setCoordinate(QGeoCoordinate(-27.5794765, 153.0998935, 49.4));
+    QTest::addRow("GGA_malformed_time")
+            << QLocationTestUtils::addNmeaChecksumAndBreaks(
+                       
"$GPGGA,1234time,2734.76859,S,15305.99361,E,1,04,,49.4,M,,,,*"_L1)
+                       .toLatin1()
+            << true
+            << info;
+
+    info.setTimestamp(QDateTime(QDate(), tm, QTimeZone::UTC));
+    QTest::addRow("GGA_malformed_hdop")
+            << QLocationTestUtils::addNmeaChecksumAndBreaks(
+                       
"$GPGGA,090924.000,2734.76859,S,15305.99361,E,1,04,hdop,49.4,M,,,,*"_L1)
+                       .toLatin1()
+            << true
+            << info;
+
+    info.setCoordinate(QGeoCoordinate(-27.5794765, 153.0998935)); // no alt
+    QTest::addRow("GGA_malformed_alt")
+            << QLocationTestUtils::addNmeaChecksumAndBreaks(
+                       
"$GPGGA,090924.000,2734.76859,S,15305.99361,E,1,04,,4b.4,M,,,,*"_L1)
+                       .toLatin1()
+            << true
+            << info;
+
+    // Malformed data in GSA
+
+    info = QGeoPositionInfo();
+
+    QTest::addRow("GSA_malformed_hdop")
+            << QLocationTestUtils::addNmeaChecksumAndBreaks(
+                       "$GPGSA,A,3,,,,,,,,,,,,,3.0,foo,*"_L1).toLatin1()
+            << true
+            << info;
+
+    info.setAttribute(QGeoPositionInfo::HorizontalAccuracy, 2.0);
+    QTest::addRow("GSA_malformed_vdop")
+            << QLocationTestUtils::addNmeaChecksumAndBreaks(
+                       "$GPGSA,A,3,,,,,,,,,,,,,3.0,1.0,foo,*"_L1).toLatin1()
+            << true
+            << info;
+
+    // Malformed data in GLL
+
+    info = QGeoPositionInfo();
+    info.setCoordinate(QGeoCoordinate(-27.5794765, 153.0998935));
+
+    QTest::addRow("GLL_malformed_timestamp")
+            << QLocationTestUtils::addNmeaChecksumAndBreaks(
+                       
"$GNGLL,2734.76859,S,15305.99361,E,09092,A,D*"_L1).toLatin1()
+            << true
+            << info;
+
+    info.setCoordinate(QGeoCoordinate());
+    info.setTimestamp(QDateTime(QDate(), tm, QTimeZone::UTC));
+
+    QTest::addRow("GLL_wrong_lat_dir")
+            << QLocationTestUtils::addNmeaChecksumAndBreaks(
+                       
"$GNGLL,2734.76859,W,15305.99361,E,090924,A,D*"_L1).toLatin1()
+            << true
+            << info;
+
+    QTest::addRow("GLL_wrong_lon_dir")
+            << QLocationTestUtils::addNmeaChecksumAndBreaks(
+                       
"$GNGLL,2734.76859,S,15305.99361,N,090924,A,D*"_L1).toLatin1()
+            << true
+            << info;
+
+    QTest::addRow("GLL_malformed_lat")
+            << QLocationTestUtils::addNmeaChecksumAndBreaks(
+                       
"$GNGLL,27a4.7b8c9,S,15305.99361,E,090924,A,D*"_L1).toLatin1()
+            << true
+            << info;
+
+    QTest::addRow("GLL_malformed_lon")
+            << QLocationTestUtils::addNmeaChecksumAndBreaks(
+                       
"$GNGLL,2734.76859,S,15d0e.f9361,E,090924,A,D*"_L1).toLatin1()
+            << true
+            << info;
+
+    // Malformed data in RMC
+
+    info = QGeoPositionInfo();
+    info.setTimestamp(QDateTime(QDate(), tm, QTimeZone::UTC));
+
+    QTest::addRow("RMC_malformed_short_date")
+            << QLocationTestUtils::addNmeaChecksumAndBreaks(
+                       "$GPRMC,090924.000,A,,,,,,,12345,,,*"_L1).toLatin1()
+            << true
+            << info;
+
+    info.setTimestamp(QDateTime(QDate(2025, 5, 4), QTime(), QTimeZone::UTC));
+
+    QTest::addRow("RMC_malformed_time")
+            << QLocationTestUtils::addNmeaChecksumAndBreaks(
+                       "$GPRMC,abcdef.xyz,A,,,,,,,040525,,,*"_L1)
+                       .toLatin1()
+            << true
+            << info;
+
+    info.setTimestamp(QDateTime(QDate(2025, 5, 4), tm, QTimeZone::UTC));
+
+    QTest::addRow("RMC_wrong_lat_dir")
+            << QLocationTestUtils::addNmeaChecksumAndBreaks(
+                       
"$GPRMC,090924.000,A,2734.76859,X,15305.99361,E,,,040525,,,*"_L1)
+                       .toLatin1()
+            << true
+            << info;
+
+    QTest::addRow("RMC_wrong_lon_dir")
+            << QLocationTestUtils::addNmeaChecksumAndBreaks(
+                       
"$GPRMC,090924.000,A,2734.76859,S,15305.99361,X,,,040525,,,*"_L1)
+                       .toLatin1()
+            << true
+            << info;
+
+    QTest::addRow("RMC_malformed_lat")
+            << QLocationTestUtils::addNmeaChecksumAndBreaks(
+                       
"$GPRMC,090924.000,A,abcde.fghij,S,15305.99361,E,,,040525,,,*"_L1)
+                       .toLatin1()
+            << true
+            << info;
+
+    QTest::addRow("RMC_malformed_lon")
+            << QLocationTestUtils::addNmeaChecksumAndBreaks(
+                       
"$GPRMC,090924.000,A,2734.76859,S,abcde.fghij,E,,,040525,,,*"_L1)
+                       .toLatin1()
+            << true
+            << info;
+
+    info.setCoordinate(QGeoCoordinate(-27.5794765, 153.0998935));
+    info.setAttribute(QGeoPositionInfo::Direction, 45.0);
+
+    QTest::addRow("RMC_malformed_speed")
+            << QLocationTestUtils::addNmeaChecksumAndBreaks(
+                       
"$GPRMC,090924.000,A,2734.76859,S,15305.99361,E,abc,45.0,040525,,*"_L1)
+                       .toLatin1()
+            << true
+            << info;
+
+    info.removeAttribute(QGeoPositionInfo::Direction);
+    info.setAttribute(QGeoPositionInfo::GroundSpeed, qreal(0.7 * 1.852 / 3.6));
+
+    QTest::addRow("RMC_malformed_bearing")
+            << QLocationTestUtils::addNmeaChecksumAndBreaks(
+                       
"$GPRMC,090924.000,A,2734.76859,S,15305.99361,E,0.7,abc,040525,,*"_L1)
+                       .toLatin1()
+            << true
+            << info;
+
+    info.removeAttribute(QGeoPositionInfo::GroundSpeed);
+
+    QTest::addRow("RMC_malformed_mag_var")
+            << QLocationTestUtils::addNmeaChecksumAndBreaks(
+                       
"$GPRMC,090924.000,A,2734.76859,S,15305.99361,E,,,040525,abc,E*"_L1)
+                       .toLatin1()
+            << true
+            << info;
+
+    // Malformed data in VTG
+
+    info = QGeoPositionInfo();
+    info.setAttribute(QGeoPositionInfo::Direction, 8.4);
+
+    QTest::addRow("VTG_malformed_speed")
+            << QLocationTestUtils::addNmeaChecksumAndBreaks(
+                       "$GNVTG,8.4,T,,M,1.3,N,abc,K,D*"_L1)
+                       .toLatin1()
+            << true
+            << info;
+
+    info = QGeoPositionInfo();
+    info.setAttribute(QGeoPositionInfo::GroundSpeed, 5.7 / 3.6);
+
+    QTest::addRow("VTG_malformed_direction")
+            << QLocationTestUtils::addNmeaChecksumAndBreaks(
+                       "$GNVTG,abc,T,,M,1.3,N,5.7,K,D*"_L1)
+                       .toLatin1()
+            << true
+            << info;
+
+    // Malformed data in ZDA
+
+    info = QGeoPositionInfo();
+    info.setTimestamp(QDateTime(QDate(), tm, QTimeZone::UTC));
+
+    QTest::addRow("ZDA_short_year")
+            << QLocationTestUtils::addNmeaChecksumAndBreaks(
+                       "$GPZDA,090924.000,04,05,25,,*"_L1)
+                       .toLatin1()
+            << true
+            << info;
+
+    info.setTimestamp(QDateTime(QDate(2025, 5, 4), QTime(), QTimeZone::UTC));
+
+    QTest::addRow("ZDA_invalid_time")
+            << QLocationTestUtils::addNmeaChecksumAndBreaks(
+                       "$GPZDA,abc,04,05,2025,,*"_L1)
+                       .toLatin1()
+            << true
+            << info;
+
+    info.setTimestamp(QDateTime(QDate(), tm, QTimeZone::UTC));
+
+    QTest::addRow("ZDA_malformed_day")
+            << QLocationTestUtils::addNmeaChecksumAndBreaks(
+                       "$GPZDA,090924.000,abc,05,2025,,*"_L1)
+                       .toLatin1()
+            << true
+            << info;
+
+    QTest::addRow("ZDA_malformed_month")
+            << QLocationTestUtils::addNmeaChecksumAndBreaks(
+                       "$GPZDA,090924.000,04,abc,2025,,*"_L1)
+                       .toLatin1()
+            << true
+            << info;
+}
+
+void tst_QNmeaPositionInfoSource::getPositionInfoFromNmea()
+{
+    QFETCH(const QByteArray, bytes);
+    QFETCH(const bool, expectedResult);
+    QFETCH(const QGeoPositionInfo, expectedPosInfo);
+
+    QGeoPositionInfo info;
+    TestNmeaPosInfoSource source(m_mode);
+    const bool res = source.getPosInfoFromNmea(bytes, info);
+
+    QCOMPARE_EQ(res, expectedResult);
+    QCOMPARE_EQ(info, expectedPosInfo);
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtpositioning-everywhere-src-6.11.1/tests/auto/qnmeapositioninfosource/tst_qnmeapositioninfosource.h
 
new/qtpositioning-everywhere-src-6.11.2/tests/auto/qnmeapositioninfosource/tst_qnmeapositioninfosource.h
--- 
old/qtpositioning-everywhere-src-6.11.1/tests/auto/qnmeapositioninfosource/tst_qnmeapositioninfosource.h
    2026-05-08 03:19:03.000000000 +0200
+++ 
new/qtpositioning-everywhere-src-6.11.2/tests/auto/qnmeapositioninfosource/tst_qnmeapositioninfosource.h
    2026-08-12 03:33:50.000000000 +0200
@@ -89,6 +89,9 @@
     void testWithBadNmea();
     void testWithBadNmea_data();
 
+    void getPositionInfoFromNmea_data();
+    void getPositionInfoFromNmea();
+
 private:
     QNmeaPositionInfoSource::UpdateMode m_mode;
 };
@@ -155,3 +158,23 @@
         return 1024 + QIODevice::bytesAvailable();
     }
 };
+
+//---------------------------------------------------
+
+class TestNmeaPosInfoSource : public QNmeaPositionInfoSource
+{
+    Q_OBJECT
+
+public:
+    TestNmeaPosInfoSource(UpdateMode mode) : QNmeaPositionInfoSource(mode)
+    {
+        setUserEquivalentRangeError(1.0);
+    }
+    ~TestNmeaPosInfoSource() override = default;
+
+    bool getPosInfoFromNmea(QByteArrayView bytes, QGeoPositionInfo &info)
+    {
+        bool hasFix = false;
+        return parsePosInfoFromNmeaData(bytes, &info, &hasFix);
+    }
+};
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtpositioning-everywhere-src-6.11.1/tests/auto/qnmeasatelliteinfosource/nmea/tst_nmeasatelliteinfosource.cpp
 
new/qtpositioning-everywhere-src-6.11.2/tests/auto/qnmeasatelliteinfosource/nmea/tst_nmeasatelliteinfosource.cpp
--- 
old/qtpositioning-everywhere-src-6.11.1/tests/auto/qnmeasatelliteinfosource/nmea/tst_nmeasatelliteinfosource.cpp
    2026-05-08 03:19:03.000000000 +0200
+++ 
new/qtpositioning-everywhere-src-6.11.2/tests/auto/qnmeasatelliteinfosource/nmea/tst_nmeasatelliteinfosource.cpp
    2026-08-12 03:33:50.000000000 +0200
@@ -151,6 +151,8 @@
     QFETCH(QList<QGeoSatelliteInfo>, desiredInUse);
 
     QNmeaSatelliteInfoSource source(mode);
+    if (mode == QNmeaSatelliteInfoSource::UpdateMode::SimulationMode)
+        
QVERIFY(source.setBackendProperty(QNmeaSatelliteInfoSource::SimulationUpdateInterval,
 10));
     auto feeder = new DataFeeder(&source);
     source.setDevice(feeder);
 
@@ -161,15 +163,18 @@
     source.startUpdates();
     feeder->setMessages(messages);
 
-    QTRY_VERIFY_WITH_TIMEOUT(messageSentSpy.size() == messages.size(), 2000);
-    QVERIFY(!inViewSpy.isEmpty());
-    QVERIFY(!inUseSpy.isEmpty());
+    QTRY_VERIFY_WITH_TIMEOUT(messageSentSpy.size() == messages.size(), 10000);
 
-    const auto inView = 
inViewSpy.back().at(0).value<QList<QGeoSatelliteInfo>>();
-    QCOMPARE(inView, desiredInView);
-
-    const auto inUse = inUseSpy.back().at(0).value<QList<QGeoSatelliteInfo>>();
-    QCOMPARE(inUse, desiredInUse);
+    if (!desiredInView.isEmpty()) {
+        QVERIFY(!inViewSpy.isEmpty());
+        const auto inView = 
inViewSpy.back().at(0).value<QList<QGeoSatelliteInfo>>();
+        QCOMPARE(inView, desiredInView);
+    }
+    if (!desiredInUse.isEmpty()) {
+        QVERIFY(!inUseSpy.isEmpty());
+        const auto inUse = 
inUseSpy.back().at(0).value<QList<QGeoSatelliteInfo>>();
+        QCOMPARE(inUse, desiredInUse);
+    }
 }
 
 void tst_QNmeaSatelliteInfoSource::parseDataStream_data()
@@ -511,6 +516,94 @@
                                    gnComplexGlnsGsaMessage, 
gnComplexBduGsaMessage,
                                    complexGpsGsvMessage1,   
complexGpsGsvMessage2 }
             << complexGpsGlnsBduInView << complexGpsGlnsBduInUse;
+
+    // Malformed input data
+
+    struct ModeInfo {
+        QNmeaSatelliteInfoSource::UpdateMode mode;
+        QByteArray name;
+    };
+
+    const std::array<ModeInfo, 2> modes = {
+        ModeInfo{ QNmeaSatelliteInfoSource::UpdateMode::RealTimeMode, 
"realtime" },
+        ModeInfo{ QNmeaSatelliteInfoSource::UpdateMode::SimulationMode, 
"simulation" },
+    };
+
+    for (const auto &mode : modes) {
+        const auto gpsGsvNegativeTotalNumMessage =
+                QLocationTestUtils::addNmeaChecksumAndBreaks(
+                        
"$GPGSV,-1,1,4,05,,,25,07,,,,08,,,,13,,,36*").toLatin1();
+        const auto emptyGpsGsaMessage =
+                QLocationTestUtils::addNmeaChecksumAndBreaks(
+                        "$GPGSA,A,1,,,,,,,,,,,,,50.95,50.94,1.00*").toLatin1();
+
+        QTest::addRow("%s GPS negative total messages", mode.name.data())
+                << mode.mode
+                << QList<QByteArray>{ gpsGsvNegativeTotalNumMessage, 
emptyGpsGsaMessage }
+                << QList<QGeoSatelliteInfo>() << QList<QGeoSatelliteInfo>();
+
+        const auto gpsGsvFirstMessage =
+                QLocationTestUtils::addNmeaChecksumAndBreaks(
+                        
"$GPGSV,10,1,8,05,,,25,07,,,,08,,,,13,,,36*").toLatin1();
+        const auto gpsGsvNegativeSentenceNumMessage =
+                QLocationTestUtils::addNmeaChecksumAndBreaks(
+                        
"$GPGSV,10,-1,8,05,,,25,07,,,,08,,,,13,,,36*").toLatin1();
+
+        QTest::addRow("%s GPS negative sentence num", mode.name.data())
+                << mode.mode
+                << QList<QByteArray>{ gpsGsvFirstMessage,
+                                      gpsGsvNegativeSentenceNumMessage,
+                                      emptyGpsGsaMessage }
+                << QList<QGeoSatelliteInfo>() << QList<QGeoSatelliteInfo>();
+
+        const auto gpsGsvNegativeTotalSatMessage =
+                QLocationTestUtils::addNmeaChecksumAndBreaks(
+                        
"$GPGSV,10,1,-4,05,,,25,07,,,,08,,,,13,,,36*").toLatin1();
+        QTest::addRow("%s GPS negative total satellite num", mode.name.data())
+                << mode.mode
+                << QList<QByteArray>{ gpsGsvNegativeTotalSatMessage,
+                                      emptyGpsGsaMessage }
+                << QList<QGeoSatelliteInfo>() << QList<QGeoSatelliteInfo>();
+
+        const auto gpsGsvSentenceGreaterThanTotalMessage =
+                QLocationTestUtils::addNmeaChecksumAndBreaks(
+                        
"$GPGSV,10,11,8,05,,,25,07,,,,08,,,,13,,,36*").toLatin1();
+
+        QTest::addRow("%s GPS sentence num greater than total num", 
mode.name.data())
+                << mode.mode
+                << QList<QByteArray>{ gpsGsvFirstMessage,
+                                      gpsGsvSentenceGreaterThanTotalMessage,
+                                      emptyGpsGsaMessage }
+                << QList<QGeoSatelliteInfo>() << QList<QGeoSatelliteInfo>();
+
+        const auto gpsGsvTooLargeTotalNumMessage =
+                QLocationTestUtils::addNmeaChecksumAndBreaks(
+                        
"$GPGSV,1001,1,4,05,,,25,07,,,,08,,,,13,,,36*").toLatin1();
+        QTest::addRow("%s GPS total messages too large", mode.name.data())
+                << mode.mode
+                << QList<QByteArray>{ gpsGsvTooLargeTotalNumMessage,
+                                      emptyGpsGsaMessage }
+                << QList<QGeoSatelliteInfo>() << QList<QGeoSatelliteInfo>();
+
+        const auto gpsGsvSecondMessage =
+                QLocationTestUtils::addNmeaChecksumAndBreaks(
+                        
"$GPGSV,10,2,2000,05,,,25,07,,,,08,,,,13,,,36*").toLatin1();
+
+        // Craft a message that repeatedly sends the second sentence, thus
+        // potentially triggering an OOM condition by endlessly accumulating
+        // the list of parsed satellites. In this test we send only 300
+        // sentences, that represents 1200 satellites.
+        // We should stop after 1000 accumulated satellites, clear the list and
+        // discard all follow-up messages.
+        QList<QByteArray> repeatedSecondMessage = { gpsGsvFirstMessage };
+        repeatedSecondMessage.append(QList<QByteArray>(300, 
gpsGsvSecondMessage));
+        repeatedSecondMessage.append(emptyGpsGsaMessage);
+
+        QTest::addRow("%s GPS repeated sentence DDoS", mode.name.data())
+                << mode.mode
+                << repeatedSecondMessage
+                << QList<QGeoSatelliteInfo>() << QList<QGeoSatelliteInfo>();
+    }
 }
 
 QGeoSatelliteInfo

Reply via email to