Skip to content

Commit

Permalink
🔧 estimated bit length was correct, add a safety margin instead
Browse files Browse the repository at this point in the history
  • Loading branch information
codemasher committed Feb 27, 2024
1 parent ccc7376 commit df49b3f
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 6 deletions.
8 changes: 4 additions & 4 deletions src/Data/QRData.php
Original file line number Diff line number Diff line change
Expand Up @@ -164,9 +164,9 @@ public function estimateTotalBitLength():int{

// it seems that in some cases the estimated total length is not 100% accurate,
// so we substract 4 bits from the total when not in mixed mode
# if(count($this->dataSegments) <= 1){
# $length -= 4;
# }
if(count($this->dataSegments) <= 1){
$length -= 4;
}

// we've got a match!
// or let's see if there's a higher version number available
Expand Down Expand Up @@ -194,7 +194,7 @@ public function getMinimumVersion():Version{

// guess the version number within the given range
for($version = $this->options->versionMin; $version <= $this->options->versionMax; $version++){
if($total <= $this->maxBitsForEcc[$version]){
if($total <= ($this->maxBitsForEcc[$version] - 4)){
return new Version($version);
}
}
Expand Down
9 changes: 8 additions & 1 deletion tests/Data/DataInterfaceTestAbstract.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
use chillerlan\QRCodeTest\QRMaxLengthTrait;
use Exception, Generator;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\ExpectationFailedException;
use PHPUnit\Framework\TestCase;
use function array_map, hex2bin, mb_strlen, mb_substr, sprintf, str_repeat, strlen, substr;

Expand Down Expand Up @@ -178,7 +179,13 @@ public function testGetMinimumVersion(Version $version, EccLevel $eccLevel, stri

$minimumVersionNumber = $this->QRData->getMinimumVersion()->getVersionNumber();

$this::assertSame($version->getVersionNumber(), $minimumVersionNumber);
try{
$this::assertSame($version->getVersionNumber(), $minimumVersionNumber);
}
catch(ExpectationFailedException $e){
$this::assertSame(($version->getVersionNumber() + 1), $minimumVersionNumber, 'safety margin');
}

// verify the encoded data
$this::assertSame($this->dataMode::DATAMODE, $bitBuffer->read(4));
$this::assertSame($str, $this->dataMode::decodeSegment($bitBuffer, $minimumVersionNumber));
Expand Down
3 changes: 2 additions & 1 deletion tests/Data/QRDataTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,8 @@ public function testEstimateTotalBitLength():void{

$qrData = new QRData($options, [new Byte($str)]);

$this::assertSame(980, $qrData->estimateTotalBitLength());
$this::assertSame(976, $qrData->estimateTotalBitLength());
$this::assertSame(11, $qrData->getMinimumVersion()->getVersionNumber()); // version adjusted to 11
}

}

0 comments on commit df49b3f

Please sign in to comment.