diff --git a/Lib/fontTools/subset/__init__.py b/Lib/fontTools/subset/__init__.py
index beea837c3..65415e2e9 100644
--- a/Lib/fontTools/subset/__init__.py
+++ b/Lib/fontTools/subset/__init__.py
@@ -555,6 +555,10 @@ def subset_glyphs(self, s):
@_add_method(otTables.SinglePos)
def prune_post_subset(self, font, options):
+ if self.Value is None:
+ assert self.ValueFormat == 0
+ return True
+
# Shrink ValueFormat
if self.Format == 1:
if not options.hinting:
@@ -572,7 +576,7 @@ def prune_post_subset(self, font, options):
self.Value = self.Value[0] if self.ValueFormat != 0 else None
del self.ValueCount
- return bool(self.ValueFormat)
+ return True
@_add_method(otTables.PairPos)
def subset_glyphs(self, s):
diff --git a/Tests/subset/data/GPOS_SinglePos_no_value_issue_2312.subset.ttx b/Tests/subset/data/GPOS_SinglePos_no_value_issue_2312.subset.ttx
new file mode 100644
index 000000000..7eee95fe4
--- /dev/null
+++ b/Tests/subset/data/GPOS_SinglePos_no_value_issue_2312.subset.ttx
@@ -0,0 +1,234 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/subset/data/GPOS_SinglePos_no_value_issue_2312.ttx b/Tests/subset/data/GPOS_SinglePos_no_value_issue_2312.ttx
new file mode 100644
index 000000000..914963723
--- /dev/null
+++ b/Tests/subset/data/GPOS_SinglePos_no_value_issue_2312.ttx
@@ -0,0 +1,689 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Copyright 2019 Google Inc. All Rights Reserved.
+
+
+ Noto Sans Siddham
+
+
+ Regular
+
+
+ 2.001;GOOG;NotoSansSiddham-Regular
+
+
+ Noto Sans Siddham Regular
+
+
+ Version 2.001
+
+
+ NotoSansSiddham-Regular
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/subset/subset_test.py b/Tests/subset/subset_test.py
index 0c39eb011..1294ca586 100644
--- a/Tests/subset/subset_test.py
+++ b/Tests/subset/subset_test.py
@@ -793,6 +793,19 @@ class SubsetTest(unittest.TestCase):
subsetfont = TTFont(subsetpath)
self.expect_ttx(subsetfont, expected_ttx, ["GPOS"])
+ def test_GPOS_SinglePos_prune_post_subset_no_value(self):
+ _, fontpath = self.compile_font(
+ self.getpath("GPOS_SinglePos_no_value_issue_2312.ttx"), ".ttf"
+ )
+ subsetpath = self.temp_path(".ttf")
+ subset.main([fontpath, "*", "--glyph-names", "--output-file=%s" % subsetpath])
+ subsetfont = TTFont(subsetpath)
+ self.expect_ttx(
+ subsetfont,
+ self.getpath("GPOS_SinglePos_no_value_issue_2312.subset.ttx"),
+ ["GlyphOrder", "GPOS"],
+ )
+
@pytest.fixture
def featureVarsTestFont():