From: iceman1001 <iceman@iuse.se>
Date: Tue, 1 Dec 2015 21:38:37 +0000 (+0100)
Subject: FIX: the lfsampling.c for t55xx had a tendecy to enter a neverending loop.  Moved... 
X-Git-Url: http://cvs.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/commitdiff_plain/3f267966732831e7567dc7c013fb878dd2333779?ds=inline;hp=fff6d2a3ba4bd387517df9c3aaef14ec823e552e

FIX: the lfsampling.c for t55xx had a tendecy to enter a neverending loop.  Moved exit branch into the while statement, which seems to solve it.
FIX: Strange int -> uint8_t casting behavior  (0x05 gets the 25bit set and becomes 0x10005 instead) in fskdemod,  removed int and sscanf.
---

diff --git a/armsrc/lfsampling.c b/armsrc/lfsampling.c
index 8931f41d..7d55fa3c 100644
--- a/armsrc/lfsampling.c
+++ b/armsrc/lfsampling.c
@@ -271,7 +271,7 @@ void doT55x7Acquisition(size_t sample_size) {
 	uint8_t curSample = 0;
 	uint8_t lastSample = 0;
 	uint16_t skipCnt = 0;
-	while(!BUTTON_PRESS() && !usb_poll_validate_length() && skipCnt<1000) {
+	while(!BUTTON_PRESS() && !usb_poll_validate_length() && skipCnt < 1000 && (i < bufsize) ) {
 		WDT_HIT();		
 		if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXRDY) {
 			AT91C_BASE_SSC->SSC_THR = 0x43;
@@ -306,11 +306,10 @@ void doT55x7Acquisition(size_t sample_size) {
 				// if just found start - recover last sample
 				if (!startFound) {
 					dest[i++] = lastSample;
-				startFound = true;
+					startFound = true;
 				}
 				// collect samples
 				dest[i++] = curSample;
-				if (i >= bufsize-1) break;
 			}
 		}
 	}
diff --git a/client/cmddata.c b/client/cmddata.c
index aeabd985..3898f28d 100644
--- a/client/cmddata.c
+++ b/client/cmddata.c
@@ -934,15 +934,15 @@ char *GetFSKType(uint8_t fchigh, uint8_t fclow, uint8_t invert)
 int FSKrawDemod(const char *Cmd, bool verbose)
 {
 	//raw fsk demod  no manchester decoding no start bit finding just get binary from wave
-	//set defaults
-	int rfLen = 0;
-	int invert = 0;
-	int fchigh = 0;
-	int fclow = 0;
+	uint8_t rfLen, invert, fchigh, fclow;
 
+	//set defaults
 	//set options from parameters entered with the command
-	sscanf(Cmd, "%i %i %i %i", &rfLen, &invert, &fchigh, &fclow);
-
+	rfLen = param_get8ex(Cmd, 0, 0, 10);
+	invert = param_get8ex(Cmd, 1, 0, 10);
+	fchigh = param_get8ex(Cmd, 2, 0, 10);
+	fclow = param_get8ex(Cmd, 3, 0, 10);
+	
 	if (strlen(Cmd)>0 && strlen(Cmd)<=2) {
 		 if (rfLen==1){
 			invert = 1;   //if invert option only is used
@@ -958,31 +958,31 @@ int FSKrawDemod(const char *Cmd, bool verbose)
 	if (fchigh==0 || fclow == 0){
 		fcs = countFC(BitStream, BitLen, 1);
 		if (fcs==0){
-			fchigh=10;
-			fclow=8;
-		}else{
+			fchigh = 10;
+			fclow = 8;
+		} else {
 			fchigh = (fcs >> 8) & 0xFF;
 			fclow = fcs & 0xFF;
 		}
 	}
+
 	//get bit clock length
-	if (rfLen==0){
+	if (rfLen == 0){
 		rfLen = detectFSKClk(BitStream, BitLen, fchigh, fclow);
 		if (rfLen == 0) rfLen = 50;
 	}
-	int size = fskdemod(BitStream,BitLen,(uint8_t)rfLen,(uint8_t)invert,(uint8_t)fchigh,(uint8_t)fclow);
-	if (size>0){
-		setDemodBuf(BitStream,size,0);
+	int size = fskdemod(BitStream, BitLen, rfLen, invert, fchigh, fclow);
+	if (size > 0){
+		setDemodBuf(BitStream, size, 0);
 
 		// Now output the bitstream to the scrollback by line of 16 bits
 		if (verbose || g_debugMode) {
-			PrintAndLog("\nUsing Clock:%d, invert:%d, fchigh:%d, fclow:%d", rfLen, invert, fchigh, fclow);
-			PrintAndLog("%s decoded bitstream:",GetFSKType(fchigh,fclow,invert));
+			PrintAndLog("\nUsing Clock:%d, invert:%d, fchigh:%d, fclow:%u", rfLen, invert, fchigh, fclow);
+			PrintAndLog("%s decoded bitstream:", GetFSKType(fchigh, fclow, invert));
 			printDemodBuff();
 		}
-
 		return 1;
-	} else{
+	} else {
 		if (g_debugMode) PrintAndLog("no FSK data found");
 	}
 	return 0;
diff --git a/client/cmdlft55xx.c b/client/cmdlft55xx.c
index f034ce5a..6e8893d5 100644
--- a/client/cmdlft55xx.c
+++ b/client/cmdlft55xx.c
@@ -1407,7 +1407,7 @@ int CmdT55xxBruteForce(const char *Cmd) {
 			found = tryDetectModulation();
 
 			if ( found ) {
-				PrintAndLog("Found valid password:[%08X]", testpwd);
+				PrintAndLog("Found valid password: [%08X]", testpwd);
 				return 0;
 			} 
 		}