diff --git a/bin/jsonpointer b/bin/jsonpointer index 422eb7e..31ac315 100755 --- a/bin/jsonpointer +++ b/bin/jsonpointer @@ -55,7 +55,8 @@ def parse_pointer(args): if args.pointer is not None: ptr = args.pointer else: - ptr = args.pointer_file.read().strip() + # 2026-10-11: Trim file line endings without changing member names. + ptr = args.pointer_file.read().rstrip("\r\n") elif args.POINTER is not None: ptr = args.POINTER diff --git a/tests.py b/tests.py index a330ab4..bf054ed 100755 --- a/tests.py +++ b/tests.py @@ -514,6 +514,17 @@ def test_pointer_file(self): self.assertEqual(proc.returncode, 0, proc.stderr) self.assertEqual(proc.stdout, self.A_OUT + self.B_OUT) + # 2026-10-11: A pointer file's trailing spaces are part of its member name. + def test_pointer_file_preserves_member_whitespace(self): + self._write('space.json', '{"a ": "expected", "a": "wrong"}') + for newline in ('', '\n', '\r\n'): + with self.subTest(newline=newline): + with open(os.path.join(self.dir, 'space.txt'), 'w', newline='') as f: + f.write('/a ' + newline) + proc = self._run('-f', 'space.txt', 'space.json') + self.assertEqual(proc.returncode, 0, proc.stderr) + self.assertEqual(proc.stdout, '"expected"\n') + def test_pointer_file_single_file(self): proc = self._run('-f', 'ptr.txt', 'a.json') self.assertEqual(proc.returncode, 0, proc.stderr)