Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:129054 X-Original-To: internals@lists.php.net Delivered-To: internals@lists.php.net Received: from php-smtp4.php.net (php-smtp4.php.net [45.112.84.5]) by lists.php.net (Postfix) with ESMTPS id C59561A00BC for ; Mon, 3 Nov 2025 16:10:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=php.net; s=mail; t=1762186206; bh=hlbXyqs++6NXAsOjCx/dg7u6ro/MY+lRuSyJg6Ja7b4=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=ORhKFYXE3R1IWvtqVVm7wNVio+MwgkZn24y0yXkETzZgxwpFSVkIwovp3vqMwo7er 2KI36MymPPxEwbitNH7hM9kQeAbpRq9rN/FKxT0MzwL/8gN1Sbu94NjuLgedNjfGpN yGjBTbkk8zDxCcUo0NhCwEGZBN23aNp4w0cNiIEljv7uw1p0e//fCdNMkOh3nn8RGA V80228m+PkUyGVpKZteCoIGAKouUV0u7saFv6ZzcK/tHtW2BuIWbkkFY99rf6kG4S1 6Jmcq2j6o4nmtOt80eVzLYTbNNHW5hLnvRHoS/EA670ZZ0bZW/oLJQTMIuMPp8I89h SNiySXyqMAUsg== Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id 37F2618007E for ; Mon, 3 Nov 2025 16:10:05 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on php-smtp4.php.net X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,DMARC_PASS,SPF_HELO_NONE, SPF_PASS autolearn=no autolearn_force=no version=4.0.1 X-Spam-Virus: No X-Envelope-From: Received: from chrono.xqk7.com (chrono.xqk7.com [176.9.45.72]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by php-smtp4.php.net (Postfix) with ESMTPS for ; Mon, 3 Nov 2025 16:10:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bastelstu.be; s=mail20171119; t=1762186198; bh=0Sr17ELSMeHZiKN56Z7jJNq6FjYuun5eSIFw0cNfcWw=; h=MIME-Version:Date:From:To:Cc:Subject:In-Reply-To:References: Message-ID:Content-Type:from:to:cc:subject:message-id; b=bPsKrQxEyeQLLiZZxAWSHu/uJmrxZs9CV3Y2PYo2tB9eeUKHR+hGKP58Ko6oTrmJP 4lYcgW+lCvFkEy7RFCiMBPtsJN7LnyC5uw89nsOvM0hpPXozGk3PwGibWFSiq3jdwE fq6vge2QJQnuRrBQuHiz0BZyQtcayKHY0vdTeWc+RNn/oFyKOLRDHUmN+zvZItbw7f qhhW3Sb4k4msGk7+C3BZbMhnr8JwWLfSx+FuVtmjPVzUq6rJicJZszwvBh/AtAf9/L X9hZFCoMwXMhUnlvFGNWvojptXN6BFvmknV0eNO4P7e3Fvoau8DfehZ7x3HAXVX7Hl Z0cdkot7Mh2xQ== Precedence: list list-help: list-unsubscribe: list-post: List-Id: x-ms-reactions: disallow MIME-Version: 1.0 Date: Mon, 03 Nov 2025 17:09:57 +0100 To: "Gina P. Banyard" Cc: Alexandre Daubois , PHP internals list Subject: Re: [PHP-DEV] Re: [RFC] Add pack()/unpack() support for signed integers with specific endianness In-Reply-To: References: <86c27cd68c8ba8056d832a845eb15dcd@bastelstu.be> Message-ID: Content-Type: multipart/mixed; boundary="=_7fd1d8eb12c3b2033a8f74fcd7948f3b" From: tim@bastelstu.be (=?UTF-8?Q?Tim_D=C3=BCsterhus?=) --=_7fd1d8eb12c3b2033a8f74fcd7948f3b Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed Hi Am 2025-11-03 15:51, schrieb Gina P. Banyard: > While the < > syntax to "force" the endianess of a sequence specifier > is nice. > But if this requires rewriting the whole parser as this RFC implies, > then you are asking someone to commit to a larger amount of work than > they signed up, which is considered bad RFC etiquette. [1] I disagree with that claim in the RFC and to put my money where my mouth is, I have spent the 15 minutes of writing the necessary patch for the pack() function. It is attached to this email and also available as this gist: https://gist.github.com/TimWolla/d8bca56a6507226e684827d2a7b44829. Given the time spent, I've only given it light testing, but it passes all existing `pack()` tests and returns the correct output for: 2', 258, -2, 258, -2))); var_dump(bin2hex(pack('a>', 258))); Using `perl -e "print pack('s<2s>2', 258, -2, 258, -2)" |xxd` as a comparison. I have not created the patch for `unpack()`, but I believe this is already sufficient demonstration that “rewriting the whole parser” is not necessary at all. Best regards Tim Düsterhus --=_7fd1d8eb12c3b2033a8f74fcd7948f3b Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=0001-pack-Support-endian-specifier.patch Content-Disposition: attachment; filename=0001-pack-Support-endian-specifier.patch; size=5165 RnJvbSAxMWFhOWQzN2IwYzA2YjY3OGEyN2RiOGUzN2Q0ZGM4MTdkZWFkNGJmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/VGltPTIwRD1DMz1CQ3N0ZXJodXM/PSA8dGlt QHRpZGV3YXlzLWdtYmguY29tPgpEYXRlOiBNb24sIDMgTm92IDIwMjUgMTY6NTc6MzkgKzAxMDAK U3ViamVjdDogW1BBVENIXSBwYWNrOiBTdXBwb3J0IGVuZGlhbiBzcGVjaWZpZXIKCi0tLQogZXh0 L3N0YW5kYXJkL3BhY2suYyB8IDU5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKy0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDUxIGluc2VydGlvbnMoKyksIDggZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvZXh0L3N0YW5kYXJkL3BhY2suYyBiL2V4dC9zdGFuZGFyZC9wYWNr LmMKaW5kZXggNTVkYTY0ODk3YTIuLjViZTJjMDI2MGJjIDEwMDY0NAotLS0gYS9leHQvc3RhbmRh cmQvcGFjay5jCisrKyBiL2V4dC9zdGFuZGFyZC9wYWNrLmMKQEAgLTMwLDYgKzMwLDcgQEAKIAlv dXRwdXRwb3MgKz0gKGEpKihiKTsKIAogdHlwZWRlZiBlbnVtIHsKKwlQSFBfREVGQVVMVF9FTkRJ QU4sCiAJUEhQX0xJVFRMRV9FTkRJQU4sCiAJUEhQX0JJR19FTkRJQU4sCiB9IHBocF9wYWNrX2Vu ZGlhbm5lc3M7CkBAIC0xOTMsNiArMTk0LDExIEBAIHN0YXRpYyBkb3VibGUgcGhwX3BhY2tfcGFy c2VfZG91YmxlKGludCBpc19saXR0bGVfZW5kaWFuLCB2b2lkICogc3JjKQogfQogLyogfX19ICov CiAKK3N0cnVjdCBmb3JtYXRhcmcgeworCWludCBjb3VudDsKKwlwaHBfcGFja19lbmRpYW5uZXNz IGVuZGlhbm5lc3M7Cit9OworCiAvKiBwYWNrKCkgaWRlYSBzdG9sZW4gZnJvbSBQZXJsIChpbXBs ZW1lbnRlZCBmb3JtYXRzIGJlaGF2ZSB0aGUgc2FtZSBhcyB0aGVyZSBleGNlcHQgSiBhbmQgUCkK ICAqIEltcGxlbWVudGVkIGZvcm1hdHMgYXJlIFosIEEsIGEsIGgsIEgsIGMsIEMsIHMsIFMsIGks IEksIGwsIEwsIG4sIE4sIHEsIFEsIEosIFAsIGYsIGQsIHgsIFgsIEAuCiAgKiBBZGRlZCBnLCBH IGZvciBsaXR0bGUgZW5kaWFuIGZsb2F0IGFuZCBiaWcgZW5kaWFuIGZsb2F0LCBhZGRlZCBlLCBF IGZvciBsaXR0bGUgZW5kaWFuIGRvdWJsZSBhbmQgYmlnIGVuZGlhbiBkb3VibGUuCkBAIC0yMDcs NyArMjEzLDcgQEAgUEhQX0ZVTkNUSU9OKHBhY2spCiAJY2hhciAqZm9ybWF0OwogCXNpemVfdCBm b3JtYXRsZW47CiAJY2hhciAqZm9ybWF0Y29kZXM7Ci0JaW50ICpmb3JtYXRhcmdzOworCXN0cnVj dCBmb3JtYXRhcmcgKmZvcm1hdGFyZ3M7CiAJc2l6ZV90IGZvcm1hdGNvdW50ID0gMDsKIAlpbnQg b3V0cHV0cG9zID0gMCwgb3V0cHV0c2l6ZSA9IDA7CiAJemVuZF9zdHJpbmcgKm91dHB1dDsKQEAg LTIyNiw5ICsyMzIsMTEgQEAgUEhQX0ZVTkNUSU9OKHBhY2spCiAJZm9yIChpID0gMDsgaSA8IGZv cm1hdGxlbjsgZm9ybWF0Y291bnQrKykgewogCQljaGFyIGNvZGUgPSBmb3JtYXRbaSsrXTsKIAkJ aW50IGFyZyA9IDE7CisJCXBocF9wYWNrX2VuZGlhbm5lc3MgZW5kaWFubmVzcyA9IFBIUF9ERUZB VUxUX0VORElBTjsKIAogCQkvKiBIYW5kbGUgZm9ybWF0IGFyZ3VtZW50cyBpZiBhbnkgKi8KIAkJ aWYgKGkgPCBmb3JtYXRsZW4pIHsKKyBhZ2Fpbjo7CiAJCQljaGFyIGMgPSBmb3JtYXRbaV07CiAK IAkJCWlmIChjID09ICcqJykgewpAQCAtMjQyLDYgKzI1MCwxMSBAQCBQSFBfRlVOQ1RJT04ocGFj aykKIAkJCQkJaSsrOwogCQkJCX0KIAkJCX0KKwkJCWVsc2UgaWYgKGMgPT0gJzwnIHx8IGMgPT0g Jz4nKSB7CisJCQkJZW5kaWFubmVzcyA9IGMgPT0gJzwnID8gUEhQX0xJVFRMRV9FTkRJQU4gOiBQ SFBfQklHX0VORElBTjsKKwkJCQlpKys7CisJCQkJZ290byBhZ2FpbjsKKwkJCX0KIAkJfQogCiAJ CS8qIEhhbmRsZSBzcGVjaWFsIGFyZyAnKicgZm9yIGFsbCBjb2RlcyBhbmQgY2hlY2sgYXJndiBv dmVyZmxvd3MgKi8KQEAgLTM0MSw4ICszNTQsMjAgQEAgUEhQX0ZVTkNUSU9OKHBhY2spCiAJCQkJ UkVUVVJOX1RIUk9XUygpOwogCQl9CiAKKwkJaWYgKGVuZGlhbm5lc3MgIT0gUEhQX0RFRkFVTFRf RU5ESUFOKSB7CisJCQlpZiAoc3RyY2hyKCJzU2lJbExxUWYiLCBjb2RlKSA9PSBOVUxMKSB7CisJ CQkJZWZyZWUoZm9ybWF0Y29kZXMpOworCQkJCWVmcmVlKGZvcm1hdGFyZ3MpOworCQkJCXplbmRf dmFsdWVfZXJyb3IoIlR5cGUgJWM6IEVuZGlhbm5lc3MgbWF5IG5vdCBiZSBzcGVjaWZpZWQiLCBj b2RlKTsKKwkJCQlSRVRVUk5fVEhST1dTKCk7CisJCQl9CisJCX0KKwogCQlmb3JtYXRjb2Rlc1tm b3JtYXRjb3VudF0gPSBjb2RlOwotCQlmb3JtYXRhcmdzW2Zvcm1hdGNvdW50XSA9IGFyZzsKKwkJ Zm9ybWF0YXJnc1tmb3JtYXRjb3VudF0gPSAoc3RydWN0IGZvcm1hdGFyZyl7CisJCQkuY291bnQg PSBhcmcsCisJCQkuZW5kaWFubmVzcyA9IGVuZGlhbm5lc3MsCisJCX07CiAJfQogCiAJaWYgKGN1 cnJlbnRhcmcgPCBudW1fYXJncykgewpAQCAtMzUyLDcgKzM3Nyw3IEBAIFBIUF9GVU5DVElPTihw YWNrKQogCS8qIENhbGN1bGF0ZSBvdXRwdXQgbGVuZ3RoIGFuZCB1cHBlciBib3VuZCB3aGlsZSBw cm9jZXNzaW5nKi8KIAlmb3IgKGkgPSAwOyBpIDwgZm9ybWF0Y291bnQ7IGkrKykgewogCQljaGFy IGNvZGUgPSBmb3JtYXRjb2Rlc1tpXTsKLQkJaW50IGFyZyA9IGZvcm1hdGFyZ3NbaV07CisJCWlu dCBhcmcgPSBmb3JtYXRhcmdzW2ldLmNvdW50OwogCiAJCXN3aXRjaCAoY29kZSkgewogCQkJY2Fz ZSAnaCc6CkBAIC00MzUsNyArNDYwLDcgQEAgUEhQX0ZVTkNUSU9OKHBhY2spCiAJLyogRG8gYWN0 dWFsIHBhY2tpbmcgKi8KIAlmb3IgKGkgPSAwOyBpIDwgZm9ybWF0Y291bnQ7IGkrKykgewogCQlj aGFyIGNvZGUgPSBmb3JtYXRjb2Rlc1tpXTsKLQkJaW50IGFyZyA9IGZvcm1hdGFyZ3NbaV07CisJ CWludCBhcmcgPSBmb3JtYXRhcmdzW2ldLmNvdW50OwogCiAJCXN3aXRjaCAoY29kZSkgewogCQkJ Y2FzZSAnYSc6CkBAIC01MTcsNiArNTQyLDEwIEBAIFBIUF9GVU5DVElPTihwYWNrKQogCQkJCQll bmRpYW5uZXNzID0gUEhQX0xJVFRMRV9FTkRJQU47CiAJCQkJfQogCisJCQkJaWYgKGZvcm1hdGFy Z3NbaV0uZW5kaWFubmVzcyAhPSBQSFBfREVGQVVMVF9FTkRJQU4pIHsKKwkJCQkJZW5kaWFubmVz cyA9IGZvcm1hdGFyZ3NbaV0uZW5kaWFubmVzczsKKwkJCQl9CisKIAkJCQl3aGlsZSAoYXJnLS0g PiAwKSB7CiAJCQkJCXBocF9wYWNrKCZhcmd2W2N1cnJlbnRhcmcrK10sIDIsIGVuZGlhbm5lc3Ms ICZaU1RSX1ZBTChvdXRwdXQpW291dHB1dHBvc10pOwogCQkJCQlvdXRwdXRwb3MgKz0gMjsKQEAg LTUyNSwxMiArNTU0LDE4IEBAIFBIUF9GVU5DVElPTihwYWNrKQogCQkJfQogCiAJCQljYXNlICdp JzoKLQkJCWNhc2UgJ0knOgorCQkJY2FzZSAnSSc6IHsKKwkJCQlwaHBfcGFja19lbmRpYW5uZXNz IGVuZGlhbm5lc3MgPSBQSFBfTUFDSElORV9FTkRJQU47CisJCQkJaWYgKGZvcm1hdGFyZ3NbaV0u ZW5kaWFubmVzcyAhPSBQSFBfREVGQVVMVF9FTkRJQU4pIHsKKwkJCQkJZW5kaWFubmVzcyA9IGZv cm1hdGFyZ3NbaV0uZW5kaWFubmVzczsKKwkJCQl9CisKIAkJCQl3aGlsZSAoYXJnLS0gPiAwKSB7 Ci0JCQkJCXBocF9wYWNrKCZhcmd2W2N1cnJlbnRhcmcrK10sIHNpemVvZihpbnQpLCBQSFBfTUFD SElORV9FTkRJQU4sICZaU1RSX1ZBTChvdXRwdXQpW291dHB1dHBvc10pOworCQkJCQlwaHBfcGFj aygmYXJndltjdXJyZW50YXJnKytdLCBzaXplb2YoaW50KSwgZW5kaWFubmVzcywgJlpTVFJfVkFM KG91dHB1dClbb3V0cHV0cG9zXSk7CiAJCQkJCW91dHB1dHBvcyArPSBzaXplb2YoaW50KTsKIAkJ CQl9CiAJCQkJYnJlYWs7CisJCQl9CiAKIAkJCWNhc2UgJ2wnOgogCQkJY2FzZSAnTCc6CkBAIC01 NDMsNiArNTc4LDkgQEAgUEhQX0ZVTkNUSU9OKHBhY2spCiAJCQkJfSBlbHNlIGlmIChjb2RlID09 ICdWJykgewogCQkJCQllbmRpYW5uZXNzID0gUEhQX0xJVFRMRV9FTkRJQU47CiAJCQkJfQorCQkJ CWlmIChmb3JtYXRhcmdzW2ldLmVuZGlhbm5lc3MgIT0gUEhQX0RFRkFVTFRfRU5ESUFOKSB7CisJ CQkJCWVuZGlhbm5lc3MgPSBmb3JtYXRhcmdzW2ldLmVuZGlhbm5lc3M7CisJCQkJfQogCiAJCQkJ d2hpbGUgKGFyZy0tID4gMCkgewogCQkJCQlwaHBfcGFjaygmYXJndltjdXJyZW50YXJnKytdLCA0 LCBlbmRpYW5uZXNzLCAmWlNUUl9WQUwob3V0cHV0KVtvdXRwdXRwb3NdKTsKQEAgLTU3Myw2ICs2 MTEsMTEgQEAgUEhQX0ZVTkNUSU9OKHBhY2spCiAjZW5kaWYKIAogCQkJY2FzZSAnZic6IHsKKwkJ CQlpZiAoZm9ybWF0YXJnc1tpXS5lbmRpYW5uZXNzID09IFBIUF9MSVRUTEVfRU5ESUFOKSB7CisJ CQkJCWdvdG8gZzsKKwkJCQl9IGVsc2UgaWYgKGZvcm1hdGFyZ3NbaV0uZW5kaWFubmVzcyA9PSBQ SFBfQklHX0VORElBTikgeworCQkJCQlnb3RvIEc7CisJCQkJfQogCQkJCXdoaWxlIChhcmctLSA+ IDApIHsKIAkJCQkJZmxvYXQgdiA9IChmbG9hdCkgenZhbF9nZXRfZG91YmxlKCZhcmd2W2N1cnJl bnRhcmcrK10pOwogCQkJCQltZW1jcHkoJlpTVFJfVkFMKG91dHB1dClbb3V0cHV0cG9zXSwgJnYs IHNpemVvZih2KSk7CkBAIC01ODIsNyArNjI1LDcgQEAgUEhQX0ZVTkNUSU9OKHBhY2spCiAJCQl9 CiAKIAkJCWNhc2UgJ2cnOiB7Ci0JCQkJLyogcGFjayBsaXR0bGUgZW5kaWFuIGZsb2F0ICovCisg ZzoJCQkJLyogcGFjayBsaXR0bGUgZW5kaWFuIGZsb2F0ICovCiAJCQkJd2hpbGUgKGFyZy0tID4g MCkgewogCQkJCQlmbG9hdCB2ID0gKGZsb2F0KSB6dmFsX2dldF9kb3VibGUoJmFyZ3ZbY3VycmVu dGFyZysrXSk7CiAJCQkJCXBocF9wYWNrX2NvcHlfZmxvYXQoMSwgJlpTVFJfVkFMKG91dHB1dClb b3V0cHV0cG9zXSwgdik7CkBAIC01OTIsNyArNjM1LDcgQEAgUEhQX0ZVTkNUSU9OKHBhY2spCiAJ CQkJYnJlYWs7CiAJCQl9CiAJCQljYXNlICdHJzogewotCQkJCS8qIHBhY2sgYmlnIGVuZGlhbiBm bG9hdCAqLworIEc6CQkJCS8qIHBhY2sgYmlnIGVuZGlhbiBmbG9hdCAqLwogCQkJCXdoaWxlIChh cmctLSA+IDApIHsKIAkJCQkJZmxvYXQgdiA9IChmbG9hdCkgenZhbF9nZXRfZG91YmxlKCZhcmd2 W2N1cnJlbnRhcmcrK10pOwogCQkJCQlwaHBfcGFja19jb3B5X2Zsb2F0KDAsICZaU1RSX1ZBTChv dXRwdXQpW291dHB1dHBvc10sIHYpOwotLSAKMi40My4wCgo= --=_7fd1d8eb12c3b2033a8f74fcd7948f3b--