Giter Club home page Giter Club logo

bcmath_compat's Introduction

bcmath_compat

Software License CI Status

PHP 5.x-8.x polyfill for bcmath extension

Installation

With Composer:

$ composer require phpseclib/bcmath_compat

Limitations

  • extension_loaded('bcmath')

    bcmath_compat cannot make this return true. The recommended remediation is to not do this.

  • ini_set('bcmath.scale', ...)

    You cannot set configuration options for extensions that are not installed. If you do ini_set('bcmath.scale', 5) on a system without bcmath installed then ini_get('bcmath.scale') will return false. It's similar to what happens when you do ini_set('zzz', 5) and then ini_get('zzz'). You'll get false back.

    The recommended remediation to doing ini_set('bcmath.scale', ...) is to do bcscale(...). The recommended remediation for doing ini_get is (if you're using PHP >= 7.3.0) to do bcscale() or (if you're using PHP < 7.3.0) to do max(0, strlen(bcadd('0', '0')) - 2).

    Note that ini_get always returns a string whereas the recommended remediations return integers.

bcmath_compat's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

bcmath_compat's Issues

null arguments

The functions are not handling null arguments the same way as the php extension.
Argument validation raises warnings for null arguments and returns incorrect null value as function result.

print_r(
    array(
        'bcadd(1, 1)' => bcadd(1, 1),
        'bcadd(null, 1)' => bcadd(null, 1),
        'bcadd(1, null)' => bcadd(1, null),
    )
);

Result with php bcmath:

Array
(
    [bcadd(1, 1)] => 2
    [bcadd(null, 1)] => 1
    [bcadd(1, null)] => 1
)

Result with phpseclib/bcmath_compat:

Warning: bcadd() expects parameter 0 to be integer, NULL given in vendor\phpseclib\bcmath_compat\src\BCMath.php on line 418

Warning: bcadd() expects parameter 1 to be integer, NULL given in vendor\phpseclib\bcmath_compat\src\BCMath.php on line 418

Array
(
    [bcadd(1, 1)] => 2
    [bcadd(null, 1)] =>
    [bcadd(1, null)] =>
)

Argument validation should accept null.
Since before method calling non numeric arguments are casted to 0, it is safe to accept null at argument validation.

Compatability with PHP8.3

The polyfill seems to not work with PHP 8.3 and gives a error that module is not present, when I switch back to PHP 8.1 it works as expected

can't install on heroku

During an Heroku deployment i get this error :

Your requirements could not be resolved to an installable set of packages.

Problem 1
- don't install phpseclib/bcmath_compat 1.0.3|don't install php 7.3.13
- composer.json/composer.lock requires php 7.3.* -> satisfiable by php[7.3.13].
- Installation request for phpseclib/bcmath_compat 1.0.3 -> satisfiable by phpseclib/bcmath_compat[1.0.3].

The phpseclib/bcmath_compat package is an indirect dependency of laravel/framework via moontoast/math

number of parameters at ArgumentCountError is always 2 in exception

The exception ArgumentCountError gives wrong given parameter length.
When a function is called with wrong amounts of parameters, e.g. static BCMath::scale(4,2,3), in the magic static function __callStatic($name, $arguments) line 373 throws an error. That is ok, but the func_num_args() used - only returns the number of parameters of the called function and is always 2 in that case. That should be the amount of $arguments (array).
You are probably wondering why I came up with this? My editor shows me an error that the parameters for the __callStatic() magic function should always be the amount of 2.
I fixed it with PR #6

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.