From 97dab717d3542dcf86e01eb2ca16fe771e9d8886 Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Mon, 18 Nov 2019 12:33:25 +0300 Subject: Fix crashing on depends manifest values specifying earliest release in version constraint --- bpkg/satisfaction.cxx | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'bpkg/satisfaction.cxx') diff --git a/bpkg/satisfaction.cxx b/bpkg/satisfaction.cxx index c3c4995..79222c0 100644 --- a/bpkg/satisfaction.cxx +++ b/bpkg/satisfaction.cxx @@ -62,14 +62,21 @@ namespace bpkg // (see libbpkg/manifest.hxx for details). That's why we normalize // endpoint versions prior to comparison. // - auto norm = [] (const version& v, bool min, bool open) -> version + auto norm = [] (const version& v, bool min, bool open) { + // Return the version as is if the revision is present or this is an + // earliest release (for which the revision is meaningless). + // + // We could probably avoid copying of versions that don't require + // normalization but let's keep it simple for now. + // + if (v.revision || (v.release && v.release->empty ())) + return v; + return version (v.epoch, v.upstream, v.release, - v.revision ? v.revision : - (min && !open) || (!min && open) ? 0 : - uint16_t (~0), + (min && !open) || (!min && open) ? 0 : uint16_t (~0), v.iteration); }; -- cgit v1.1