--- Begin Message ---
Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock
X-Debbugs-Cc: ledger@packages.debian.org
Control: affects -1 + src:ledger
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
Please unblock package ledger
[ Reason ]
This version fixes two bugs with severity important: #1032292 and #1033552.
[ Impact ]
The first is a regression from the version in bullseye, while the
second is an old crash.
[ Tests ]
Ledger has an extensive build time test suite. I have also manually
sanity checked the new binary packages.
[ Risks ]
Ledger is a leaf package. The two patches are cherry-picked from
upstream, and the total diff is small (6 insertions , 4 deletions)
[ Checklist ]
[x] all changes are documented in the d/changelog
[x] I reviewed all changes and I approve them
[x] attach debdiff against the package in testing
[ Other info ]
Trimmed diff of only upstream changes also attached.
unblock ledger/3.3.0-3
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCAAdFiEEkiyHYXwaY0SiY6fqA0U5G1WqFSEFAmQz8r8ACgkQA0U5G1Wq
FSEE3Q//cNItCQC0KvUyWw0kY4v0aa05Y3K+F+F3u8IOBjnhGkBA5+gR4Rq110dE
4N0K7l7JLemR7eJBHtOh+LfGI6AmLGurD0hmAwVrjYC+ti5xcnDMN7tpfXLKaqIS
jmCATrWtKN9+IZKl6G4V0R7o+HtKfHb4qG8Gzk3qwvjCtTvEGJGiwA1ErwCjUidn
+uBlIzn3MRiAjxrNWUQqq8RkPtyvP95JSgvpAXtQuo0qI2YQ0/613wlS2Fq4S1+J
mlC1rr/gpLl2wpxpUGVB8ph6rsgcKs5TY8GQ5nCk8h8EfH8eAvNwrs6AKEdVna+z
TC31HQ5Jw4s7jyoQRu2L2K3lM0F97FO8P5DXA2nn+AjfQqNvBXyXZMFtLfdnWKIc
g2mws+mD0/zVUwUJtTAdeei46SJilGDJXZ9To7I0LxYcFRPvP8CGfJP0wTSNdvAU
ylEmIppHnJ/Byz5N/JgPg/oi/ehwgixmt6j9Z/2r0CwSTdBqXiEe9Qu9XjEuqT2I
O6okdg8t07zGyf2+wSyeh6cJ7x87od2OtRZi48N2yrD+t8/sPuo6TvdxZmp+LIgg
AqDvkCiQ2uCnEFg3B6shARL51Jp2UScPLnXdVH6sjSQ0QwwaHzopZ2G+nCVYG7mc
uRFlbIq9yWHGQY5oYLXDvUs+kuB98BPZOR17CYh6h3ZKvywGNmc=
=dJ3v
-----END PGP SIGNATURE-----
diff -Nru ledger-3.3.0/debian/changelog ledger-3.3.0/debian/changelog
--- ledger-3.3.0/debian/changelog 2023-02-17 09:58:07.000000000 -0400
+++ ledger-3.3.0/debian/changelog 2023-03-28 08:05:17.000000000 -0300
@@ -1,3 +1,18 @@
+ledger (3.3.0-3) unstable; urgency=medium
+
+ * Bug fix: "Valid transaction: Error: Divide by zero", thanks to Martin
+ Michlmayr (Closes: #1033552). Cherry-pick upstream commit 49cf332.
+
+ -- David Bremner <bremner@debian.org> Tue, 28 Mar 2023 08:05:17 -0300
+
+ledger (3.3.0-2) unstable; urgency=medium
+
+ * Bug fix: "Ledger 3.3.0 regression: specifying format for commodity",
+ thanks to Martin Michlmayr (Closes: #1032292). Cherry-pick upstream
+ commit 87b6a1e.
+
+ -- David Bremner <bremner@debian.org> Sat, 04 Mar 2023 15:32:33 -0800
+
ledger (3.3.0-1) unstable; urgency=medium
* Bug fix: "New upstream release: 3.3.0", thanks to Martin Michlmayr
diff -Nru ledger-3.3.0/debian/patches/0001-Do-not-perform-commodity-reduction-when-parsing-a-fo.patch ledger-3.3.0/debian/patches/0001-Do-not-perform-commodity-reduction-when-parsing-a-fo.patch
--- ledger-3.3.0/debian/patches/0001-Do-not-perform-commodity-reduction-when-parsing-a-fo.patch 1969-12-31 20:00:00.000000000 -0400
+++ ledger-3.3.0/debian/patches/0001-Do-not-perform-commodity-reduction-when-parsing-a-fo.patch 2023-03-28 08:05:17.000000000 -0300
@@ -0,0 +1,28 @@
+From: John Wiegley <johnw@newartisans.com>
+Date: Thu, 2 Mar 2023 15:04:29 -0800
+Subject: Do not perform commodity reduction when parsing a format directive
+
+---
+ src/textual.cc | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/src/textual.cc b/src/textual.cc
+index 62007ab..5276c92 100644
+--- a/src/textual.cc
++++ b/src/textual.cc
+@@ -1132,10 +1132,12 @@ void instance_t::commodity_format_directive(commodity_t& comm, string format)
+ // observational formatting.
+ trim(format);
+ amount_t amt;
+- amt.parse(format);
++ amt.parse(format, PARSE_NO_REDUCE);
+ if (amt.commodity() != comm)
+- throw_(parse_error, _f("commodity directive symbol %1% and format directive symbol %2% should be the same") %
+- comm.symbol() % amt.commodity().symbol());
++ throw_(parse_error,
++ _f("commodity directive symbol %1% and format directive symbol %2% should be the same")
++ % comm.symbol()
++ % amt.commodity().symbol());
+ amt.commodity().add_flags(COMMODITY_STYLE_NO_MIGRATE);
+ VERIFY(amt.valid());
+ }
diff -Nru ledger-3.3.0/debian/patches/0002-Change-a-use-of-is_realzero-to-just-is_zero.patch ledger-3.3.0/debian/patches/0002-Change-a-use-of-is_realzero-to-just-is_zero.patch
--- ledger-3.3.0/debian/patches/0002-Change-a-use-of-is_realzero-to-just-is_zero.patch 1969-12-31 20:00:00.000000000 -0400
+++ ledger-3.3.0/debian/patches/0002-Change-a-use-of-is_realzero-to-just-is_zero.patch 2023-03-28 08:05:17.000000000 -0300
@@ -0,0 +1,22 @@
+From: John Wiegley <johnw@newartisans.com>
+Date: Thu, 23 Mar 2023 11:23:39 -0700
+Subject: Change a use of is_realzero to just is_zero
+
+This is needed to avoid a possible divide by zero.
+---
+ src/pool.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/pool.cc b/src/pool.cc
+index 2c055d6..73e7664 100644
+--- a/src/pool.cc
++++ b/src/pool.cc
+@@ -257,7 +257,7 @@ commodity_pool_t::exchange(const amount_t& amount,
+ current_annotation = &as_annotated_commodity(commodity).details;
+
+ amount_t per_unit_cost =
+- (is_per_unit || amount.is_realzero()) ? cost.abs() : (cost / amount).abs();
++ (is_per_unit || amount.is_zero()) ? cost.abs() : (cost / amount).abs();
+
+ if (! cost.has_commodity())
+ per_unit_cost.clear_commodity();
diff -Nru ledger-3.3.0/debian/patches/series ledger-3.3.0/debian/patches/series
--- ledger-3.3.0/debian/patches/series 1969-12-31 20:00:00.000000000 -0400
+++ ledger-3.3.0/debian/patches/series 2023-03-28 08:05:17.000000000 -0300
@@ -0,0 +1,2 @@
+0001-Do-not-perform-commodity-reduction-when-parsing-a-fo.patch
+0002-Change-a-use-of-is_realzero-to-just-is_zero.patch
diff --git a/src/pool.cc b/src/pool.cc
index 2c055d64..73e76644 100644
--- a/src/pool.cc
+++ b/src/pool.cc
@@ -257,7 +257,7 @@ commodity_pool_t::exchange(const amount_t& amount,
current_annotation = &as_annotated_commodity(commodity).details;
amount_t per_unit_cost =
- (is_per_unit || amount.is_realzero()) ? cost.abs() : (cost / amount).abs();
+ (is_per_unit || amount.is_zero()) ? cost.abs() : (cost / amount).abs();
if (! cost.has_commodity())
per_unit_cost.clear_commodity();
diff --git a/src/textual.cc b/src/textual.cc
index 62007abb..5276c92b 100644
--- a/src/textual.cc
+++ b/src/textual.cc
@@ -1132,10 +1132,12 @@ void instance_t::commodity_format_directive(commodity_t& comm, string format)
// observational formatting.
trim(format);
amount_t amt;
- amt.parse(format);
+ amt.parse(format, PARSE_NO_REDUCE);
if (amt.commodity() != comm)
- throw_(parse_error, _f("commodity directive symbol %1% and format directive symbol %2% should be the same") %
- comm.symbol() % amt.commodity().symbol());
+ throw_(parse_error,
+ _f("commodity directive symbol %1% and format directive symbol %2% should be the same")
+ % comm.symbol()
+ % amt.commodity().symbol());
amt.commodity().add_flags(COMMODITY_STYLE_NO_MIGRATE);
VERIFY(amt.valid());
}
--- End Message ---