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

Bug#861788: marked as done (unblock: libosmium/2.11.3-1)



Your message dated Thu, 04 May 2017 21:07:00 +0000
with message-id <193b919a-2b68-966d-b439-10eddf9f112a@thykier.net>
and subject line Re: Bug#861788: unblock: libosmium/2.11.3-1
has caused the Debian Bug report #861788,
regarding unblock: libosmium/2.11.3-1
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.)


-- 
861788: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=861788
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 libosmium

Upstream has only fixed bugs for this release in line with the freeze
policy.

(include/attach the debdiff against the package in testing)

unblock libosmium/2.11.3-1

Kind Regards,

Bas
diff -Nru libosmium-2.11.1/CHANGELOG.md libosmium-2.11.3/CHANGELOG.md
--- libosmium-2.11.1/CHANGELOG.md	2017-03-07 13:54:48.000000000 +0100
+++ libosmium-2.11.3/CHANGELOG.md	2017-05-03 14:01:48.000000000 +0200
@@ -8,6 +8,24 @@
 
 ### Fixed
 
+## [2.11.3] - 2017-05-03
+
+### Fixed
+
+- Two bugs in area assembler affecting very complex multipolygons and
+  multipolygons with overlapping or nearly overlapping lines.
+- Invalid use of iterators leading to undefined behaviour in area assembler
+  code.
+- Read OPL file correctly even if trailing newline in file is missing.
+
+
+## [2.11.2] - 2017-04-10
+
+### Fixed
+
+- Use minimum size of 64 bytes for buffers. This fixes an infinite loop
+  when buffer size is zero.
+
 
 ## [2.11.1] - 2017-03-07
 
@@ -531,7 +549,9 @@
   Doxygen (up to version 1.8.8). This version contains a workaround to fix
   this.
 
-[unreleased]: https://github.com/osmcode/libosmium/compare/v2.11.1...HEAD
+[unreleased]: https://github.com/osmcode/libosmium/compare/v2.11.3...HEAD
+[2.11.3]: https://github.com/osmcode/libosmium/compare/v2.11.2...v2.11.3
+[2.11.2]: https://github.com/osmcode/libosmium/compare/v2.11.1...v2.11.2
 [2.11.1]: https://github.com/osmcode/libosmium/compare/v2.11.0...v2.11.1
 [2.11.0]: https://github.com/osmcode/libosmium/compare/v2.10.3...v2.11.0
 [2.10.3]: https://github.com/osmcode/libosmium/compare/v2.10.2...v2.10.3
diff -Nru libosmium-2.11.1/CMakeLists.txt libosmium-2.11.3/CMakeLists.txt
--- libosmium-2.11.1/CMakeLists.txt	2017-03-07 13:54:48.000000000 +0100
+++ libosmium-2.11.3/CMakeLists.txt	2017-05-03 14:01:48.000000000 +0200
@@ -25,7 +25,7 @@
 
 set(LIBOSMIUM_VERSION_MAJOR 2)
 set(LIBOSMIUM_VERSION_MINOR 11)
-set(LIBOSMIUM_VERSION_PATCH 1)
+set(LIBOSMIUM_VERSION_PATCH 3)
 
 set(LIBOSMIUM_VERSION
     "${LIBOSMIUM_VERSION_MAJOR}.${LIBOSMIUM_VERSION_MINOR}.${LIBOSMIUM_VERSION_PATCH}")
diff -Nru libosmium-2.11.1/debian/changelog libosmium-2.11.3/debian/changelog
--- libosmium-2.11.1/debian/changelog	2017-03-07 18:31:00.000000000 +0100
+++ libosmium-2.11.3/debian/changelog	2017-05-03 18:44:44.000000000 +0200
@@ -1,3 +1,17 @@
+libosmium (2.11.3-1) unstable; urgency=medium
+
+  * New upstream bugfix release.
+    - Use minimum size of 64 bytes for buffers. This fixes an infinite
+      loop when buffer size is zero.
+    - Two bugs in area assembler affecting very complex multipolygons and
+      multipolygons with overlapping or nearly overlapping lines.
+    - Invalid use of iterators leading to undefined behaviour in area
+      assembler code.
+    - Read OPL file correctly even if trailing newline in file is missing.
+  * Update watch file to limit results to 2.11.x releases.
+
+ -- Bas Couwenberg <sebastic@debian.org>  Wed, 03 May 2017 18:44:44 +0200
+
 libosmium (2.11.1-1) unstable; urgency=medium
 
   * New upstream bugfix release.
diff -Nru libosmium-2.11.1/debian/watch libosmium-2.11.3/debian/watch
--- libosmium-2.11.1/debian/watch	2017-03-07 18:23:24.000000000 +0100
+++ libosmium-2.11.3/debian/watch	2017-05-03 18:38:25.000000000 +0200
@@ -4,4 +4,4 @@
 uversionmangle=s/(\d)[_\.\-\+]?((RC|rc|pre|dev|beta|alpha)\d*)$/$1~$2/;s/RC/rc/,\
 filenamemangle=s/(?:.*\/)?(?:rel|v|libosmium)[\-\_]?(\d[\d\-\.]+)\.(tgz|tbz|txz|(?:tar\.(?:gz|bz2|xz)))/libosmium-$1.$2/ \
 https://github.com/osmcode/libosmium/releases \
-(?:.*/)?(?:rel|v|libosmium)[\-\_]?(\d[\d\-\.]+)\.(?:tgz|tbz|txz|(?:tar\.(?:gz|bz2|xz)))
+(?:.*/)?(?:rel|v|libosmium)[\-\_]?(2\.11\.\d[\d\-\.]*)\.(?:tgz|tbz|txz|(?:tar\.(?:gz|bz2|xz)))
diff -Nru libosmium-2.11.1/include/osmium/area/assembler.hpp libosmium-2.11.3/include/osmium/area/assembler.hpp
--- libosmium-2.11.1/include/osmium/area/assembler.hpp	2017-03-07 13:54:48.000000000 +0100
+++ libosmium-2.11.3/include/osmium/area/assembler.hpp	2017-05-03 14:01:48.000000000 +0200
@@ -474,17 +474,17 @@
 
             class rings_stack_element {
 
-                int32_t m_y;
+                double m_y;
                 detail::ProtoRing* m_ring_ptr;
 
             public:
 
-                rings_stack_element(int32_t y, detail::ProtoRing* ring_ptr) :
+                rings_stack_element(double y, detail::ProtoRing* ring_ptr) :
                     m_y(y),
                     m_ring_ptr(ring_ptr) {
                 }
 
-                int32_t y() const noexcept {
+                double y() const noexcept {
                     return m_y;
                 }
 
@@ -504,7 +504,7 @@
                     return m_y < rhs.m_y;
                 }
 
-            }; // class ring_stack_element
+            }; // class rings_stack_element
 
             using rings_stack = std::vector<rings_stack_element>;
 
@@ -592,7 +592,7 @@
                                 if (debug()) {
                                     std::cerr << "        Segment belongs to outer ring\n";
                                 }
-                                const int32_t y = int32_t(ay + (by - ay) * (lx - ax) / (bx - ax));
+                                const double y = ay + (by - ay) * (lx - ax) / double(bx - ax);
                                 outer_rings.emplace_back(y, segment->ring());
                             }
                         }
@@ -859,8 +859,8 @@
             }
 
             void merge_two_rings(open_ring_its_type& open_ring_its, const location_to_ring_map& m1, const location_to_ring_map& m2) {
-                auto& r1 = *m1.ring_it;
-                auto& r2 = *m2.ring_it;
+                std::list<detail::ProtoRing>::iterator r1 = *m1.ring_it;
+                std::list<detail::ProtoRing>::iterator r2 = *m2.ring_it;
 
                 if (r1->get_node_ref_stop().location() == r2->get_node_ref_start().location()) {
                     r1->join_forward(*r2);
@@ -876,11 +876,11 @@
                     assert(false);
                 }
 
+                open_ring_its.erase(std::find(open_ring_its.begin(), open_ring_its.end(), r2));
                 m_rings.erase(r2);
-                open_ring_its.remove(r2);
 
                 if (r1->closed()) {
-                    open_ring_its.remove(r1);
+                    open_ring_its.erase(std::find(open_ring_its.begin(), open_ring_its.end(), r1));
                 }
             }
 
@@ -988,6 +988,7 @@
                             }
                             loc_done.insert(c.stop_location);
                             find_candidates(candidates, loc_done, xrings, c);
+                            loc_done.erase(c.stop_location);
                             if (debug()) {
                                 std::cerr << "          ...back\n";
                             }
@@ -1085,12 +1086,13 @@
                 // Join all (open) rings in the candidate to get one closed ring.
                 assert(chosen_cand->rings.size() > 1);
                 const auto& first_ring = chosen_cand->rings.front().first;
-                for (auto it = chosen_cand->rings.begin() + 1; it != chosen_cand->rings.end(); ++it) {
+                const detail::ProtoRing& remaining_ring = first_ring.ring();
+                for (auto it = std::next(chosen_cand->rings.begin()); it != chosen_cand->rings.end(); ++it) {
                     merge_two_rings(open_ring_its, first_ring, it->first);
                 }
 
                 if (debug()) {
-                    std::cerr << "    Merged to " << first_ring.ring() << "\n";
+                    std::cerr << "    Merged to " << remaining_ring << "\n";
                 }
 
                 return true;
diff -Nru libosmium-2.11.1/include/osmium/io/detail/opl_input_format.hpp libosmium-2.11.3/include/osmium/io/detail/opl_input_format.hpp
--- libosmium-2.11.1/include/osmium/io/detail/opl_input_format.hpp	2017-03-07 13:54:48.000000000 +0100
+++ libosmium-2.11.3/include/osmium/io/detail/opl_input_format.hpp	2017-05-03 14:01:48.000000000 +0200
@@ -123,6 +123,11 @@
                         rest = input.substr(ppos);
                     }
 
+                    if (!rest.empty()) {
+                        m_data = rest.data();
+                        parse_line();
+                    }
+
                     if (m_buffer.committed() > 0) {
                         send_to_output_queue(std::move(m_buffer));
                     }
diff -Nru libosmium-2.11.1/include/osmium/memory/buffer.hpp libosmium-2.11.3/include/osmium/memory/buffer.hpp
--- libosmium-2.11.1/include/osmium/memory/buffer.hpp	2017-03-07 13:54:48.000000000 +0100
+++ libosmium-2.11.3/include/osmium/memory/buffer.hpp	2017-05-03 14:01:48.000000000 +0200
@@ -119,6 +119,15 @@
             auto_grow m_auto_grow{auto_grow::no};
             std::function<void(Buffer&)> m_full;
 
+            static size_t calculate_capacity(size_t capacity) noexcept {
+                // The majority of all Nodes will fit into this size.
+                constexpr static const size_t min_capacity = 64;
+                if (capacity < min_capacity) {
+                    return min_capacity;
+                }
+                return capacity;
+            }
+
         public:
 
             /**
@@ -198,13 +207,13 @@
              *         of the alignment.
              */
             explicit Buffer(size_t capacity, auto_grow auto_grow = auto_grow::yes) :
-                m_memory(new unsigned char[capacity]),
+                m_memory(new unsigned char[calculate_capacity(capacity)]),
                 m_data(m_memory.get()),
-                m_capacity(capacity),
+                m_capacity(calculate_capacity(capacity)),
                 m_written(0),
                 m_committed(0),
                 m_auto_grow(auto_grow) {
-                if (capacity % align_bytes != 0) {
+                if (m_capacity % align_bytes != 0) {
                     throw std::invalid_argument("buffer capacity needs to be multiple of alignment");
                 }
             }
diff -Nru libosmium-2.11.1/include/osmium/version.hpp libosmium-2.11.3/include/osmium/version.hpp
--- libosmium-2.11.1/include/osmium/version.hpp	2017-03-07 13:54:48.000000000 +0100
+++ libosmium-2.11.3/include/osmium/version.hpp	2017-05-03 14:01:48.000000000 +0200
@@ -35,8 +35,8 @@
 
 #define LIBOSMIUM_VERSION_MAJOR 2
 #define LIBOSMIUM_VERSION_MINOR 11
-#define LIBOSMIUM_VERSION_PATCH 1
+#define LIBOSMIUM_VERSION_PATCH 3
 
-#define LIBOSMIUM_VERSION_STRING "2.11.1"
+#define LIBOSMIUM_VERSION_STRING "2.11.3"
 
 #endif // OSMIUM_VERSION_HPP
diff -Nru libosmium-2.11.1/test/CMakeLists.txt libosmium-2.11.3/test/CMakeLists.txt
--- libosmium-2.11.1/test/CMakeLists.txt	2017-03-07 13:54:48.000000000 +0100
+++ libosmium-2.11.3/test/CMakeLists.txt	2017-05-03 14:01:48.000000000 +0200
@@ -170,7 +170,7 @@
 add_unit_test(io test_reader_fileformat ENABLE_IF ${Threads_FOUND} LIBS ${CMAKE_THREAD_LIBS_INIT})
 add_unit_test(io test_reader_with_mock_decompression ENABLE_IF ${Threads_FOUND} LIBS ${OSMIUM_XML_LIBRARIES})
 add_unit_test(io test_reader_with_mock_parser ENABLE_IF ${Threads_FOUND} LIBS ${CMAKE_THREAD_LIBS_INIT})
-add_unit_test(io test_opl_parser)
+add_unit_test(io test_opl_parser ENABLE_IF ${Threads_FOUND} LIBS ${CMAKE_THREAD_LIBS_INIT})
 add_unit_test(io test_output_utils)
 add_unit_test(io test_output_iterator ENABLE_IF ${Threads_FOUND} LIBS ${CMAKE_THREAD_LIBS_INIT})
 add_unit_test(io test_string_table)
diff -Nru libosmium-2.11.1/test/t/io/data-nonl.opl libosmium-2.11.3/test/t/io/data-nonl.opl
--- libosmium-2.11.1/test/t/io/data-nonl.opl	1970-01-01 01:00:00.000000000 +0100
+++ libosmium-2.11.3/test/t/io/data-nonl.opl	2017-05-03 14:01:48.000000000 +0200
@@ -0,0 +1 @@
+n1 v1 dV c1 t2014-01-01T00:00:00Z i1 utest T x1.02 y1.02
\ No newline at end of file
diff -Nru libosmium-2.11.1/test/t/io/data.opl libosmium-2.11.3/test/t/io/data.opl
--- libosmium-2.11.1/test/t/io/data.opl	1970-01-01 01:00:00.000000000 +0100
+++ libosmium-2.11.3/test/t/io/data.opl	2017-05-03 14:01:48.000000000 +0200
@@ -0,0 +1 @@
+n1 v1 dV c1 t2014-01-01T00:00:00Z i1 utest T x1.02 y1.02
diff -Nru libosmium-2.11.1/test/t/io/test_opl_parser.cpp libosmium-2.11.3/test/t/io/test_opl_parser.cpp
--- libosmium-2.11.1/test/t/io/test_opl_parser.cpp	2017-03-07 13:54:48.000000000 +0100
+++ libosmium-2.11.3/test/t/io/test_opl_parser.cpp	2017-05-03 14:01:48.000000000 +0200
@@ -3,8 +3,10 @@
 #include <cstring>
 
 #include "catch.hpp"
+#include "utils.hpp"
 
 #include <osmium/io/detail/opl_input_format.hpp>
+#include <osmium/io/opl_input.hpp>
 #include <osmium/opl.hpp>
 
 namespace oid = osmium::io::detail;
@@ -1073,3 +1075,23 @@
 
 }
 
+TEST_CASE("Parse OPL using Reader") {
+    osmium::io::File file{with_data_dir("t/io/data.opl")};
+    osmium::io::Reader reader{file};
+
+    const auto buffer = reader.read();
+    REQUIRE(buffer);
+    const auto& node = buffer.get<osmium::Node>(0);
+    REQUIRE(node.id() == 1);
+}
+
+TEST_CASE("Parse OPL with missing newline using Reader") {
+    osmium::io::File file{with_data_dir("t/io/data-nonl.opl")};
+    osmium::io::Reader reader{file};
+
+    const auto buffer = reader.read();
+    REQUIRE(buffer);
+    const auto& node = buffer.get<osmium::Node>(0);
+    REQUIRE(node.id() == 1);
+}
+
diff -Nru libosmium-2.11.1/test/t/memory/test_buffer_basics.cpp libosmium-2.11.3/test/t/memory/test_buffer_basics.cpp
--- libosmium-2.11.1/test/t/memory/test_buffer_basics.cpp	2017-03-07 13:54:48.000000000 +0100
+++ libosmium-2.11.3/test/t/memory/test_buffer_basics.cpp	2017-05-03 14:01:48.000000000 +0200
@@ -6,8 +6,8 @@
 
     osmium::memory::Buffer invalid_buffer1;
     osmium::memory::Buffer invalid_buffer2;
-    osmium::memory::Buffer empty_buffer1(1024);
-    osmium::memory::Buffer empty_buffer2(2048);
+    osmium::memory::Buffer empty_buffer1{1024};
+    osmium::memory::Buffer empty_buffer2{2048};
 
     REQUIRE(!invalid_buffer1);
     REQUIRE(!invalid_buffer2);
@@ -32,3 +32,18 @@
 
 }
 
+TEST_CASE("Buffer with zero size") {
+    osmium::memory::Buffer buffer{0};
+    REQUIRE(buffer.capacity() == 64);
+}
+
+TEST_CASE("Buffer with less than minimum size") {
+    osmium::memory::Buffer buffer{63};
+    REQUIRE(buffer.capacity() == 64);
+}
+
+TEST_CASE("Buffer with minimum size") {
+    osmium::memory::Buffer buffer{64};
+    REQUIRE(buffer.capacity() == 64);
+}
+

--- End Message ---
--- Begin Message ---
Bas Couwenberg:
> Package: release.debian.org
> Severity: normal
> User: release.debian.org@packages.debian.org
> Usertags: unblock
> 
> Please unblock package libosmium
> 
> Upstream has only fixed bugs for this release in line with the freeze
> policy.
> 
> (include/attach the debdiff against the package in testing)
> 
> unblock libosmium/2.11.3-1
> 
> Kind Regards,
> 
> Bas
> 

Unblocked, thanks.

~Niels

--- End Message ---

Reply to: