Closed
Bug 1007724
Opened 11 years ago
Closed 10 years ago
[NFC] NDEF Record validation implementation
Categories
(Firefox OS Graveyard :: NFC, defect)
Firefox OS Graveyard
NFC
Tracking
(Not tracked)
RESOLVED
FIXED
2.1 S4 (12sep)
People
(Reporter: tauzen, Assigned: allstars.chh)
References
Details
(Whiteboard: [p=1])
Attachments
(2 files, 1 obsolete file)
1.60 KB,
patch
|
dimi
:
review+
|
Details | Diff | Splinter Review |
3.09 KB,
patch
|
allstars.chh
:
review+
|
Details | Diff | Splinter Review |
User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36
Steps to reproduce:
NDEF record validation for messages which originate from Gaia and Gecko should be implemented. AOSP is performing the following validation: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.1.1_r1/android/nfc/NdefRecord.java#864
Similar mechanics should be implemented in Gecko.
Yoshi's suggestion: "it should be done in MozNDEFRecord so it could validate the data structure and throw error/exception when the caller (could be Gaia side or Gecko side NfcContentHelper ) constructs it with invalid data". This requires that MozNDEFRecord will be passed in both directions.
We should also agree on:
1. Handling of invalid NDEF records detected by the device.
2. Way of notifying user that a malformed record was discovered (new UI? reuse of current components?).
3. Handling of invalid NDEF created by an application - I assume that an for the app should be enough, no additional notification for the user required.
Reporter | ||
Comment 1•11 years ago
|
||
Additional info from Yoshi, adding for completness:
Also there's one thing different I found when looking into AOSP
MozNDEFRecord allows type, and id could be null,
http://dxr.mozilla.org/mozilla-central/source/dom/webidl/MozNDEFRecord.webidl?from=MozNDEFRecord.webidl#29
whereas Android NdefRecord will convert them to empty array.
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.1.1_r1/android/nfc/NdefRecord.java#517
This should also be taken care when we try to add validateTnf into Gecko.
And we already have one bug for the EMPTY_TNF case in Bug 997576
Anyone would like to implement validateTnf should also check the test case in Bug 997576.
Reporter | ||
Comment 2•11 years ago
|
||
One thing which I've noticed is that in case of 'nfc-manager-tech-discovered' message we don't create MozNDEFRecord, this should be also take care of if we would implement the validation in MozNDEFRecord.
Comment 3•11 years ago
|
||
One thing of note. Although I like the use of of using interfaces, there's Bug 964190 to move MozNDEFRecord to dictionary types (which also has API benefits). This may conflict with the other bug's goal.
Assignee | ||
Comment 4•11 years ago
|
||
(In reply to Krzysztof Mioduszewski[:kmioduszewski][:tauzen] from comment #2)
> One thing which I've noticed is that in case of
> 'nfc-manager-tech-discovered' message we don't create MozNDEFRecord, this
> should be also take care of if we would implement the validation in
> MozNDEFRecord.
nfc-manager-tech-discovered is a system message fired from Chrome Process, whereas MozNDEFRecord is defined in Content Process, so we cannot call 'new MozNDEFREcord' from Nfc.js.
Therefore you can see we use a plain JS object there.
Assignee | ||
Updated•10 years ago
|
Blocks: b2g-nfc-privilege
Assignee | ||
Updated•10 years ago
|
Assignee: nobody → allstars.chh
Assignee | ||
Comment 5•10 years ago
|
||
Assignee | ||
Comment 6•10 years ago
|
||
Assignee | ||
Updated•10 years ago
|
Attachment #8481141 -
Flags: review?(bugs)
Assignee | ||
Updated•10 years ago
|
Attachment #8481143 -
Flags: review?(dlee)
Updated•10 years ago
|
Attachment #8481143 -
Flags: review?(dlee) → review+
Comment 7•10 years ago
|
||
Comment on attachment 8481141 [details] [diff] [review]
Part 1: tnf validation
>+MozNDEFRecord::ValidateTNF(const MozNDEFRecordOptions& aOptions,
>+ ErrorResult& aRv)
>+{
>+ // * The TNF field MUST have a value between 0x00 and 0x06.
>+ // * The TNF value MUST NOT be 0x07.
>+ // These two requirements are already handled by WebIDL bindings.
>+
>+ // If the TNF value is 0x00 (Empty), the TYPE_LENGTH, ID_LENGTH, and
>+ // PAYLOAD_LENGTH fields MUST be zero and the TYPE, ID, and PAYLOAD fields
>+ // MUST be omitted from the record.
>+ if ((aOptions.mTnf == TNF::Empty) &&
>+ (aOptions.mType.WasPassed() || aOptions.mId.WasPassed() ||
>+ aOptions.mPayload.WasPassed())) {
>+ NS_WARNING("tnf is empty but type/id/payload is not null.");
>+ aRv.Throw(NS_ERROR_INVALID_ARG);
>+ return false;
>+ }
>+
>+ // If the TNF value is 0x05 (Unknown) or 0x06(Unchanged), the TYPE_LENGTH
>+ // field MUST be 0 and the TYPE field MUST be omitted from the NDEF record.
>+ if ((aOptions.mTnf == TNF::Unknown || aOptions.mTnf == TNF::Unchanged) &&
>+ aOptions.mType.WasPassed()) {
You're not testing that anything is 0 here, but just whether mType was passed, so please update the comment.
>+ aRv.Throw(NS_ERROR_INVALID_ARG);
Could we perhaps throw INVALID_STATE_ERR? That would be from DOM spec, NS_ERROR_INVALID_ARG is Gecko internal
Attachment #8481141 -
Flags: review?(bugs) → review+
Assignee | ||
Comment 8•10 years ago
|
||
(In reply to Olli Pettay [:smaug] from comment #7)
> >+ // If the TNF value is 0x05 (Unknown) or 0x06(Unchanged), the TYPE_LENGTH
> >+ // field MUST be 0 and the TYPE field MUST be omitted from the NDEF record.
> >+ if ((aOptions.mTnf == TNF::Unknown || aOptions.mTnf == TNF::Unchanged) &&
> >+ aOptions.mType.WasPassed()) {
> You're not testing that anything is 0 here, but just whether mType was
> passed, so please update the comment.
>
Yeah, these comments are copy from specification, I'll make them more clear.
> >+ aRv.Throw(NS_ERROR_INVALID_ARG);
>
> Could we perhaps throw INVALID_STATE_ERR? That would be from DOM spec,
> NS_ERROR_INVALID_ARG is Gecko internal
But there's no state in this data structure (NDEFRecord), but I'll check if there are more appropriate DOM error code.
Thanks
Assignee | ||
Comment 9•10 years ago
|
||
addressed comments from smaug.
- Update comments
- throw INVALID_STATE
Attachment #8481141 -
Attachment is obsolete: true
Attachment #8487031 -
Flags: review+
Assignee | ||
Comment 10•10 years ago
|
||
https://hg.mozilla.org/integration/b2g-inbound/rev/7ec42e511e82
https://hg.mozilla.org/integration/b2g-inbound/rev/c29b308ace9c
try: https://tbpl.mozilla.org/?tree=Try&rev=83615a9024d9
Whiteboard: [p=1]
Target Milestone: --- → 2.1 S4 (12sep)
Comment 11•10 years ago
|
||
https://hg.mozilla.org/mozilla-central/rev/7ec42e511e82
https://hg.mozilla.org/mozilla-central/rev/c29b308ace9c
Status: NEW → RESOLVED
Closed: 10 years ago
Flags: in-testsuite+
Resolution: --- → FIXED
Assignee | ||
Updated•10 years ago
|
No longer blocks: b2g-nfc-privilege
Assignee | ||
Updated•10 years ago
|
Blocks: b2g-nfc-privilege
You need to log in
before you can comment on or make changes to this bug.
Description
•