]> err.no Git - yubikey-personalization/commitdiff
fix a bug writing invalid data to a YubiKey NEO
authorKlas Lindfors <klas@yubico.com>
Wed, 26 Dec 2012 13:01:12 +0000 (14:01 +0100)
committerKlas Lindfors <klas@yubico.com>
Wed, 26 Dec 2012 13:01:12 +0000 (14:01 +0100)
if an unknown identifier was used (or no identifier)
0x24 would be written instead of 0x00.
add a test for this.

tests/test_ndef_construction.c
ykpers.c

index 47c010408d99e7b078f483b553dd23827bb69613..de26fca1abbae1da772f32a783a05706c6367939 100644 (file)
@@ -118,6 +118,23 @@ void _test_other_lang_text()
        ykp_free_ndef(ndef);
 }
 
+void _test_uri_without_identifier()
+{
+       YK_NDEF *ndef = ykp_alloc_ndef();
+       char uri[] = "example.com/foo";
+       int rc = ykp_construct_ndef_uri(ndef, uri);
+       char text[256];
+       assert(rc == 1);
+       assert(ndef->type == 'U');
+       assert(ndef->data[0] == 0);
+       assert(strncmp(ndef->data + 1, "example.com/foo", 15) == 0);
+       assert(ndef->len == 16);
+       rc = ykp_ndef_as_text(ndef, text, 256);
+       assert(rc == 1);
+       assert(strncmp(uri, text, strlen(uri)) == 0);
+       ykp_free_ndef(ndef);
+}
+
 int main (void)
 {
        _test_https_uri();
@@ -125,6 +142,7 @@ int main (void)
        _test_exact_uri();
        _test_exact_text();
        _test_other_lang_text();
+       _test_uri_without_identifier();
 
        return 0;
 }
index 00bb048d83ade95b48a7589ca0a6fa1d9f699068..a355451f8a44f157e67affe35335e73ac7f9086a 100644 (file)
--- a/ykpers.c
+++ b/ykpers.c
@@ -416,7 +416,7 @@ int ykp_construct_ndef_uri(YK_NDEF *ndef, const char *uri)
                ykp_errno = YKP_EINVAL;
                return 0;
        }
-       if(indx > num_identifiers) {
+       if(indx == num_identifiers) {
                ndef->data[0] = 0;
        } else {
                ndef->data[0] = indx + 1;