From 8f4d50ab890352ad65b71a00c40956a11f09af0b Mon Sep 17 00:00:00 2001 From: Stephen Keatley Date: Mon, 24 Mar 2025 13:56:44 +0000 Subject: [PATCH 1/2] AIR-33014: Maps allow integers as keys --- lib/avro/datum.php | 2 +- lib/avro/schema.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/avro/datum.php b/lib/avro/datum.php index b328853..37b68e8 100644 --- a/lib/avro/datum.php +++ b/lib/avro/datum.php @@ -242,7 +242,7 @@ private function write_map($writers_schema, $datum, $encoder) $encoder->write_long($datum_count); foreach ($datum as $k => $v) { - $encoder->write_string($k); + $encoder->write_string((string) $k); $this->write_data($writers_schema->values(), $v, $encoder); } } diff --git a/lib/avro/schema.php b/lib/avro/schema.php index 89b0de0..745a973 100644 --- a/lib/avro/schema.php +++ b/lib/avro/schema.php @@ -446,7 +446,7 @@ public static function is_valid_datum($expected_schema, $datum) if (is_array($datum)) { foreach ($datum as $k => $v) - if (!is_string($k) + if ((!is_string($k) && !is_int($k)) || !self::is_valid_datum($expected_schema->values(), $v)) return false; return true; From 1a532671174ffa5ff05c034cc984a62e95926da5 Mon Sep 17 00:00:00 2001 From: Tom Smith <103271021+tomsmith-eagleeye@users.noreply.github.com> Date: Fri, 11 Sep 2026 10:27:38 +0100 Subject: [PATCH 2/2] AIR-33014: add round trip test for maps with integer keys --- test/DatumIOTest.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/DatumIOTest.php b/test/DatumIOTest.php index c9018af..b6ac9aa 100644 --- a/test/DatumIOTest.php +++ b/test/DatumIOTest.php @@ -135,6 +135,9 @@ function data_provider() array('{"type":"map","values":"int"}', array('foo' => 1, 'bar' => 2, 'baz' => 3), "\x06\x06foo\x02\x06bar\x04\x06baz\x06\x00"), + array('{"type":"map","values":"int"}', + array('123' => 1, 456 => 2, 'foo' => 3), + "\x06\x06123\x02\x06456\x04\x06foo\x06\x00"), array('["null", "int"]', 1, "\x02\x02"), array('{"name":"fix","type":"fixed","size":3}', "\xAA\xBB\xCC", "\xAA\xBB\xCC"),