# Base_convert changes

- Thread: https://externals.io/message/104618
- Original archive: https://news-web.php.net/php.internals/104618
- Started by Scott Dutton on 2019-03-10T12:29:00+00:00
- Messages: 3
- Reply by email to internals@lists.php.net
- More for agents: search with https://externals.io/search.md?q={query} · RFCs at https://externals.io/rfc.md · JSON API at https://externals.io/api · documentation at https://externals.io/llms.txt

---

## #104618 — Scott Dutton — 2019-03-10T12:29:00+00:00

URL: https://externals.io/message/104618#104618

Hi,

I have just put a pull request together to make some changes to base_convert, the changes are as follows:

1, Allow conversion of negative numbers (fixes https://bugs.php.net/bug.php?id=55393)
2, Raise a notice when passing in invalid chars as input, currently they are just silently ignored

Part of the negative number change causes a BC break due to needing to use a "zend_long" instead of a "zend_ulong" this breaks a number of tests, but allows negative numbers to be represented correctly.

The PR is here https://github.com/php/php-src/pull/3911/files

I look forward to hearing thoughts on this

Thanks

Scott

---

## #104647 — Nikita Popov — 2019-03-11T10:51:23+00:00

URL: https://externals.io/message/104618#104647

> Hi,
>
> I have just put a pull request together to make some changes to
> base_convert, the changes are as follows:
>
> 1, Allow conversion of negative numbers (fixes
> https://bugs.php.net/bug.php?id=55393)
> 2, Raise a notice when passing in invalid chars as input, currently they
> are just silently ignored
>
> Part of the negative number change causes a BC break due to needing to use
> a "zend_long" instead of a "zend_ulong" this breaks a number of tests, but
> allows negative numbers to be represented correctly.
>
> The PR is here https://github.com/php/php-src/pull/3911/files
>
> I look forward to hearing thoughts on this
>
> Thanks
>
> Scott


Both changes sound reasonable to me. Could you show some examples where the
output is going to change due to the zend_ulong->zend_long switch?

Nikita

---

## #104670 — Scott Dutton — 2019-03-12T13:05:59+00:00

URL: https://externals.io/message/104618#104670

>
> Both changes sound reasonable to me. Could you show some examples 
> where the
> output is going to change due to the zend_ulong->zend_long switch?
>
> Nikita

Sure!

For example

var_dump(decbin(9223372036854775807));

would currently show

string(64) 
"1000000000000000000000000000000000000000000000000000000000000000"


After these changes it would show

string(65) 
"-000000000000000000000000000000000000000000000000000000000000000"

var_dump(decbin(9223372036854775806));

would be the same for both showing.

string(63) 
"111111111111111111111111111111111111111111111111111111111111110"



As the code is reused for decbin etc all of the helper functions have a 
similar effect.

Also userland code would look like this currently

$converted = base_convert($original, 2, 10);
if ($original < 0) {
     $converted = - $converted;
}


So anyone who use coded around this will also break.

I have pushed some fixed suggested to the PR again all comments 
welcome, my C is quite rusty so happy to change anything

Thanks
