Skip to content

Generic.Files.LineLength miscalculates the length of line containing multibyte characters #3923

@julien-picalausa

Description

@julien-picalausa

Describe the bug

Generic.Files.LineLength will report a line to be over the limit if the line is at limit and contains one or more multibyte characters. This is easily reproducible when having UTF-8 strings in the code base.

Using

echo "Jeg liker blåbærsyltetøy";

Custom ruleset

<?xml version="1.0"?>
<ruleset name="My Custom Standard">
  <description>If you are using a custom ruleset, please enter it here.</description>
  <rule ref="Generic.Files.LineLength">
      <properties>
          <property name="lineLimit" value="33" />
          <property name="absoluteLineLimit" value="33" />
      </properties>
  </rule>
</ruleset>

To reproduce

Steps to reproduce the behavior:

  1. Create a file called test.php with the code sample above...
  2. Run phpcs test.php ...
  3. See error message displayed
 1  | ERROR | [ ] Line exceeds maximum limit of 33 characters; contains 35 characters

Expected behavior

No error. The line only has 32 characters (even though it is 35 bytes long)

Versions (please complete the following information)

Operating System FreeBSD 13.1
PHP version PHP 8.2.12
PHP_CodeSniffer version PHP_CodeSniffer version 3.7.2 (stable)
Standard custom
Install type PHAR

Additional context

None I can think og

Please confirm:

  • I have searched the issue list and am not opening a duplicate issue.
  • I confirm that this bug is a bug in PHP_CodeSniffer and not in one of the external standards.
  • I have verified the issue still exists in the master branch of PHP_CodeSniffer.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions