Skip to content

mb_check_encoding wrong result for 7bit #8128

Closed

Description

@divinity76

Description

edit: warning, there's conflicting definitions of 7bit.. according to https://galprop.stanford.edu/bugs/docs/en/html/api/Bugzilla/Util.html it should be

Returns true is the string contains only 7-bit characters (ASCII 32 through 126, ASCII 10 (LineFeed) and ASCII 13 (Carrage Return).

which i guess would be ($o >= 32 && $o <=126) || $o === 10 || $o === 13
, but if that definition is correct, mb_check_encoding's current behavior is still wrong here.. moving on

The following code:

<?php
function is_7bit_clean(string $str):bool{
    for($i=0,$imax=strlen($str);$i<$imax;++$i){
        if(ord($str[$i]) & (1 << 7)){
            return false;
        }
    }
    return true;
}
$str = chr(255);
var_dump(is_7bit_clean($str) === mb_check_encoding($str, '7bit'));

Resulted in this output:

bool(false)

But I expected this output instead:

bool(true)

as of 8.1.2. probably related to GH #7712
3v4l: https://3v4l.org/HZh8A

PHP Version

PHP 8.1.2

Operating System

No response

Activity

  1. alexdowad commented on Feb 22, 2022

    @alexdowad
    Contributor

    Looks like this was broken in 3e7acf9. Our test suite was not comprehensive enough to catch this change in behavior when mbstring was refactored to combine the identify and conversion filters.

    I'm just pushing a commit to fix it.

  2. alexdowad commented on Feb 22, 2022

    @alexdowad
    Contributor

    Fixed in #8139.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions