Skip to content

Commit

Permalink
wrench: QRData::estimateTotalBitLength(): do not substract from the e…
Browse files Browse the repository at this point in the history
…stimated bit length
  • Loading branch information
codemasher committed Feb 27, 2024
1 parent 87a833e commit c1c9cdf
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 3 deletions.
6 changes: 3 additions & 3 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
26 changes: 26 additions & 0 deletions tests/Data/QRDataTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@
namespace chillerlan\QRCodeTest\Data;

use chillerlan\QRCode\Common\BitBuffer;
use chillerlan\QRCode\Common\EccLevel;
use chillerlan\QRCode\Common\MaskPattern;
use chillerlan\QRCode\Data\Byte;
use chillerlan\QRCode\Data\QRData;
use chillerlan\QRCode\Output\QRGdImagePNG;
use chillerlan\QRCode\QRCode;
Expand Down Expand Up @@ -63,4 +65,28 @@ public function testSetBitBuffer():void{
$this::assertSame($decodeResult->data, 'https://www.youtube.com/watch?v=DLzxrzFCyOs&t=43s');
}

public function testEstimateTotalBitLength():void{

$options = new QROptions([
'versionMin' => 10,
'quietzoneSize' => 2,
'eccLevel' => EccLevel::H,
# 'outputType' => QROutputInterface::CUSTOM,
# 'outputInterface' => PmaQrCodeSVG::class,
'outputBase64' => false,
'cssClass' => 'pma-2fa-qrcode',
'drawCircularModules' => true,
]);

// version 10H has a maximum of 976 bits, which is the exact length of the string below
// QRData::estimateTotalBitLength() used to substract 4 bits for a hypothetical data mode indicator
// we're now going the safe route and do not do that anymore...
$str = 'otpauth://totp/user?secret=P2SXMJFJ7DJGHLVEQYBNH2EYM4FH66CR'.
'&issuer=phpMyAdmin%20%28%29&digits=6&algorithm=SHA1&period=30';

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

$this::assertSame(980, $qrData->estimateTotalBitLength());
}

}

0 comments on commit c1c9cdf

Please sign in to comment.