Skip to content

Commit ab1f371

Browse files
committed
:octocat: fixed a rare code length overflow issue
1 parent e81ed39 commit ab1f371

File tree

2 files changed

+9
-3
lines changed

2 files changed

+9
-3
lines changed

src/Data/QRData.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ public function getMinimumVersion():Version{
195195

196196
// guess the version number within the given range
197197
for($version = $this->options->versionMin; $version <= $this->options->versionMax; $version++){
198-
if($total <= $this->maxBitsForEcc[$version]){
198+
if($total <= $this->maxBitsForEcc[$version] - 4){
199199
return new Version($version);
200200
}
201201
}

tests/Data/DataInterfaceTestAbstract.php

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
use chillerlan\QRCode\Data\{QRCodeDataException, QRData, QRDataModeInterface, QRMatrix};
1515
use chillerlan\QRCode\QROptions;
1616
use chillerlan\QRCodeTest\QRMaxLengthTrait;
17+
use PHPUnit\Framework\{ExpectationFailedException, TestCase};
1718
use Exception, Generator;
18-
use PHPUnit\Framework\TestCase;
1919
use function array_map, hex2bin, mb_strlen, mb_substr, sprintf, str_repeat, strlen, substr;
2020

2121
/**
@@ -187,7 +187,13 @@ public function testGetMinimumVersion(Version $version, EccLevel $eccLevel, stri
187187

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

190-
$this::assertSame($version->getVersionNumber(), $minimumVersionNumber);
190+
try{
191+
$this::assertSame($version->getVersionNumber(), $minimumVersionNumber);
192+
}
193+
catch(ExpectationFailedException $e){
194+
$this::assertSame(($version->getVersionNumber() + 1), $minimumVersionNumber, 'safety margin');
195+
}
196+
191197
// verify the encoded data
192198
$this::assertSame($this->dataMode::DATAMODE, $bitBuffer->read(4));
193199
$this::assertSame($str, $this->dataMode::decodeSegment($bitBuffer, $minimumVersionNumber));

0 commit comments

Comments
 (0)