Skip to content

Commit

Permalink
fix: Make QR scanner more strict
Browse files Browse the repository at this point in the history
The QR scanner is now more strict about the contents it allows to be
scanned. If the scanned QR code deviates at all from the supported
formats, it will retur "unknown" as the result (as it always has for
completely unrecognized QR codes).

Previously we would accept QR codes with a recognized prefix even if
the complete contents did not match our expectations, which has
resulted in unexpected behavior.
  • Loading branch information
Gudahtt committed Nov 18, 2024
1 parent ee75939 commit adc5f3c
Showing 1 changed file with 13 additions and 3 deletions.
16 changes: 13 additions & 3 deletions ui/components/app/modals/qr-scanner/qr-scanner.component.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ const READY_STATE = {
READY: 'READY',
};

const ethereumPrefix = 'ethereum:';
// A 0x-prefixed Ethereum address is 42 characters (2 prefix + 40 address)
const addressLength = 42;

const parseContent = (content) => {
let type = 'unknown';
let values = {};
Expand All @@ -31,12 +35,18 @@ const parseContent = (content) => {
// For ex. EIP-681 (https://eips.ethereum.org/EIPS/eip-681)

// Ethereum address links - fox ex. ethereum:0x.....1111
if (content.split('ethereum:').length > 1) {
if (
content.split(ethereumPrefix).length > 1 &&
content.length === ethereumPrefix.length + addressLength
) {
type = 'address';
// uses regex capture groups to match and extract address while ignoring everything else
// uses regex capture groups to match and extract address
values = { address: parseScanContent(content) };
// Regular ethereum addresses - fox ex. 0x.....1111
} else if (content.substring(0, 2).toLowerCase() === '0x') {
} else if (
content.substring(0, 2).toLowerCase() === '0x' &&
content.length === addressLength
) {
type = 'address';
values = { address: content };
}
Expand Down

0 comments on commit adc5f3c

Please sign in to comment.