Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package perl-Cpanel-JSON-XS for
openSUSE:Factory checked in at 2026-07-21 23:11:55
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Cpanel-JSON-XS (Old)
and /work/SRC/openSUSE:Factory/.perl-Cpanel-JSON-XS.new.24530 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-Cpanel-JSON-XS"
Tue Jul 21 23:11:55 2026 rev:45 rq:1366954 version:4.430.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-Cpanel-JSON-XS/perl-Cpanel-JSON-XS.changes
2026-06-10 16:18:49.492548348 +0200
+++
/work/SRC/openSUSE:Factory/.perl-Cpanel-JSON-XS.new.24530/perl-Cpanel-JSON-XS.changes
2026-07-21 23:11:58.161516153 +0200
@@ -1,0 +2,17 @@
+Sun Jul 19 07:36:19 UTC 2026 - Tina Müller <[email protected]>
+
+- updated to 4.430.0 (4.43)
+ see /usr/share/doc/packages/perl-Cpanel-JSON-XS/Changes
+
+ 4.43 2026-07-18 (rurban)
+ - Fix canonical sort: compare by UTF-16 code units per RFC 8785 (GH
#248, leont)
+ - Fix canonical sort on Perl 5.8-5.18: utf16_cmp now always attempts
+ UTF-8 decoding instead of checking SvUTF8 flag, since older Perls
+ may store valid UTF-8 hash keys without the flag set.
+ - Fix quadmath encode dropping ".0" for large floats (GH #246,
reported by Tux).
+ The .0 guard condition that suppressed appending for NV values >
UV_MAX was
+ incorrect on high-precision FP (quadmath, 128-bit long double on
arm64) where
+ %g uses fixed-point notation for values like 1.01e30. Guarded with
#if NV_DIG < 31
+ to skip only on double/80-bit-ld where %g naturally uses %e for
large values.
+
+-------------------------------------------------------------------
Old:
----
Cpanel-JSON-XS-4.42.tar.gz
New:
----
Cpanel-JSON-XS-4.43.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ perl-Cpanel-JSON-XS.spec ++++++
--- /var/tmp/diff_new_pack.5twuaH/_old 2026-07-21 23:11:59.089547887 +0200
+++ /var/tmp/diff_new_pack.5twuaH/_new 2026-07-21 23:11:59.093548024 +0200
@@ -18,10 +18,10 @@
%define cpan_name Cpanel-JSON-XS
Name: perl-Cpanel-JSON-XS
-Version: 4.420.0
+Version: 4.430.0
Release: 0
-# 4.42 -> normalize -> 4.420.0
-%define cpan_version 4.42
+# 4.43 -> normalize -> 4.430.0
+%define cpan_version 4.43
License: Artistic-1.0 OR GPL-1.0-or-later
Summary: CPanel fork of JSON::XS, fast and correct serializing
URL: https://metacpan.org/release/%{cpan_name}
++++++ Cpanel-JSON-XS-4.42.tar.gz -> Cpanel-JSON-XS-4.43.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.42/.github/workflows/testsuite.yml
new/Cpanel-JSON-XS-4.43/.github/workflows/testsuite.yml
--- old/Cpanel-JSON-XS-4.42/.github/workflows/testsuite.yml 2026-06-06
15:29:25.000000000 +0200
+++ new/Cpanel-JSON-XS-4.43/.github/workflows/testsuite.yml 2026-07-18
08:55:52.000000000 +0200
@@ -19,7 +19,7 @@
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #
v6.0.2
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 #
v7.0.0
- run: perl -V
- name: install cpan deps
uses:
perl-actions/install-with-cpanm@0f3cc9bc0b055cc20750d218061ebbdebd101bb3 #
stable
@@ -85,8 +85,8 @@
]
steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #
v6.0.2
- - uses:
shogo82148/actions-setup-perl@a198315ec4e9244f206879ea7b63078003aec8a6 # v1.41.1
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 #
v7.0.0
+ - uses:
shogo82148/actions-setup-perl@3d3cb73ca65d657a809d97eab324d4e4f140bf5e # v1.42.0
with:
perl-version: ${{ matrix.perl-version }}
- run: perl -V
@@ -117,7 +117,7 @@
perl-version: [latest]
steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #
v6.0.2
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 #
v7.0.0
- run: perl -V
- run: perl Makefile.PL
- run: make test
@@ -139,7 +139,7 @@
perl-version: [latest]
steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #
v6.0.2
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 #
v7.0.0
- run: perl -V
- run: perl Makefile.PL
#- run: prove -vb t/*.t
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.42/Changes
new/Cpanel-JSON-XS-4.43/Changes
--- old/Cpanel-JSON-XS-4.42/Changes 2026-06-07 11:21:08.000000000 +0200
+++ new/Cpanel-JSON-XS-4.43/Changes 2026-07-18 08:55:52.000000000 +0200
@@ -2,6 +2,17 @@
TODO: http://stevehanov.ca/blog/index.php?id=104 compression
+4.43 2026-07-18 (rurban)
+ - Fix canonical sort: compare by UTF-16 code units per RFC 8785 (GH
#248, leont)
+ - Fix canonical sort on Perl 5.8-5.18: utf16_cmp now always attempts
+ UTF-8 decoding instead of checking SvUTF8 flag, since older Perls
+ may store valid UTF-8 hash keys without the flag set.
+ - Fix quadmath encode dropping ".0" for large floats (GH #246,
reported by Tux).
+ The .0 guard condition that suppressed appending for NV values >
UV_MAX was
+ incorrect on high-precision FP (quadmath, 128-bit long double on
arm64) where
+ %g uses fixed-point notation for values like 1.01e30. Guarded with
#if NV_DIG < 31
+ to skip only on double/80-bit-ld where %g naturally uses %e for
large values.
+
4.42 2026-06-27 (rurban)
- Ensure encode with a type spec hashref does not change the hashref
argument (GH #240)
- Fix -e docs: "written" → "read" (GH #239, reported by Ron Savage).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.42/META.json
new/Cpanel-JSON-XS-4.43/META.json
--- old/Cpanel-JSON-XS-4.42/META.json 2026-06-07 11:21:49.000000000 +0200
+++ new/Cpanel-JSON-XS-4.43/META.json 2026-07-18 08:56:30.000000000 +0200
@@ -100,7 +100,7 @@
"url" : "https://github.com/rurban/Cpanel-JSON-XS"
}
},
- "version" : "4.42",
+ "version" : "4.43",
"x_contributors" : [
"Ashley Willis <[email protected]>",
"Chip Salzenberg <[email protected]>",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.42/META.yml
new/Cpanel-JSON-XS-4.43/META.yml
--- old/Cpanel-JSON-XS-4.42/META.yml 2026-06-07 11:21:48.000000000 +0200
+++ new/Cpanel-JSON-XS-4.43/META.yml 2026-07-18 08:56:29.000000000 +0200
@@ -48,7 +48,7 @@
bugtracker: https://github.com/rurban/Cpanel-JSON-XS/issues
license: http://dev.perl.org/licenses/
repository: https://github.com/rurban/Cpanel-JSON-XS
-version: '4.42'
+version: '4.43'
x_contributors:
- 'Ashley Willis <[email protected]>'
- 'Chip Salzenberg <[email protected]>'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.42/SIGNATURE
new/Cpanel-JSON-XS-4.43/SIGNATURE
--- old/Cpanel-JSON-XS-4.42/SIGNATURE 2026-06-07 11:21:50.000000000 +0200
+++ new/Cpanel-JSON-XS-4.43/SIGNATURE 2026-07-18 08:56:30.000000000 +0200
@@ -16,18 +16,18 @@
SHA256 aac2b4bbaa7b93eaf72300f60e167a17e05adcd721087f735ba55d2900f31490
.appveyor.yml
SHA256 082201a3cbd62a55f2e58ffbb991c4b2bb806de0009bc9497ffcc07202f60855
.github/FUNDING.yml
-SHA256 11fc0845019f9b726678214fd5518ca540bd1e29d0c888273b3130064c49058c
.github/workflows/testsuite.yml
+SHA256 b70e3c760ab28a829281d0b03cde42b9d803e333f852315ffb8831db1681147b
.github/workflows/testsuite.yml
SHA256 a3c34aba52e269e6cec558ecf9cff393138574189fdff26b183bee9cc2e0434f
.travis.yml
SHA256 c3f2a1a4f66382f796f71a571946722edba53cf3238152b26fd325f4c2f1a20f
.whitesource
SHA256 8de3540a3cd7ecc9a9dcb48975fe852c082fe17d4462f87bb72aa7cc47f083ad COPYING
-SHA256 be3f388b6a8bf299a8271f167c2615d6a9005b8eb7784af54a9e2df7be5eebe2 Changes
+SHA256 71093316a345f2761852717ea4f09e1599327e6f7a58316465ccf9f4cb679270 Changes
SHA256 b3cb3d4cd7c060581c927563a6663c0a516b215d3b5ee073f1201f851e6d2733
MANIFEST
-SHA256 0a6b0cfda6d774d4636375bd10079a7370c8880b2d75836661b4dffb94182aec
META.json
-SHA256 65076dc85812420d68b64ca256162ba9376528f6cef4c86d1c538c4bb184a7ef
META.yml
+SHA256 bff81e69b7de54963a61be84d72a34048f94dc498231e19ee8496ef7b154bfbc
META.json
+SHA256 543d9b8b70831f57f48b49f35d45063564a15c7c42ee5d09ee3b95ed49cd1106
META.yml
SHA256 0fc7078919ff510137a654acc66bd68c971786cafd8ee621afae6d99321df4bb
Makefile.PL
SHA256 1d2228bc44b3a5ce3b156511447b8b7086db6f5e926c6903bd550716a40a301e README
-SHA256 98c79493c7b5c6f046d05d818dffbd736be66f84dcfc3b278d2a9a906595e14d XS.pm
-SHA256 18747e9d9bd2b3c5bb514e5b63dbf0e16b89a992399290aede2ca9a94c099bc1 XS.xs
+SHA256 33ca7e73cfd2958ce46a6dacbf9f26be4e08ec973eec5754a391e2d455c42cf8 XS.pm
+SHA256 c83a33a62122729aa7ee5be5ad77b3dd73adccc0ffe4066979f754e8e324edf2 XS.xs
SHA256 c95e4b970183cbd6d1ec9c88c37a80f12bd2b66ed6be3c008ffd578d2f622c01
XS/Boolean.pm
SHA256 20596259e7e399ed1984a469a9a907be878499406d5285a11f1ab98f93aff44f
XS/Type.pm
SHA256 adca185de1f64d9861a3863ce44a3c3ac33fa478b0cb56a0aa309b8e40bcb577
bin/cpanel_json_xs
@@ -50,7 +50,7 @@
SHA256 16f34295a33f59b8fe7a4f70b701df03fc866d77eac300ca0503a98875675569
t/107_allow_singlequote.t
SHA256 f2047975a3b8392feb6a87d782ecc7746ae2117bde57f716cc90877c8850f2e0
t/108_decode.t
SHA256 04e9e642b5cd82bc0504c1d91493ff09bbe04b9aa23c3019a6397caf1fc0a035
t/109_encode.t
-SHA256 d6c467d647ab46c64734d6c6913ff262e854e00073a804da186caf894c5367d0
t/10_pc_keysort.t
+SHA256 23357aedbe5fb4c6c61c235dc14d15d990083afd8f8a5839d842e09aaa24d716
t/10_pc_keysort.t
SHA256 cff5fcdf23f8f9426609dac5eaa14b295489e2b3fe86bccc9355a39b2e390ec9
t/110_bignum.t
SHA256 1a70755f6fd2b222ed65828d73d4bdfffed82f0d19c81b64ad3888f06ff399f6
t/112_upgrade.t
SHA256 b207546715e27fe738f448fb0e1087b73bfd2a002c0254f656e6b4d47e154f58
t/113_overloaded_eq.t
@@ -447,15 +447,15 @@
SHA256 aca6f846869ab2e4881e807739086e1535b1438bd0e23d7a021360742736a6a9
xt/pod.t
-----BEGIN PGP SIGNATURE-----
-iQGzBAEBAwAdFiEEOKQWew22nknF9yFsuMKIZqsnp6IFAmolOC0ACgkQuMKIZqsn
-p6LSyQv9H+GPhI81DIDX0C6GieBRaI5mKvnNoU7Q2F3w1aPEQ7M7E/nOwX7baRE0
-wD5A4Vydz9+I2GkbL1SscYxe1VPxSIRelM5tvPg+Fo4E/8Ibapg8kE+CywmhHg3L
-rWPqz2FKZ71fBveqw68EXHJg5Rzie49skPuGeFtJn14ewEhT9+sUVPzJLqdS3t1x
-vou+morsrkP63A0BJIwW/nU/nxmDaDWenybiSxL7IEnD9rxaINa4NY0+WlnCZUME
-o/RUwlLsSLOWv7Gk9bT8eATaoDhIsEXVPzAhnbdWvBx7mtCJnGcsWkaoeyYT/sFm
-MIZPZwkMaMjUupAcaPxvW0cpasd2P+5sRSKRELH2lyAFQiYvOe3vuUBeJInKgeVe
-Dk3ly9qgRmjwA4EfoYTLCa62y+KQGacPEqEv4XiqqSDhD6Sm9GIEcSuxaabBV+Zr
-43AVVdtI3FTm0L/degYenEfBbglUg8EGEjLx05EoRL8sWkv0jgXL2qkj8xJyCH0v
-iOk3irH+
-=mtDd
+iQGzBAEBAwAdFiEEOKQWew22nknF9yFsuMKIZqsnp6IFAmpbI54ACgkQuMKIZqsn
+p6JcCAv8Cwcvoio0NFMTpvdnO1uKZZaShzl+r7fqxZDOGhhnXnRLldPUGVrAvR83
+GWJ8B6LfagjSw4cA4vl2maVR7gR2577AoUW/n65geuj1MYdbigOvlC2vwPilSIRY
+tdToTI0iNkdsB4RU0KynvzYMC9xNKLyOYf5nXHzsexIu+Ni1hdLeWxAOQXXeArRj
+8wsjEcfxgIGru+4eQi5Kglwxv1as86Hsm3gh8iSdgdgdRZo8ZzKBRqp0fSp0CvQb
+CXLkXw04CD1v0xCZc/4rscE083sdYtHghuTIISI505xAnRQ1lojnmddZwCgS2DqI
+6CTYgtZEk/MeGGLmsnRSTq9JYXSBbocEUOYEarbiI7kkIqaphesIM6dZQuzwGHeK
+J/aPNgHyrp0bWHyqdHZX0wZpl2Qsl6FCk4n80V1bv80dRB/w4mS3EgGaNyDNM2Zy
+OdsYhfyfuL4akZUCQN24ZGhg8nYkSz0qylOt97cKNMkY/lbMEgKpm/NlRE0pC6CX
+XZwmFdD3
+=m4vK
-----END PGP SIGNATURE-----
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.42/XS.pm
new/Cpanel-JSON-XS-4.43/XS.pm
--- old/Cpanel-JSON-XS-4.42/XS.pm 2026-06-06 17:01:47.000000000 +0200
+++ new/Cpanel-JSON-XS-4.43/XS.pm 2026-07-18 08:55:52.000000000 +0200
@@ -1,5 +1,5 @@
package Cpanel::JSON::XS;
-our $VERSION = '4.42';
+our $VERSION = '4.43';
our $XS_VERSION = $VERSION;
# $VERSION = eval $VERSION;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.42/XS.xs
new/Cpanel-JSON-XS-4.43/XS.xs
--- old/Cpanel-JSON-XS-4.42/XS.xs 2026-06-06 17:01:47.000000000 +0200
+++ new/Cpanel-JSON-XS-4.43/XS.xs 2026-07-18 08:46:42.000000000 +0200
@@ -1278,12 +1278,123 @@
return cmp;
}
+/*
+ * Compare two UTF-8 strings by UTF-16 code unit order per RFC 8785 (JCS).
+ * Characters outside the BMP (U+10000+) expand to surrogate pairs,
+ * and the comparison is by the resulting 16-bit code unit array.
+ * Returns negative if a_sv < b_sv, 0 if equal, positive if a_sv > b_sv.
+ */
+static int
+utf16_cmp (pTHX_ SV *a_sv, SV *b_sv)
+{
+ STRLEN alen, blen;
+ U8 *ap = (U8 *)SvPV_const (a_sv, alen);
+ U8 *bp = (U8 *)SvPV_const (b_sv, blen);
+ U16 pending_a = 0, pending_b = 0;
+
+ for (;;)
+ {
+ U32 a_unit, b_unit;
+
+ if (pending_a)
+ {
+ a_unit = pending_a;
+ pending_a = 0;
+ }
+ else if (alen)
+ {
+ {
+ UV uv;
+ STRLEN clen = 0;
+#if PERL_VERSION > 36
+ uv = utf8n_to_uvchr (ap, alen, &clen, UTF8_CHECK_ONLY);
+#elif PERL_VERSION >= 8
+ uv = utf8n_to_uvuni (ap, alen, &clen, UTF8_CHECK_ONLY);
+#else
+ uv = utf8_to_uv (ap, alen, &clen, UTF8_CHECK_ONLY);
+#endif
+ if (UNLIKELY (clen <= 0))
+ {
+ /* invalid UTF-8, treat as raw byte */
+ a_unit = *ap++;
+ alen--;
+ }
+ else
+ {
+ ap += clen;
+ alen -= clen;
+ if (uv >= 0x10000)
+ {
+ uv -= 0x10000;
+ a_unit = 0xD800 | (uv >> 10);
+ pending_a = 0xDC00 | (uv & 0x3FF);
+ }
+ else
+ a_unit = (U16)uv;
+ }
+ }
+ }
+ else
+ a_unit = 0x10000; /* sentinel: beyond valid 16-bit range */
+
+ if (pending_b)
+ {
+ b_unit = pending_b;
+ pending_b = 0;
+ }
+ else if (blen)
+ {
+ {
+ UV uv;
+ STRLEN clen = 0;
+#if PERL_VERSION > 36
+ uv = utf8n_to_uvchr (bp, blen, &clen, UTF8_CHECK_ONLY);
+#elif PERL_VERSION >= 8
+ uv = utf8n_to_uvuni (bp, blen, &clen, UTF8_CHECK_ONLY);
+#else
+ uv = utf8_to_uv (bp, blen, &clen, UTF8_CHECK_ONLY);
+#endif
+ if (UNLIKELY (clen <= 0))
+ {
+ /* invalid UTF-8, treat as raw byte */
+ b_unit = *bp++;
+ blen--;
+ }
+ else
+ {
+ bp += clen;
+ blen -= clen;
+ if (uv >= 0x10000)
+ {
+ uv -= 0x10000;
+ b_unit = 0xD800 | (uv >> 10);
+ pending_b = 0xDC00 | (uv & 0x3FF);
+ }
+ else
+ b_unit = (U16)uv;
+ }
+ }
+ }
+ else
+ b_unit = 0x10000;
+
+ if (a_unit == 0x10000 && b_unit == 0x10000)
+ return 0;
+ if (a_unit == 0x10000)
+ return -1;
+ if (b_unit == 0x10000)
+ return 1;
+ if (a_unit != b_unit)
+ return a_unit < b_unit ? -1 : 1;
+ }
+}
+
/* compare hash entries, used when some keys are SV's or UTF-8 */
static int
he_cmp_slow (const void *a, const void *b)
{
dTHX;
- return sv_cmp (HeSVKEY_force (*(HE **)b), HeSVKEY_force (*(HE **)a));
+ return utf16_cmp (aTHX_ HeSVKEY_force (*(HE **)b), HeSVKEY_force (*(HE
**)a));
}
/* compare tied hash entries, guaranteed SV's */
@@ -1292,7 +1403,7 @@
{
dTHX;
/* skip GMAGIC */
- return sv_cmp_flags (HeKEY_sv (*(HE **)b), HeKEY_sv (*(HE **)a), 0);
+ return utf16_cmp (aTHX_ HeKEY_sv (*(HE **)b), HeKEY_sv (*(HE **)a));
}
static void
@@ -2449,8 +2560,10 @@
else {
NV intpart;
if (!( inf_or_nan || (had_nokp && Perl_modf(SvNVX(sv), &intpart))
+#if NV_DIG < 31
|| (!force_conversion && had_nokp
&& (SvNVX(sv) > (NV)UV_MAX || SvNVX(sv) < (NV)IV_MIN))
+#endif
|| (!force_conversion && SvIOK(sv))
|| strchr(enc->cur,'e')
|| strchr(enc->cur,'E')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.42/t/10_pc_keysort.t
new/Cpanel-JSON-XS-4.43/t/10_pc_keysort.t
--- old/Cpanel-JSON-XS-4.42/t/10_pc_keysort.t 2022-05-03 13:12:26.000000000
+0200
+++ new/Cpanel-JSON-XS-4.43/t/10_pc_keysort.t 2026-07-18 08:45:47.000000000
+0200
@@ -1,16 +1,51 @@
# copied over from JSON::PC and modified to use Cpanel::JSON::XS
+# extended with RFC 8785 surrogate ordering tests (GH #248)
use Test::More;
use strict;
-BEGIN { plan tests => 1 };
+BEGIN { plan tests => 6 };
use Cpanel::JSON::XS;
+use utf8;
#########################
my ($js,$obj);
-my $pc = Cpanel::JSON::XS->new->canonical(1);
+my $pc = Cpanel::JSON::XS->new->canonical(1)->ascii;
$obj = {a=>1, b=>2, c=>3, d=>4, e=>5, f=>6, g=>7, h=>8, i=>9};
$js = $pc->encode($obj);
-is($js, q|{"a":1,"b":2,"c":3,"d":4,"e":5,"f":6,"g":7,"h":8,"i":9}|);
+is($js, q|{"a":1,"b":2,"c":3,"d":4,"e":5,"f":6,"g":7,"h":8,"i":9}|,
+ 'ASCII keys sorted ascending');
+
+# RFC 8785: non-BMP char sorts before BMP char with codepoint >= 0xD800
+# U+1F600 -> UTF-16: D83D DE00 (high surrogate 0xD83D)
+# U+FB33 -> UTF-16: FB33
+# 0xD83D < 0xFB33, so emoji sorts before dalet
+is($pc->encode({ "\x{1F600}" => 1, "\x{FB33}" => 2 }),
+ q|{"\ud83d\ude00":1,"\ufb33":2}|,
+ 'RFC 8785: non-BMP (emoji) before BMP dalet');
+
+# BMP char below surrogate range sorts before non-BMP
+# U+D7FF (last valid char before surrogates) < D83D (non-BMP high surrogate)
+is($pc->encode({ "\x{1F600}" => 1, "\x{D7FF}" => 2 }),
+ q|{"\ud7ff":2,"\ud83d\ude00":1}|,
+ 'RFC 8785: BMP below 0xD800 sorts before non-BMP');
+
+# BMP char above surrogate range sorts after non-BMP
+# D83D (non-BMP high surrogate) < E000 (first valid char after surrogates)
+is($pc->encode({ "\x{1F600}" => 1, "\x{E000}" => 2 }),
+ q|{"\ud83d\ude00":1,"\ue000":2}|,
+ 'RFC 8785: non-BMP sorts before BMP >= 0xE000');
+
+# Two non-BMP chars: sorted by their surrogate pairs
+# U+1F600 -> D83D DE00, U+1F601 -> D83D DE01, U+1F602 -> D83D DE02
+is($pc->encode({ "\x{1F602}" => 3, "\x{1F600}" => 1, "\x{1F601}" => 2 }),
+ q|{"\ud83d\ude00":1,"\ud83d\ude01":2,"\ud83d\ude02":3}|,
+ 'RFC 8785: two non-BMP chars sorted by surrogate pair');
+
+# Mixed ASCII below 0x80 and non-BMP
+# ASCII (0x61=97=a, 0x7A=122=z) < D83D (non-BMP high surrogate)
+is($pc->encode({ "\x{1F600}" => 1, "z" => 2, "a" => 3 }),
+ q|{"a":3,"z":2,"\ud83d\ude00":1}|,
+ 'RFC 8785: ASCII sorts before non-BMP');
++++++ _scmsync.obsinfo ++++++
--- /var/tmp/diff_new_pack.5twuaH/_old 2026-07-21 23:11:59.481561292 +0200
+++ /var/tmp/diff_new_pack.5twuaH/_new 2026-07-21 23:11:59.485561428 +0200
@@ -1,6 +1,6 @@
-mtime: 1780912543
-commit: 8012fc8490d5638fbac6d0d6c00c04da0dc8dcefcb102980b22914dd62bb719e
+mtime: 1784446580
+commit: b2da9d5f2430a11729158002ab76cc0b487b9d0b1acaf986fd18d8c7c0a25bb1
url: https://src.opensuse.org/perl/perl-Cpanel-JSON-XS
-revision: 8012fc8490d5638fbac6d0d6c00c04da0dc8dcefcb102980b22914dd62bb719e
+revision: b2da9d5f2430a11729158002ab76cc0b487b9d0b1acaf986fd18d8c7c0a25bb1
projectscmsync: https://src.opensuse.org/perl/_ObsPrj
++++++ build.specials.obscpio ++++++
++++++ build.specials.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/.gitignore new/.gitignore
--- old/.gitignore 1970-01-01 01:00:00.000000000 +0100
+++ new/.gitignore 2026-07-19 09:36:20.000000000 +0200
@@ -0,0 +1 @@
+.osc