]> git.zerfleddert.de Git - proxmark3-svn/commitdiff
Merge pull request #18 from alexgrin/iceman_master
authorIceman <iceman@iuse.se>
Tue, 2 Aug 2016 21:22:51 +0000 (23:22 +0200)
committerGitHub <noreply@github.com>
Tue, 2 Aug 2016 21:22:51 +0000 (23:22 +0200)
A few fixes

client/cmdhf.c
client/cmdhflegic.c

index a14c2e59f3b922df5ef5b1b245028df9913615f6..e1a203e7571513409f92a72df48ded780095ede3 100644 (file)
@@ -789,7 +789,7 @@ static command_t CommandTable[] = {
        {"14b",         CmdHF14B,         1, "{ ISO14443B RFIDs... }"},
        {"15",          CmdHF15,          1, "{ ISO15693 RFIDs... }"},
        {"epa",         CmdHFEPA,         1, "{ German Identification Card... }"},
-       {"legic",       CmdHFLegic,       0, "{ LEGIC RFIDs... }"},
+       {"legic",       CmdHFLegic,       1, "{ LEGIC RFIDs... }"},
        {"iclass",      CmdHFiClass,      1, "{ ICLASS RFIDs... }"},
        {"mf",          CmdHFMF,                  1, "{ MIFARE RFIDs... }"},
        {"mfu",         CmdHFMFUltra,     1, "{ MIFARE Ultralight RFIDs... }"},
index 731cead1097a5f80b0c56c104bfe81346b75b702..9168258122140048a1ec15156a2d4d18f302b60b 100644 (file)
@@ -570,20 +570,36 @@ int CmdLegicCalcCrc8(const char *Cmd){
        uint8_t cmdp = 0, uidcrc = 0, type=0;
        bool errors = false;
        int len = 0;
+       int bg, en;
        
        while(param_getchar(Cmd, cmdp) != 0x00) {
                switch(param_getchar(Cmd, cmdp)) {
                case 'b':
                case 'B':
-                       data = malloc(len);
+                       // peek at length of the input string so we can
+                       // figure out how many elements to malloc in "data"
+                       bg=en=0;
+                       param_getptr(Cmd, &bg, &en, cmdp+1);
+                       len = (en - bg + 1);
+
+                       // check that user entered even number of characters
+                       // for hex data string
+                       if (len & 1) {
+                               errors = true;
+                               break;
+                       }
+
+                       // it's possible for user to accidentally enter "b" parameter
+                       // more than once - we have to clean previous malloc
+                       if (data) free(data);
+                       data = malloc(len >> 1);
                        if ( data == NULL ) {
                                PrintAndLog("Can't allocate memory. exiting");
                                errors = true;
                                break;
-                       }                       
-                       param_gethex_ex(Cmd, cmdp+1, data, &len);
-                       // if odd symbols, (hexbyte must be two symbols)
-                       if ( len & 1 ) errors = true;
+                       }
+                       
+                       param_gethex(Cmd, cmdp+1, data, len);
 
                        len >>= 1;      
                        cmdp += 2;
Impressum, Datenschutz