]> cvs.zerfleddert.de Git - proxmark3-svn/commitdiff
FIXME: will crash if sample buffer does not contain valid legic data (fixed by Sourcerer)
authoradam@algroup.co.uk <adam@algroup.co.uk@ef4ab9da-24cd-11de-8aaa-f3a34680c41f>
Fri, 5 Feb 2010 20:08:02 +0000 (20:08 +0000)
committeradam@algroup.co.uk <adam@algroup.co.uk@ef4ab9da-24cd-11de-8aaa-f3a34680c41f>
Fri, 5 Feb 2010 20:08:02 +0000 (20:08 +0000)
client/cmdhflegic.c

index 5ff60a3a8278481fec9c0b2b46caf51dbb6b5edc..08a03da04fab4be80d7d94833d477f5c641bbcad 100644 (file)
@@ -33,7 +33,6 @@ int CmdHelp(const char *Cmd)
  *  Output BigBuf and deobfuscate LEGIC RF tag data.
  *   This is based on information given in the talk held
  *  by Henryk Ploetz and Karsten Nohl at 26c3
  *  Output BigBuf and deobfuscate LEGIC RF tag data.
  *   This is based on information given in the talk held
  *  by Henryk Ploetz and Karsten Nohl at 26c3
- *  FIXME: will crash if sample buffer does not contain valid legic data
  */
 int CmdLegicDecode(const char *Cmd)
 {
  */
 int CmdLegicDecode(const char *Cmd)
 {
@@ -162,7 +161,7 @@ int CmdLegicDecode(const char *Cmd)
     
     if (wrc>0) {
       PrintAndLog("WRC protected area:");
     
     if (wrc>0) {
       PrintAndLog("WRC protected area:");
-      for (k=0, j=0; k < wrc; k++, i++, j += 3) {
+      for (k=0, j=0; k < wrc && j<(sizeof(out_string)-3); k++, i++, j += 3) {
         sprintf(&out_string[j], "%02x", (data_buf[i]^crc));
         out_string[j+2] = ' ';
       };
         sprintf(&out_string[j], "%02x", (data_buf[i]^crc));
         out_string[j+2] = ' ';
       };
@@ -175,7 +174,7 @@ int CmdLegicDecode(const char *Cmd)
     if (wrp>wrc) {
       PrintAndLog("Remaining write protected area:");
       
     if (wrp>wrc) {
       PrintAndLog("Remaining write protected area:");
       
-      for (k=0, j=0; k < (wrp-wrc); k++, i++, j += 3) {
+      for (k=0, j=0; k < (wrp-wrc) && j<(sizeof(out_string)-3); k++, i++, j += 3) {
         sprintf(&out_string[j], "%02x", (data_buf[i]^crc));
         out_string[j+2] = ' ';
       };
         sprintf(&out_string[j], "%02x", (data_buf[i]^crc));
         out_string[j+2] = ' ';
       };
@@ -190,7 +189,7 @@ int CmdLegicDecode(const char *Cmd)
     }
     
     PrintAndLog("Remaining segment payload:");
     }
     
     PrintAndLog("Remaining segment payload:");
-    for (k=0, j=0; k < (segment_len - wrp - 5); k++, i++, j += 3) {
+    for (k=0, j=0; k < (segment_len - wrp - 5) && j<(sizeof(out_string)-3); k++, i++, j += 3) {
       sprintf(&out_string[j], "%02x", (data_buf[i]^crc));
       out_string[j+2] = ' ';
     };
       sprintf(&out_string[j], "%02x", (data_buf[i]^crc));
       out_string[j+2] = ' ';
     };
Impressum, Datenschutz