From: marshmellow42 Date: Fri, 7 Apr 2017 22:00:55 +0000 (-0400) Subject: fix buffer length bugs X-Git-Tag: v3.0.0~16^2^2~3 X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/commitdiff_plain/f1004b345ea236d8ebb130672b066c4e95e2e298?ds=inline fix buffer length bugs adjust lf search a little as to when the chiptype check happens --- diff --git a/client/cmddata.c b/client/cmddata.c index f15d7ad0..8f2aea5a 100644 --- a/client/cmddata.c +++ b/client/cmddata.c @@ -40,7 +40,7 @@ void setDemodBuf(uint8_t *buff, size_t size, size_t startIdx) if (buff == NULL) return; - if ( size >= MAX_DEMOD_BUF_LEN) + if ( size + startIdx >= MAX_DEMOD_BUF_LEN) size = MAX_DEMOD_BUF_LEN; size_t i = 0; @@ -65,11 +65,12 @@ bool getDemodBuf(uint8_t *buff, size_t *size) { // option '1' to save DemodBuffer any other to restore void save_restoreDB(uint8_t saveOpt) { - static uint8_t SavedDB[MAX_GRAPH_TRACE_LEN]; + static uint8_t SavedDB[MAX_DEMOD_BUF_LEN]; static size_t SavedDBlen; static bool DB_Saved = false; if (saveOpt==1) { //save + memcpy(SavedDB, DemodBuffer, sizeof(DemodBuffer)); SavedDBlen = DemodBufferLen; DB_Saved=true; @@ -322,7 +323,7 @@ int Cmdmandecoderaw(const char *Cmd) return 0; } if (DemodBufferLen==0) return 0; - uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0}; + uint8_t BitStream[MAX_DEMOD_BUF_LEN]={0}; int high=0,low=0; for (;ihigh) high=DemodBuffer[i]; @@ -388,7 +389,7 @@ int CmdBiphaseDecodeRaw(const char *Cmd) PrintAndLog("DemodBuffer Empty - run 'data rawdemod ar' first"); return 0; } - uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0}; + uint8_t BitStream[MAX_DEMOD_BUF_LEN]={0}; size = sizeof(BitStream); if ( !getDemodBuf(BitStream, &size) ) return 0; errCnt=BiphaseRawDecode(BitStream, &size, offset, invert); @@ -419,7 +420,7 @@ int ASKbiphaseDemod(const char *Cmd, bool verbose) int offset=0, clk=0, invert=0, maxErr=0; sscanf(Cmd, "%i %i %i %i", &offset, &clk, &invert, &maxErr); - uint8_t BitStream[MAX_DEMOD_BUF_LEN]; + uint8_t BitStream[MAX_GRAPH_TRACE_LEN]; size_t size = getFromGraphBuf(BitStream); //invert here inverts the ask raw demoded bits which has no effect on the demod, but we need the pointer int errCnt = askdemod(BitStream, &size, &clk, &invert, maxErr, 0, 0); diff --git a/client/cmdlf.c b/client/cmdlf.c index 5b91d2e8..7670136f 100644 --- a/client/cmdlf.c +++ b/client/cmdlf.c @@ -1066,7 +1066,7 @@ int CmdLFfind(const char *Cmd) ans=FSKrawDemod("",true); if (ans>0) { PrintAndLog("\nUnknown FSK Modulated Tag Found!"); - return 1; + return CheckChipType(cmdp);; } } bool st = true; @@ -1074,15 +1074,16 @@ int CmdLFfind(const char *Cmd) if (ans>0) { PrintAndLog("\nUnknown ASK Modulated and Manchester encoded Tag Found!"); PrintAndLog("\nif it does not look right it could instead be ASK/Biphase - try 'data rawdemod ab'"); - return 1; + return CheckChipType(cmdp);; } ans=CmdPSK1rawDemod(""); if (ans>0) { PrintAndLog("Possible unknown PSK1 Modulated Tag Found above!\n\nCould also be PSK2 - try 'data rawdemod p2'"); PrintAndLog("\nCould also be PSK3 - [currently not supported]"); PrintAndLog("\nCould also be NRZ - try 'data nrzrawdemod'"); - return 1; + return CheckChipType(cmdp);; } + ans = CheckChipType(cmdp); PrintAndLog("\nNo Data Found!\n"); } return 0;