This repository was archived by the owner on Mar 13, 2018. It is now read-only.
Fixed invalid ipv4 addresses lookup on 32bit systems#43
Open
ffeast wants to merge 1 commit intokoroban:masterfrom
ffeast:fix_32bit_int_wrap
Open
Fixed invalid ipv4 addresses lookup on 32bit systems#43ffeast wants to merge 1 commit intokoroban:masterfrom ffeast:fix_32bit_int_wrap
ffeast wants to merge 1 commit intokoroban:masterfrom
ffeast:fix_32bit_int_wrap
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Hi
There's a problem with ipv4 lookup on 32bit systems, because ip2long may return a negative number due to a signed integer overflow.
Quoting: http://php.net/manual/en/language.types.integer.php
The size of an integer is platform-dependent, although a maximum value of about two billion is the usual value (that's 32 bits signed). 64-bit platforms usually have a maximum value of about 9E18. PHP does not support unsigned integers. Integer size can be determined using the constant PHP_INT_SIZE, and maximum value using the constant PHP_INT_MAX since PHP 4.4.0 and PHP 5.0.5.
32bit only:
When you try to lookup '194.67.32.107', the following occurs in https://github.com/novutec/WhoisParser/blob/master/Parser.php#L360:
But it's wrong because base_convert actually leaves out '-', so that, for instance,
base_convert(-5, 10, 2) = base_convert(5, 10, 2)
hence the output of ip2long is incorrect
returns string(14) "61.188.223.149"
The solution is to explicitly convert ip2long output to a string representation of unsigned int.