[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#931199: marked as done (buster-pu: package freeorion/0.4.8-1+deb10u1)



Your message dated Sat, 07 Sep 2019 14:34:49 +0100
with message-id <[🔎] f49e2985d8466065c49c03185c24465a32228fb5.camel@adam-barratt.org.uk>
and subject line Closing bugs for fixes including in 10.1 point release
has caused the Debian Bug report #931199,
regarding buster-pu: package freeorion/0.4.8-1+deb10u1
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
931199: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=931199
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock

Please unblock package freeorion

Freeorion crashed when someone tried to load or save a game. We
believe this issue was resolved in version 0.4.8-3 and it would be
great if we could release Buster with this version.
This is Debian bug #930417.

Thanks,

Markus

unblock freeorion/0.4.8-3

-- System Information:
Debian Release: 10.0
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: amd64 (x86_64)

Kernel: Linux 4.9.0-9-amd64 (SMP w/4 CPU cores)
Locale: LANG=de_DE.UTF-8, LC_CTYPE=de_DE.UTF-8 (charmap=UTF-8), LANGUAGE=de_DE.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: unable to detect
diff -Nru freeorion-0.4.8/debian/changelog freeorion-0.4.8/debian/changelog
--- freeorion-0.4.8/debian/changelog	2018-08-31 17:09:10.000000000 +0200
+++ freeorion-0.4.8/debian/changelog	2019-06-23 01:52:26.000000000 +0200
@@ -1,3 +1,16 @@
+freeorion (0.4.8-3) unstable; urgency=medium
+
+  * Really fix save or load game crash. (Closes: #930417)
+
+ -- Markus Koschany <apo@debian.org>  Sun, 23 Jun 2019 01:52:26 +0200
+
+freeorion (0.4.8-2) unstable; urgency=medium
+
+  * Fix save or load game crash. Thanks to Michal Mauser for the report and
+    Bernhard Übelacker for the investigation. (Closes: #930417)
+
+ -- Markus Koschany <apo@debian.org>  Sun, 16 Jun 2019 01:02:41 +0200
+
 freeorion (0.4.8-1) unstable; urgency=medium
 
   * New upstream version 0.4.8.
diff -Nru freeorion-0.4.8/debian/patches/debian-bug-930417.patch freeorion-0.4.8/debian/patches/debian-bug-930417.patch
--- freeorion-0.4.8/debian/patches/debian-bug-930417.patch	1970-01-01 01:00:00.000000000 +0100
+++ freeorion-0.4.8/debian/patches/debian-bug-930417.patch	2019-06-23 01:52:26.000000000 +0200
@@ -0,0 +1,147 @@
+From: Markus Koschany <apo@debian.org>
+Date: Sun, 16 Jun 2019 01:10:41 +0200
+Subject: debian-bug-930417
+
+Bug-Debian: https://bugs.debian.org/930417
+Origin: https://github.com/freeorion/freeorion/pull/2366/commits/1e94e406fa309c60c4b68ef08b424b65a7bd0e4d
+---
+ server/SaveLoad.cpp | 70 +++++++++++++++++++++++++++++------------------------
+ 1 file changed, 39 insertions(+), 31 deletions(-)
+
+diff --git a/server/SaveLoad.cpp b/server/SaveLoad.cpp
+index ecb73a3..37614d7 100644
+--- a/server/SaveLoad.cpp
++++ b/server/SaveLoad.cpp
+@@ -333,8 +333,13 @@ void LoadGame(const std::string& filename, ServerSaveGameData& server_save_game_
+         if (!ifs)
+             throw std::runtime_error(UNABLE_TO_OPEN_FILE);
+ 
+-        try {
+-            // first attempt binary deserialziation
++        std::string signature(5, '\0');
++        if (!ifs.read(&signature[0], 5))
++            throw std::runtime_error(UNABLE_TO_OPEN_FILE);
++        boost::iostreams::seek(ifs, 0, std::ios_base::beg);
++
++        if (strncmp(signature.c_str(), "<?xml", 5)) {
++            // XML file format signature not found; try as binary
+             freeorion_bin_iarchive ia(ifs);
+             DebugLogger() << "Reading binary iarchive";
+             ia >> BOOST_SERIALIZATION_NVP(ignored_save_preview_data);
+@@ -350,14 +355,10 @@ void LoadGame(const std::string& filename, ServerSaveGameData& server_save_game_
+             Deserialize(ia, universe);
+ 
+             DebugLogger() << "Done deserializing";
+-        } catch (...) {
+-            // if binary deserialization failed, try more-portable XML deserialization
+-
+-            // reset to start of stream (attempted binary serialization will have consumed some input...)
+-            boost::iostreams::seek(ifs, 0, std::ios_base::beg);
+-
++        } else {
+             // create archive with (preallocated) buffer...
+             freeorion_xml_iarchive xia(ifs);
++            DebugLogger() << "Reading XML iarchive";
+             // read from save file: uncompressed header serialized data, with compressed main archive string at end...
+             // deserialize uncompressed save header info
+             xia >> BOOST_SERIALIZATION_NVP(ignored_save_preview_data);
+@@ -458,18 +459,21 @@ void LoadGalaxySetupData(const std::string& filename, GalaxySetupData& galaxy_se
+         if (!ifs)
+             throw std::runtime_error(UNABLE_TO_OPEN_FILE);
+ 
+-        try {
+-            // first attempt binary deserialziation
++        std::string signature(5, '\0');
++        if (!ifs.read(&signature[0], 5))
++            throw std::runtime_error(UNABLE_TO_OPEN_FILE);
++        boost::iostreams::seek(ifs, 0, std::ios_base::beg);
++
++        if (strncmp(signature.c_str(), "<?xml", 5)) {
++            // XML file format signature not found; try as binary
++            DebugLogger() << "Attempting binary deserialization...";
+             freeorion_bin_iarchive ia(ifs);
+ 
+             ia >> BOOST_SERIALIZATION_NVP(ignored_save_preview_data);
+             ia >> BOOST_SERIALIZATION_NVP(galaxy_setup_data);
+ 
+-        } catch(...) {
+-            // if binary deserialization failed, try more-portable XML deserialization
+-
+-            // reset to start of stream (attempted binary serialization will have consumed some input...)
+-            boost::iostreams::seek(ifs, 0, std::ios_base::beg);
++        } else {
++            DebugLogger() << "Attempting XML deserialization...";
+             freeorion_xml_iarchive ia(ifs);
+ 
+             ia >> BOOST_SERIALIZATION_NVP(ignored_save_preview_data);
+@@ -498,8 +502,13 @@ void LoadPlayerSaveHeaderData(const std::string& filename, std::vector<PlayerSav
+         if (!ifs)
+             throw std::runtime_error(UNABLE_TO_OPEN_FILE);
+ 
+-        try {
+-            // first attempt binary deserialziation
++        std::string signature(5, '\0');
++        if (!ifs.read(&signature[0], 5))
++            throw std::runtime_error(UNABLE_TO_OPEN_FILE);
++        boost::iostreams::seek(ifs, 0, std::ios_base::beg);
++
++        if (strncmp(signature.c_str(), "<?xml", 5)) {
++            // XML file format signature not found; try as binary
+             DebugLogger() << "Attempting binary deserialization...";
+             freeorion_bin_iarchive ia(ifs);
+ 
+@@ -507,13 +516,8 @@ void LoadPlayerSaveHeaderData(const std::string& filename, std::vector<PlayerSav
+             ia >> BOOST_SERIALIZATION_NVP(ignored_galaxy_setup_data);
+             ia >> BOOST_SERIALIZATION_NVP(ignored_server_save_game_data);
+             ia >> BOOST_SERIALIZATION_NVP(player_save_header_data);
+-
+-        } catch (...) {
+-            // if binary deserialization failed, try more-portable XML deserialization
+-            DebugLogger() << "Trying again with XML deserialization...";
+-
+-            // reset to start of stream (attempted binary serialization will have consumed some input...)
+-            boost::iostreams::seek(ifs, 0, std::ios_base::beg);
++        } else {
++            DebugLogger() << "Attempting XML deserialization...";
+             freeorion_xml_iarchive ia(ifs);
+ 
+             ia >> BOOST_SERIALIZATION_NVP(ignored_save_preview_data);
+@@ -521,6 +525,7 @@ void LoadPlayerSaveHeaderData(const std::string& filename, std::vector<PlayerSav
+             ia >> BOOST_SERIALIZATION_NVP(ignored_server_save_game_data);
+             ia >> BOOST_SERIALIZATION_NVP(player_save_header_data);
+         }
++
+         // skipping additional deserialization which is not needed for this function
+         DebugLogger() << "Done reading player save game data...";
+     } catch (const std::exception& e) {
+@@ -545,8 +550,14 @@ void LoadEmpireSaveGameData(const std::string& filename, std::map<int, SaveGameE
+         if (!ifs)
+             throw std::runtime_error(UNABLE_TO_OPEN_FILE);
+ 
+-        try {
+-            // first attempt binary deserialziation
++        std::string signature(5, '\0');
++        if (!ifs.read(&signature[0], 5))
++            throw std::runtime_error(UNABLE_TO_OPEN_FILE);
++        boost::iostreams::seek(ifs, 0, std::ios_base::beg);
++
++        if (strncmp(signature.c_str(), "<?xml", 5)) {
++            // XML file format signature not found; try as binary
++            DebugLogger() << "Attempting binary deserialization...";
+             freeorion_bin_iarchive ia(ifs);
+ 
+             ia >> BOOST_SERIALIZATION_NVP(ignored_save_preview_data);
+@@ -555,11 +566,8 @@ void LoadEmpireSaveGameData(const std::string& filename, std::map<int, SaveGameE
+             ia >> BOOST_SERIALIZATION_NVP(ignored_player_save_header_data);
+             ia >> BOOST_SERIALIZATION_NVP(empire_save_game_data);
+ 
+-        } catch (...) {
+-            // if binary deserialization failed, try more-portable XML deserialization
+-
+-            // reset to start of stream (attempted binary serialization will have consumed some input...)
+-            boost::iostreams::seek(ifs, 0, std::ios_base::beg);
++        } else {
++            DebugLogger() << "Attempting XML deserialization...";
+             freeorion_xml_iarchive ia(ifs);
+ 
+             ia >> BOOST_SERIALIZATION_NVP(ignored_save_preview_data);
diff -Nru freeorion-0.4.8/debian/patches/really-fix-debian-bug-930417.patch freeorion-0.4.8/debian/patches/really-fix-debian-bug-930417.patch
--- freeorion-0.4.8/debian/patches/really-fix-debian-bug-930417.patch	1970-01-01 01:00:00.000000000 +0100
+++ freeorion-0.4.8/debian/patches/really-fix-debian-bug-930417.patch	2019-06-23 01:52:26.000000000 +0200
@@ -0,0 +1,44 @@
+From: Markus Koschany <apo@debian.org>
+Date: Sun, 23 Jun 2019 01:50:54 +0200
+Subject: really fix debian bug 930417
+
+Bug-Upstream: https://github.com/freeorion/freeorion/issues/2406
+Origin: https://github.com/freeorion/freeorion/commit/3e840f8d747fd0e6a513f3ef0278d3931f813109
+---
+ util/SaveGamePreviewUtils.cpp | 16 +++++++++-------
+ 1 file changed, 9 insertions(+), 7 deletions(-)
+
+diff --git a/util/SaveGamePreviewUtils.cpp b/util/SaveGamePreviewUtils.cpp
+index b9d49df..92122b1 100644
+--- a/util/SaveGamePreviewUtils.cpp
++++ b/util/SaveGamePreviewUtils.cpp
+@@ -65,7 +65,14 @@ namespace {
+ 
+         DebugLogger() << "LoadSaveGamePreviewData: Loading preview from: " << path.string();
+         try {
+-            try {
++            // read the first five letters of the stream and check if it is opening an xml file
++            std::string xxx5(5, ' ');
++            ifs.read(&xxx5[0], 5);
++            const std::string xml5{"<?xml"};
++            // reset to start of stream
++            boost::iostreams::seek(ifs, 0, std::ios_base::beg);
++            // binary deserialization iff document is not xml
++            if (xml5 != xxx5) {
+                 ScopedTimer timer("LoadSaveGamePreviewData (binary): " + path.string(), true);
+ 
+                 // first attempt binary deserialziation
+@@ -74,12 +81,7 @@ namespace {
+                 ia >> BOOST_SERIALIZATION_NVP(save_preview_data);
+                 ia >> BOOST_SERIALIZATION_NVP(galaxy_setup_data);
+ 
+-            } catch (...) {
+-                // if binary deserialization failed, try more-portable XML deserialization
+-
+-                // reset to start of stream (attempted binary serialization will have consumed some input...)
+-                boost::iostreams::seek(ifs, 0, std::ios_base::beg);
+-
++            } else {
+                 DebugLogger() << "Deserializing XML data";
+                 freeorion_xml_iarchive ia(ifs);
+                 ia >> BOOST_SERIALIZATION_NVP(save_preview_data);
diff -Nru freeorion-0.4.8/debian/patches/series freeorion-0.4.8/debian/patches/series
--- freeorion-0.4.8/debian/patches/series	1970-01-01 01:00:00.000000000 +0100
+++ freeorion-0.4.8/debian/patches/series	2019-06-23 01:52:26.000000000 +0200
@@ -0,0 +1,2 @@
+debian-bug-930417.patch
+really-fix-debian-bug-930417.patch

--- End Message ---
--- Begin Message ---
Version: 10.1

Hi,

The fixes referenced by each of these bugs were included in today's
buster point release.

Regards,

Adam

--- End Message ---

Reply to: