#17368: Fix an off-by-one error in the Python JSON decoder that caused a failure while decoding empty object literals when object_pairs_hook was specified.
diff --git a/Lib/json/decoder.py b/Lib/json/decoder.py
index dc8916c..dfcc628 100644
--- a/Lib/json/decoder.py
+++ b/Lib/json/decoder.py
@@ -163,7 +163,7 @@
         if nextchar == '}':
             if object_pairs_hook is not None:
                 result = object_pairs_hook(pairs)
-                return result, end
+                return result, end + 1
             pairs = {}
             if object_hook is not None:
                 pairs = object_hook(pairs)
diff --git a/Lib/json/tests/test_decode.py b/Lib/json/tests/test_decode.py
index 478a16b..ffd1aa4 100644
--- a/Lib/json/tests/test_decode.py
+++ b/Lib/json/tests/test_decode.py
@@ -40,10 +40,15 @@
         self.assertEqual(od, OrderedDict(p))
         self.assertEqual(type(od), OrderedDict)
         # the object_pairs_hook takes priority over the object_hook
-        self.assertEqual(self.loads(s,
-                                    object_pairs_hook=OrderedDict,
+        self.assertEqual(self.loads(s, object_pairs_hook=OrderedDict,
                                     object_hook=lambda x: None),
                          OrderedDict(p))
+        # check that empty objects literals work (see #17368)
+        self.assertEqual(self.loads('{}', object_pairs_hook=OrderedDict),
+                         OrderedDict())
+        self.assertEqual(self.loads('{"empty": {}}',
+                                    object_pairs_hook=OrderedDict),
+                         OrderedDict([('empty', OrderedDict())]))
 
     def test_extra_data(self):
         s = '[1, 2, 3]5'